ruby-trunk-changes 2023-04-05

今日は主に rubygems のテストの修正や YJIT の最適化などがありました。

[a78e0ca968] Hiroshi SHIBATA 2023-04-04 07:09:31 UTC

rubygems のテストの helper でクラスメソッドの呼び出しのため定数を直接参照していたのを self.class 経由で呼び出すように変更しています。

[a881b33818] Hiroshi SHIBATA 2023-04-04 03:03:13 UTC

rubygems の rubocop の警告対応のため正規表現の =~ でのマッチをしていたのを Regexp#match? メソッドを利用するように変更しています。

[06da0d1456] Hiroshi SHIBATA 2023-04-04 03:12:02 UTC

rubygems で rubycop の警告対応のため if と論理否定のかわりに unless を使うように変更しています。

[a84c99468f] Peter Zhu 2023-04-04 13:27:45 UTC

32bit の環境で構造体 struct time_object に埋め込んでいた bit field が意図したサイズに納まってなくて異常終了の原因になっていたみたいなので削除しています。 [ruby-core:113106] [Bug #19575]

[ba6ccd8714] Jean Boussier 2022-10-19 14:56:37 UTC

Process.warmup というメソッドが追加されています。アプリケーションからクラス定義などの起動時の処理が完了したよというのを伝えるためのメソッドみたいで、このタイミングで GC して残ったオブジェクトを RGenGC の old な世代にしておくということをするようです。うーん、なるほど? まあでも他にもこういうタイミングでやりたい最適化のアイデアというのはありそう。 [ruby-core:109081] [Feature #18885]

[87253d047c] Aaron Patterson 2023-04-04 16:49:26 UTC

ba6ccd871442f55080bffd53e33678c0726787d2 の Process.warmup で実行される処理内で Transient Heap の mark 処理完了の状態に遷移させるのと、オブジェクトの old への promote 中に GC が発生しないようにする処理を追加しています。

[b7717fc390] Takashi Kokubun 2023-04-04 17:58:11 UTC

YJIT で VM スタックのトップのいくつかをヒープでなくレジスタを割当てる最適化ができるようにしているようです。これ確か大昔に YARV の勉強会の時に stack caching という名前で勉強したテクニックじゃなかったかな。 https://github.com/ruby/ruby/pull/7651

[116c0f92ef] Takashi Kokubun 2023-04-04 18:07:49 UTC

make ejit-smoke-test というターゲットで test/ruby/test_yjit.rb の実行を追加しています。 https://github.com/ruby/ruby/pull/7651

[e5de0fe108] Takashi Kokubun 2023-04-04 18:08:59 UTC

YJIT の --yjit-stats オプションで計測するカウンタの temp_reload が未使用になっていたので削除しています。

[d26d3575ca] Maxime Chevalier-Boisvert 2023-04-04 20:41:52 UTC

YJIT の --yjit-stats で計測する情報にコードブロックごとの平均バリエーション数の情報を追加しています。 https://github.com/ruby/ruby/pull/7653

[1190ec60cc] Takashi Kokubun 2023-04-04 21:01:41 UTC

GitHub Actions の YJIT を使ったテストで default gems の syntax_suggest のテストのタイムアウトを延ばすため環境変数の指定を追加しています。

[1da2e7fca3] Peter Zhu 2023-04-04 21:30:06 UTC

Variable Width Allocation の有効無効を切り換えるマクロ USE_RVARGC はもう不要ということで削除して常に有効にしています。 https://github.com/ruby/ruby/pull/7655 [ruby-core:113114] [Feature #19579]

[bb927acd3b] Jeremy Evans 2023-04-04 20:58:59 UTC

標準添付ライブラリ optparse の rdoc 用コメントでオプションの型の指定で他の標準添付ライブラリが必要なものに必要な require の指定を追記しています。 [ruby-core:113064] [Bug #19566]

[52ff2ce9da] Étienne Barrié 2023-03-24 14:29:46 UTC

標準添付ライブラリ reline の Reline::LineEditor#key_delete で vi mode と emacs mode で少し挙動を変更しています。また emacs mode の時の処理 em_delete で Delete キーが押されたのか Ctrl-D なのかを判定してさらに挙動を分けるようにしています。 https://github.com/ruby/ruby/pull/504

[f79912ea78] "dependabot[bot]" 2023-04-05 03:00:03 UTC

GitHub Actions の workflow で使っている ruby/setup-ruby のバージョンを更新しています。

[6d8875b5d7] Takashi Kokubun 2023-04-05 05:05:45 UTC

RJIT のコンパイラ実装の stack_swap というメソッドでオフセット指定を使わず 0, 1 固定で変更する位置を指定してしまっていた不具合を修正しています。

[e06bebff5e] Takashi Kokubun 2023-04-03 07:49:32 UTC

RJIT のコンパイラで型情報を推論する時にメソッド呼び出しに渡した引数の情報をメソッド内に伝播させるようにしています。

[28d6c6d69b] lukeg 2023-03-20 18:01:40 UTC

rubygems のテストクラスのいくつかを Gem という名前を追加するように改名しています。

[bf8afe434f] Hiroshi SHIBATA 2023-04-05 01:24:45 UTC

rubygems のテストの helper の Gem::TestCase.mingw_windows? というメソッドは利用されていないみたいで削除して Gem::TestCase#mingw_windows? に展開しています。

[cbeea5f3e6] Hiroshi SHIBATA 2023-04-05 01:45:46 UTC

rubygems のテストのための helper で java_platform? というメソッドを定義していましたが削除して Gem.java_platform? を直接呼ぶように変更しています。

[a464951fc7] Hiroshi SHIBATA 2023-04-05 01:50:15 UTC

rubygems のテスト用の helper で Gem::TestCase#.win_platform? を定義していたのも削除して Gem.win_platform? を直接呼ぶようにしています。

[6d0caac425] Hiroshi SHIBATA 2023-04-05 01:53:35 UTC

rubygems のテスト用 helper の Gem::TestCase.make_command メソッドを削除して唯一の呼び元の Gem::TestCase#make_command 内に展開しています。

[7f9a5a7562] Hiroshi SHIBATA 2023-04-05 01:54:36 UTC

rubygems のテスト用 helper の Gem::TestCase#.process_based_port メソッドはもう未使用だったので削除しています。

[8e37eb1d15] Hiroshi SHIBATA 2023-04-05 02:05:05 UTC

rubygems のテストの helper でクラスメソッドの定義のために class << self ... end の記法を使ってたところを def self.xxx で定義するように記法を変更しています。しかもなぜか 1つのメソッドだけこの記法になってたみたいですね。

[9a5d4cc80b] Hiroshi SHIBATA 2023-04-05 02:07:45 UTC

rubygems のテストの helper Gem::TestCase に Gem::Deprecate を extend していたのはもう不要になっていたみたいで削除しています。

[4f77d1cdb8] Takashi Kokubun 2023-04-05 06:19:52 UTC

RJIT の VM 命令 branchif のコンパイル処理で静的に真偽がわかっている時に絶対通らないほうのコードを生成しないよう最適化しています。

[4e9c3b4518] Takashi Kokubun 2023-04-05 06:36:24 UTC

RJIT のコンパイラでブロック引数のタイプは静的にわかるので実行時に判定しないようにしています。

[2ddf6079f1] Takashi Kokubun 2023-04-05 06:46:14 UTC

RJIT のコンパイラVM スタックの値の整数を期待するものをチェックするのに guard_two_fixnums というメソッドを利用する箇所を増やすようにリファクタリングしています。

[66fe64b269] Takashi Kokubun 2023-04-05 06:55:19 UTC

RJIT のコンパイラ実装の未使用変数の削除。

[9bef39de74] Takashi Kokubun 2023-04-05 07:38:37 UTC

RJIT の Object#respond_to? メソッドの専用のコードを生成する実装で第2引数の処理が未実装だったみたいなのを追加しています。

[65d27d3c0a] Takashi Kokubun 2023-04-05 07:46:09 UTC

RJIT のコンパイラ実装で型推論した情報で文字列型とわかっている時に実行時の guard 処理のコードを生成しないようにしています。

[e003784fc8] Hiroshi SHIBATA 2023-04-05 08:06:01 UTC

rubygems に rubocop の警告対応のために正規表現リテラルに %r の記法を使うようにしています。と、思ったけど逆に %r を // にしている変更もあって、たぶん "/" を含む時は %r でそうでないときは // を使うべし、ということでしょうか。