今日は主に拡張ライブラリ json の SIMD 命令を利用した最適化や潜在的なメモリリーク修正などがありました。
[961683bcb1] Satoshi Tagomori 2025-10-31 11:06:33 UTC
static link された拡張ライブラリの Init_xxx() 関数を require した Namespace 内で実行するようにしています。通常の(共有ライブラリの)拡張ライブラリの時はファイル自体にコピーを Namespace ごとに作るようですが static link されている時は Init_xxx() を複数回呼ぶことになるのかな?
[65168b7eaf] Satoshi Tagomori 2025-10-31 11:07:28 UTC
デバッグビルド時にのみ定義する Namespace.root, Namespace.main などのデバッグ用メソッドの定義を制御する preprocessor 分岐の条件で RUBY_DEBUG が 0 で定義されてた時はデバッグビルド扱いにしないように修正しています。
[6bdb2027f6] Kazuki Yamaguchi 2025-10-31 14:52:23 UTC
拡張ライブラリ json でエンコード時に例外以外の大域脱出(throw-catch など)で抜けるとメモリリークする不具合を修正しています。rb_rescue() で後始末をしていましたが rb_ensure() を使うように修正しています。
[2c88500c08] Max Bernstein 2025-10-31 17:54:02 UTC
ZJIT の型推論やプロファイリングの処理のリファクタリング。 https://github.com/ruby/ruby/pull/15017
[980e18496e] Takashi Kokubun 2025-10-31 18:08:13 UTC
65168b7eafd30fd3958d71761fa155bba00cdec5 と同様に namespace.c のデバッグビルド判定の preprocessor 分岐の条件をもう一箇所修正しています。
[ab01fcc512] Takashi Kokubun 2025-10-31 19:47:55 UTC
ZJIT の Rust 実装で panic 時に低レベル中間表現 LIR のダンプをする処理の表示する行数を減らして、出力先を標準出力から標準エラー出力に変更しています。 https://github.com/ruby/ruby/pull/15019
[7688b05098] Max Bernstein 2025-10-31 19:48:59 UTC
ZJIT で alias で作られたメソッドの呼び出しを最適化対象から外していたのを VM_METHOD_TYPE_ALIAS のメソッドはメソッドの実体まで辿る探索を行なってそれを元に最適化可否を判定するようにしています。 https://github.com/ruby/ruby/pull/15018
[4fc9ad5264] John Hawthorn 2025-10-31 15:51:03 UTC
vm_insnhelper.c の vm_populate_cc() でどちらを通っても結果が同じなので不要だった分岐を削除しています。
[b931199d45] John Hawthorn 2025-10-31 15:08:57 UTC
vm_insnhelper.c の vm_populate_cc() 内でメソッドがみつからなかった時の不要な call cache の複製を抑制するため処理順序を入れ替えています。
[cc8cfbcd85] Stan Lo 2025-10-31 21:09:25 UTC
ZJIT の Rust 実装の変数名を変更するリファクタリング。 https://github.com/ruby/ruby/pull/15021
[8db30094fc] Alan Wu 2025-10-31 22:58:21 UTC
ZJIT の BasicObject#!= の annotation から no_gc, leaf, elidable といった属性を削除しています。実際には BasicObject#!= の実装は "==" メソッドを rb_funcall() で呼び出してからそれを否定するというものだったため、メソッド呼び出し機構で任意の ruby コード実行が行なわれる可能性があるので最適化できなかったためということみたいです。
[17a7b4e031] Sam Westerman 2025-11-01 00:18:01 UTC
Hash#compare_by_identity の rdoc 用コメントの typo 修正。
[8c1900528b] git 2025-11-01 06:50:27 UTC
gems/bundled_gems と NEWS の bundled gems のバージョンリストの rdoc のバージョンを 6.15.1 に更新しています。
[a6bdf52bc9] Jean Boussier 2025-11-01 08:42:24 UTC
6e2e7a335546275edf15a1617663d5a1c03c6188 の続きで拡張ライブラリ json の数値の parse 処理の実装でさらに関数の切り出しをするリファクタリング。
[1942cb219a] Jean Boussier 2025-10-31 07:31:11 UTC
拡張ライブラリ json のテストに Bignum になるような大きな整数の parse のテストを追加しています。
[bca8fce78f] Jean Boussier 2025-11-01 09:54:03 UTC
拡張ライブラリ json の実装で JSON_ParserState の残りの文字列バッファサイズを返す rest() 関数を切り出すリファクタリング。
[5ce27bef01] Nobuyoshi Nakada 2025-11-01 04:47:59 UTC
defs/gmake.mk で make bump_news というターゲットで NEWS.md を doc/NEWS/NEWS-x.y.0.md に移動して NEWS.md を空にする処理を追加して make matz で NEWS の更新も行なうようにしています。
[db57080450] Nobuyoshi Nakada 2025-11-01 10:10:19 UTC
defs/gmake.mk の make matz のターゲットに使いかたのコメントを追加しています。
[babf50e33b] Jean Boussier 2025-11-01 10:06:32 UTC
拡張ライブラリ json の json_parse_digits() に CPU が little endian の時に SWAR という SIMD 命令を利用した実装を使って最適化しています。 SWAR って福岡 Rubyist 会議 04 で Matz が mruby の実装に試したという話をされてましたね。
[33a026fedd] Benoit Daloze 2025-11-01 10:38:16 UTC
Ractor.make_shareable で Proc を変換するテストで self が sharable な場合に成功することもテストするようにしています。
[94287b1e18] Benoit Daloze 2025-11-01 10:41:23 UTC
33a026fedd43fa5472937e77834397742fed6180 の続きで Ractor.make_sharable に Proc オブジェクトを渡して Ractor::Error が発生した時のメッセージまでチェックするようにしています。
[ed7229eac8] Jean Boussier 2025-11-01 11:15:04 UTC
拡張ライブラリ json で babf50e33bb0d9e1f3c37d11c1cfdc50c4f5bc7e に続いて parse 時の空白をスキップする処理にも SWAR という SIMD 命令を利用する実装による最適化を追加しています。
[a97f4c627f] Jean Boussier 2025-11-01 12:05:18 UTC
6e2e7a335546275edf15a1617663d5a1c03c6188 の拡張ライブラリ json のリファクタリングで切り出した関数で条件式の演算子の優先度についてのコンパイラ警告抑制のため明示的なかっこを追加しています。