今日は拡張ライブラリ json の最適化や Data/Struct のインスタンスで属性がないものはオブジェクトを freeze した状態で作るようにする変更などがありました。
[177949c8b2] Jean Boussier 2026-01-02 11:57:00 UTC
Thread::Queue の初期化時にリングバッファの内容の初期化に MEMCPY() を利用する最適化。
[b9819ad06c] Peter Zhu 2026-01-01 21:36:17 UTC
Hash#dup や Hash#replace での Hash の内容の複製処理 hash_copy() 関数でオリジナルの Hash が compare_by_identity のハッシュだった場合に戻り値を明示的に pin-down するため rb_gc_register_pinning_obj() を呼んでいます。
[1596853428] Jean Boussier 2025-12-31 13:52:16 UTC
メソッド呼び出し時の引数処理の関数 args_setup_opt_parameters() で不要な省略可能引数の値の nil 初期化ループを削除しています。どうせ ruby スクリプト側で指定されているデフォルト値をセットすることになるので nil 埋めは不要でした。
[c47a8052f6] Jean Boussier 2026-01-02 09:47:55 UTC
メソッド引数の省略可能引数のデフォルト値の評価に他の引数やキーワード引数を参照した時の挙動についてのテストメソッドを追加しています。デフォルト値に Kernel#eval を使うと後から登場する引数を参照させることができてしまう(がまだデフォルト値は設定されていない)という挙動になるようです。あれ、ということは 1596853428393136ee9964ad4c11b0120ed648d1 でやめた nil 埋めは必要?
[e7695ba3d9] Peter Zhu 2026-01-02 16:41:24 UTC
GC の mmtk 実装の mark? 処理時の T_NONE オブジェクトが渡されてないかのチェックと rb_bug() による異常終了を追加しています。
[16feb46fa2] Jean Boussier 2026-01-02 11:33:34 UTC
Thread::Queue および Thread::SizedQueue の initialize や push, close などほぼ全てのメソッドを ruby 実装にして実体の C 関数を Primitive を使って呼ぶ組込みクラスの実装に変更しています。
[60d9b10dab] Peter Zhu 2026-01-02 21:36:05 UTC
GC の mmtk 実装で内部で利用している native thread でのエラーをインタプリタの異常終了に伝播させてバックトレースが表示できるようにしています。
[2f4119eaea] Peter Zhu 2026-01-02 21:37:25 UTC
60d9b10dab9c9e92518f5579e6d36006c0dd359d の続き? で GC の mmtk 実装の e7695ba3d9f0e8ee17025af4d42ecaf2dad47f29 での T_NONE オブジェクトのチェック時の rb_bug() での異常終了を rb_mmtk_gc_thread_bug() という関数を利用するように変更しています。
[a8a989b6f6] Nobuyoshi Nakada 2026-01-03 03:28:00 UTC
gems/bundled_gems に net-imap のテストに利用する commit hash の指定を追加しています。
[d7a6ff8224] Nobuyoshi Nakada 2026-01-03 06:03:57 UTC
Data クラスのインスタンスのオブジェクト(ややこしい)はメンバーが空の時は常に freeze して生成するようにしています。 [ruby-core:124417] [Bug #21819]
[b6463d59e7] Scott Myron 2026-01-03 02:47:59 UTC
拡張ライブラリ json の Unicode エンコーディングの処理で UTF-32 から UTF-8 への変換時に中間バッファを使って結果をコピーしていたのが不要だったので直接バッファに結果を書きこむように最適化しています。
[65f9c4a06a] Shannon Skipper 2026-01-02 02:15:11 UTC
Struct および Data のインスタンスの inspect メソッドで要素が空の時に余分な空白が含まれるのを削るようにしています。