ruby-trunk-changes 2026-05-18

今日は主に複数 Ractor 利用時のクラス変数の扱いの不具合修正やcase 文の最適化のための内部的なオブジェクト cdhash の実装の T_IMEMO 化などの変更がありました。

[6bc1aa31cc] Peter Zhu 2026-05-17 02:02:32 UTC

rb_cvar_set() で複数 Ractor 利用時にクラス変数のキャッシュの複製がきちんと作られていなかったため異常終了する可能性があった不具合を修正しています。 [ruby-core:125518] [Bug #22072]

[5eb4284144] Jean Boussier 2026-05-17 10:35:47 UTC

rb_class_path_cached() という C API を利用していたところは rb_mod_name() で代替するようにしています。元々は rb_mod_name() が遅かったので別の関数が用意されていましたが今は単に rb_mod_name() を呼ぶだけの wrapper 関数となっていたので廃止しようとしているようです。

[aed64ade9d] Jean Boussier 2026-05-17 11:06:51 UTC

構造体 rb_vm_t の GC の mark root として使うための global_object_list を linked list として定義していたのを配列として保持するようにしています。

[74c3696d59] Jean Boussier 2026-05-17 17:43:23 UTC

debug_counter.h のカウンタに obj_imemo_subclasses という項目を追加して imemo_subclasses タイプの T_IMEMO 型オブジェクトの解放時にインクリメントするようにしています。確保時じゃなくて開放時なんだな。

[cfff91a3b0] Peter Zhu 2026-05-17 12:32:21 UTC

GC の mmtk 実装の Ractor デバッグ用に struct RVALUE の末尾に追加するメモリ領域に関するマクロ定義を昨日 gc/gc.h に移動した共通のものを使うようにリファクタリングしています。

[837f684377] Jean Boussier 2026-04-28 06:56:06 UTC

内部的に多用している st.c の st_table 構造体の bins メンバーを削除して構造体サイズを削減しています。 st_table::entries の配列の末尾に bins も繋げるレイアウトにしたため不要になったもののようです。

[3f51506cff] Jeremy Evans 2026-05-16 17:57:14 UTC

rubygems でエラーメッセージなどで例示する依存関係から "~>" によるバージョン指定の表記をやめるようにしています。

[95626e3a9c] himura467 2026-05-17 10:31:18 UTC

IO::Buffer#| が既に親のバッファが解放された IO::Buffer#slice で生成された IO::Buffer について呼ばれた時の不正アクセスの不具合を修正しています。

[b38f133c70] Nobuyoshi Nakada 2026-05-18 05:42:02 UTC

io_buffer.c の memory_xor() および memory_not() の引数に const 修飾子を追加しています。 警告抑制?

[99dc513d15] Jean Boussier 2026-05-17 12:40:14 UTC

case 文の最適化のために作られる内部的な Hash の cdhash を Hash オブジェクトの実装を使っていたのを T_IMEMO 型のオブジェクトのタイプとして追加しています。Hash の実装が最適化のため小さいサイズの時に ar_hash になると cdhash として使えないため強制的に st_hash にしないといけなかった複雑性の回避と、結果的に必要なメモリサイズの削減になるため。

[d036506b15] Jean Boussier 2026-05-17 20:08:10 UTC

99dc513d155484a1291394e953a5cdfd6dab92e1 の続きで case 文の最適化のための cdhash でジャンプオフセットを保持する整数を Fixnum として持つ必要がなくなったので st_data_t 型をそのまま保持するようにしています。

[e4e1c92a1d] Jean Boussier 2026-05-18 09:17:24 UTC

d036506b15e0fe34a36b00cfd461d409b1fcc97d で case 文の最適化のための cdhash の値が st_data_t 型をそのまま保持するようにしたので必要なところで Fixnum に変換する必要があったのが漏れていたり、cdhash が Hash 実装でなくなったので rb_hash_foreach() と st_foreach() に変更する必要があったのが漏れてたりしたのを修正しています。