以下の内容はhttps://ruby-trunk-changes.hatenablog.com/entry/ruby_trunk_changes_20250830より取得しました。


ruby-trunk-changes 2025-08-30

今日は Object#class の最適化などがありました。

[df1334421f] Takashi Kokubun 2025-08-29 14:22:40 UTC

ZJIT に未対応の VM 命令で JIT コンパイルをキャンセルした時の統計情報カウンタを追加しています。 https://github.com/ruby/ruby/pull/14392

[7f4a6afab8] Max Bernstein 2025-08-29 16:32:38 UTC

ZJIT の defined? についての不具合が修正されて不要になった side-exit を削除しています。 https://github.com/Shopify/ruby/issues/703 https://github.com/ruby/ruby/pull/14308 https://github.com/ruby/ruby/pull/14401

[fc4f8c879a] Takashi Kokubun 2025-08-29 16:40:15 UTC

GitHub Actions の YJIT 用 workflow から make yjit-bench を実行するジョブを削除しています。 https://github.com/ruby/ruby/pull/14394

[b6f4b5399d] Max Bernstein 2025-08-29 16:46:08 UTC

ZJIT でインスタンス変数参照の HIR の GetIvar 命令で型プロファイル情報を元に既知の Object Shapes の shape の時のインライン化最適化を実装しています。 https://github.com/ruby/ruby/pull/14388

[dba0f72592] Takashi Kokubun 2025-08-29 16:57:26 UTC

GitHub Actions の macOS 版 workflow でテスト実行のタイムアウトをのばしています。

[710c5c8ea1] Max Bernstein 2025-08-29 11:51:21 UTC

ZJIT の send 命令のコンパイル時に ZJIT の統計情報カウンタの dynamic_send_count のインクリメントを行うようにしています。

[99bf47ab8c] Max Bernstein 2025-08-29 12:00:29 UTC

ZJIT の統計情報カウンタにメソッド呼び出しの引数渡しの方法による JIT コンパイルキャンセルを理由ごとのカウンタを追加しています。

[39f3cab80d] Takashi Kokubun 2025-08-29 18:43:33 UTC

vm_insnhelper.c に rb_vm_sendforward() という関数を追加して rb_vm_send() の中で分岐していた委譲用引数の時の処理を関数として別に分けるようにしています。 https://github.com/ruby/ruby/pull/14393

[cc07159fba] Alan Wu 2025-08-29 19:32:57 UTC

rb_str_resurrect() の Doxygen 用コメントを修正。使われてないはずと書かれてましたが zlib で利用されているとのことでその記述は削除しています。

[2f6a9c5167] Stan Lo 2025-08-29 18:03:53 UTC

YJIT と ZJIT からそれぞれ複数 Ractor モードかどうか判定する関数の名称を rb_{yjit,zjit}_multi_ractor_p() -> rb_jit_multi_ractor_p() と改名して統合しています。

[561050496c] Stan Lo 2025-08-29 18:13:42 UTC

2f6a9c51670dd6dcc1cae52e4a793143fb148eb6 と同様に rb_jit_vm_lock_then_barrier() という関数を追加して YJIT/ZJIT 双方から呼ぶように統合しています。

[3f3a54efff] Stan Lo 2025-08-29 18:16:43 UTC

2f6a9c51670dd6dcc1cae52e4a793143fb148eb6 と同様に rb_jit_vm_unlock() という関数を追加して YJIT/ZJIT 双方から呼ぶように統合しています。

[d4d510da18] Alan Wu 2025-08-29 22:05:48 UTC

tool/enc-unicode.rb のコメントに make update-unicode というターゲットから呼ばれることを追記しています。

[96c8938535] Alan Wu 2025-08-29 22:34:11 UTC

rubyspec で正規表現の不具合修正がバックポートされたのに追随してバージョンでの分岐を修正しています。

[d94e0a7bca] Nobuyoshi Nakada 2025-01-22 03:44:45 UTC

GitHub Actions の bundled gems の更新チェックの workflow で更新時の自動コミットのステップを commit と push で分けています。

[01a57bd6cd] Nobuyoshi Nakada 2025-01-22 05:58:35 UTC

GitHub Actions の bundled gems の更新用 workflow で gems/bundled_gems にテスト用 commit hash の指定がしばらく更新されないままだとメッセージを出力するようにしています。

[fd0c772db7] Jean Boussier 2025-08-30 08:51:03 UTC

Object#class の実装で T_ICLASS をスキップするためのループの部分をインライン化して struct RBasic::flags のフラグチェックだけで判定するように軽量化しています。

[01b89528cb] Jean Boussier 2025-08-30 10:15:11 UTC

fd0c772db7e5098c2b8e03559317a3592074dfe7 からの続きでさらに T_MODULE も同様の判定方法を使えるように fake_class_p() を拡張しています。このために T_MODULE の時の struct RBasic::flags のビットフラグ RMODULE_IS_REFINEMENT を下位 2 bit 目から 6 bit 目に移動しています。これは T_CLASS の時の RUBY_FL_SINGLETON と同じ位置のビットを避けるためみたいですね。

[f5da6395bd] Jean Boussier 2025-08-30 11:04:11 UTC

さらに Object#class の実装で ruby 実装から C の関数を呼ぶ時に self が NULL になることはありえないので NULL チェックも省いた関数 rb_obj_class_must() を追加して、ruby 実装からはこちらを呼ぶようにしています。なんですが、RCLASS_SUPER() で親を辿った時に NULL というのもチェックを省いているけどこれはいいのかな。

[d89e73471d] Jean Boussier 2025-08-30 11:32:44 UTC

fd0c772db7e5098c2b8e03559317a3592074dfe7 からの一連の変更の続きで通常の T_CLASS/T_MODULE がくるまで辿るループ部分を class_real() という関数に切り出して共有化するリファクタリング

[395bda2fa1] Jean Boussier 2025-08-30 12:17:14 UTC

Object#class の ruby 実装から呼び出す f5da6395bd3fdf4b76a480f174cd304823ddc57f で追加した関数 rb_obj_class_must() を static inline 関数にしています。ruby 実装から呼ぶ関数を inline 関数にしちゃってもいいんだっけ? と思ったけど Primitive.cexpr! で埋め込んでるから展開後にコンパイル時にインライン化されるからいいのかな。ヘッダファイルじゃなくて object.c で定義しているけど……。




以上の内容はhttps://ruby-trunk-changes.hatenablog.com/entry/ruby_trunk_changes_20250830より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14