ruby-trunk-changes 2026-05-05

今日は主に Object Shapes 関連のリファクタリングや shape_id のインラインキャッシュの最適化などがありました。

[f6d1bc6b99] Jean Boussier 2026-05-04 14:56:31 UTC

NEWS に Array#pack の指示子 "^" の追加について追記しています。

[b583dd6879] Benoit Daloze 2026-05-04 15:15:53 UTC

Exception#exception メソッドの rdoc 用コメントのサンプルの typo 修正。

[0cbd210c3a] Earlopain 2026-04-20 17:16:56 UTC

標準添付ライブラリとしての prism の ripper 互換性の対応。

[1367f88592] Earlopain 2026-04-20 17:26:30 UTC

prism の ripper 向け AST 生成の最適化。

[1aa62e897c] Earlopain 2026-04-21 17:38:06 UTC

同じく prism の ripper 用 AST 生成で Array のかわりに Set を使ったり case 文による分岐を if 文による分岐に変更するなどの最適化。

[8d40d48148] Jean Boussier 2026-05-04 12:48:59 UTC

Object Shapes の shape_id のインラインキャッシュのチェック処理を revalidate_cache() という関数に切り出して共有化するリファクタリング。

[a2ba1ed43b] Jean Boussier 2026-05-04 13:55:41 UTC

8d40d481482d7ca38457862f64feb9e1668bbd81 で切り出した関数 revalidate_cache() で shape_id のインラインキャッシュ時にキーとして RSHAPE_OFFSET() で不要なフラグなどを除いたオフセットのみをキャッシュするようにしています。キャッシュヒットしやすくする最適化のようです。

[880901afbb] Jean Boussier 2026-05-04 14:37:27 UTC

vm_insnhelper.c のインスタンス変数のキャッシュ処理で共通の処理を共有させるリファクタリング。

[a440f23c70] Jean Boussier 2026-05-04 14:42:11 UTC

880901afbb4687d6410e616fbc55e123141d34ca で改名した revalidate_setivar_cache() の定義に ALWAYS_INLINE() を利用して常に inline 化されるようにしています。

[467942436a] nozomemein 2026-04-15 22:09:06 UTC

ZJIT のインスタンス変数を設定するテストで Variable Width Allocation による拡張 slot への埋め込みの境界付近で結果が不安定になってたのでたくさん変数をセットして常に heap にテーブルが保持されるようにしています。

[138b4ba2fb] nozomemein 2026-04-30 22:59:08 UTC

ZJIT のテストの GC の内部実装に依存したものの安定化

[06fc5c2482] Peter Zhu 2026-05-03 01:21:21 UTC

GC の mmtk 実装ではマルチスレッドを利用するため GC 実装内で rb_execution_context_t を取得する時に GET_EC() が期待した動作をしないので専用に関数 rb_gc_get_ec() を導入して、GC 中は rb_objspace_t にメンバー vm_context を追加して GC 開始時に格納しておいた rb_execution_context_t を利用参照するようにしています。

[cc31e846d8] John Hawthorn 2026-05-04 07:40:51 UTC

ARGF オブジェクトに RGenGC 用の Write Barrier を追加して WB-protected なオブジェクトに変更しています。

[867acf3161] John Hawthorn 2026-05-04 07:30:02 UTC

内部的に利用している memory_view というオブジェクトも RGenGC 用の Write Barrier を追加して WB-protected なオブジェクトにしています。これなにに使ってるんだっけ?

[0401ac2d4b] "dependabot[bot]" 2026-05-05 04:02:34 UTC

GitHub Actions の workflows で利用しているアクションのバージョンを更新しています。

[a984c88029] Jean Boussier 2026-05-04 11:25:19 UTC

GC.compact による移動時に T_OBJECT 型オブジェクトを Variable Width Allocation による slot サイズの異なる heap 間の移動で Object Shapes の再構築時の GC の再帰的発生の対策がもう不要になっているので削除してシンプルにしています。 https://github.com/ruby/ruby/pull/6926 https://github.com/ruby/ruby/pull/6938

[fcdf2aa7a2] Jean Boussier 2026-05-05 07:28:49 UTC

vm_callinfo.h の vm_pack_shape_and_index() で index をインクリメントして構造体に詰めておいて vm_unpack_shape_and_index() でデクリメントして取り出しているのが無駄だったのでそのまま設定するようにリファクタリングしています。

[1eda917b09] Jean Boussier 2026-05-05 06:09:19 UTC

Object Shapes の rb_shape_t 構造体の parent_id を parent_offset に改名しています。ビットフラグの情報が含まれていないことを明示するための改名みたいです。

[bd49c02e6e] Jean Boussier 2026-05-05 06:13:48 UTC

shape.c の inline 関数の shape_id() や shape_offset() を SHAPE_ID() や SHAPE_OFFSET() と大文字の関数名に改名しています。慣習的にはマクロを大文字で命名することが多いですが、変数名として使いたい名前なのでそこと衝突するのを避けるためとのこと。