今日は主に Ractor sharable のチェックを厳密に行うようにする変更や ZJIT の最適化などがありました。
[6047eada20] Earlopain 2025-10-17 14:19:56 UTC
prism の主にテストの修正で ruby の各 minor バージョンに対応した文法のテストを実施するようにしているようです。
[839b1fa54f] Aiden Fox Ivey 2025-10-22 16:07:26 UTC
ZJIT で String#<< メソッドに専用の中間表現 HIR の命令 StringAppend を追加して rb_str_buf_append() の呼び出しを直接行うように最適化しています。 https://github.com/ruby/ruby/pull/14861
[619110b1db] Alan Wu 2025-10-21 22:45:43 UTC
ZJIT の arm64 での実行コード生成の最適化をしているようです。
[4c60fc48b1] Earlopain 2025-10-22 16:57:33 UTC
prism のテストに ruby 3.3 の文法向けのテストが失敗するので除外する? 対応を追加しています。
[87fdd6d53b] Max Bernstein 2025-10-22 17:56:02 UTC
ZJIT 向けの bisect ツール tool/zjit_bisect.rb にテスト実行に make test-all などの make で実行するコマンドに対応するようにしています。 https://github.com/ruby/ruby/pull/14584
[f09e74ce2b] Takashi Kokubun 2025-10-22 18:14:39 UTC
ZJIT の Rust 実装のリファクタリング。 https://github.com/ruby/ruby/pull/14897
[ceed406958] Max Bernstein 2025-10-22 18:19:08 UTC
ZJIT でブロックやキーワード引数を受け取らないメソッドで、固定の値を返すだけのようなシンプルなメソッドの場合にメソッド呼び出し処理を行なわずインライン化する最適化を実装しています。うーむそこまでやるのか。 https://github.com/ruby/ruby/pull/14888
[6fdcd08eb5] Max Bernstein 2025-10-22 18:22:53 UTC
ZJIT の Rust 実装のテストの修正。
[18e8e446ac] Aiden Fox Ivey 2025-10-22 18:53:12 UTC
9a75c05b5ab7eaee9e3db14b5651034bb414aa5e で ZJIT の --zjit-trace-exits オプションのトレース情報でサンプリング数が 0 のものを表示しない変更を revert しています。 https://github.com/ruby/ruby/pull/14905
[d792de29bc] Max Bernstein 2025-10-21 00:46:01 UTC
ZJIT の型推論の不具合? 修正。
[9ad902e55c] Max Bernstein 2025-10-20 15:45:59 UTC
ZJIT で String#== と String#=== メソッドを直接 C 関数を呼び出すようにインライン化する最適化を追加しています。
[fa3a6f5cde] Benoit Daloze 2025-10-22 20:38:03 UTC
doc/zjit.md に --zjit-debug オプションの紹介を追記しています。
[3861918fd3] Aiden Fox Ivey 2025-10-22 21:16:52 UTC
ZJIT の side-exit のプロファイル情報を出力するオプション --zjit-trace-exits に side-exit の種類を指定する引数に不正な文字列が渡された時の対応を追加しています。 https://github.com/ruby/ruby/pull/14911
[fee863b4df] Alan Wu 2025-10-22 20:48:27 UTC
YJIT の Rust 実装でプロファイル情報? をダンプするのに一時ファイルに書き出しする時にバッファリングつきの IO を使うようにしています。
[71e3ef3d9c] Alan Wu 2025-10-22 20:48:43 UTC
ZJIT でもプロファイラの情報の一時ファイルへの書き出しにバッファリングされるストリームを使うようにしています。
[f9338a95af] BurdetteLamar 2025-10-22 20:32:03 UTC
String#squeeze の rdoc 用コメントを doc/string/squeeze.rdoc という独立したファイルに切り出しています。
[d4ea1686b5] BurdetteLamar 2025-10-22 19:12:49 UTC
String#split の rdoc 用コメントの手直し。
[a763e6dd48] Max Bernstein 2025-10-22 22:40:52 UTC
ZJIT の統計情報の not_annotated_cfuncs_xxx というカウンタを表示しないようにしています。 https://github.com/ruby/ruby/pull/14915
[ae767b6ca8] Max Bernstein 2025-10-22 23:26:37 UTC
ZJIT で Kernel#block_given? メソッドを直接機械語で実装するように最適化しています。 https://github.com/ruby/ruby/pull/14914
[dfcb79ca63] Alan Wu 2025-10-22 23:35:24 UTC
ZJIT の Rust 実装の警告除去のため不要な C binding の宣言(?)を消しています。
[da4bd3b3df] Peter Zhu 2025-10-22 00:27:36 UTC
環境変数 RUBYOPT に不正な値が指定されててエラー終了する時にメモリ解放されていない領域があったのを修正しています。まあ実際にはほぼ実害はないでしょうね。
[fa5481bc06] Max Bernstein 2025-10-22 23:08:05 UTC
YJIT 向けに定義していた rb_yjit_iseq_builtin_attr() という関数を rb_jit_iseq_builtin_attrs() に改名して jit.c に移動し YJIT と ZJIT で共有するようにしています。またこれを使って ZJIT から InvokeBuiltin という HIR の命令を処理する時に対象のメソッドが leaf かどうか判定して不要な control frame の push を抑制できるようにしています。 https://github.com/Shopify/ruby/issues/670
[c3404d736f] Max Bernstein 2025-10-22 23:13:57 UTC
fa5481bc063fb54bd2735c6253224349419399e7 の続きで ZJIT の HIR の InvokeBuiltin 命令のコード生成時に leaf フラグを利用するようにしています。
[36e7db00c9] niku 2025-10-22 14:45:20 UTC
拡張ライブラリ socket の TCPSocket.new の rdoc 用コメントの call-seq にキーワード引数 open_timeout の記述を追記しています。
[8b014b1bbf] Hiroshi SHIBATA 2025-10-22 22:54:45 UTC
bundler と rubygems に vendoring されている uri のバージョンを 1.0.4 に更新しています。
[4368e6c42e] Hiroshi SHIBATA 2025-10-22 23:22:43 UTC
rubygems のテストを 8b014b1bbf6464c0edfb5af97b08c69b6ebff9b4 の変更に追随させています。
[f762e50bcb] Burdette Lamar 2025-10-23 00:51:40 UTC
拡張ライブラリ stringio の StringIO.open の rdoc 用コメントの手直し。 https://github.com/ruby/stringio/pull/146
[da214cf3a9] Burdette Lamar 2025-10-23 00:59:47 UTC
拡張ライブラリ stringio の StringIO#binmode の rdoc 用コメントのリンクの修正。 https://github.com/ruby/ruby/pull/147
[271be0a225] Daniel Colson 2025-10-23 03:01:26 UTC
ZJIT でクラス変数のアクセスの JIT 対応を追加しています。 https://github.com/ruby/ruby/pull/14918
[45907b1b00] Koichi Sasada 2025-09-23 17:34:45 UTC
include/ruby/ractor.h に RB_OBJ_SET_FROZEN_SHAREABLE() という inline 関数を追加してあるオブジェクトを freeze するのと Ractor sharable にするのを同時にセットできるようにしています。またデバッグのために STRICT_VERIFY_SHAREABLE というマクロを定義してビルドするとこの関数が呼ばれた時にそのオブジェクトから参照されるオブジェクトが全て Ractor sharable か検証するチェックが走るようにしています。
[bc00c4468e] Koichi Sasada 2025-09-24 20:50:05 UTC
45907b1b00d09ce2c40f5073ff540d8b63217d96 で追加した RB_OBJ_SET_SHAREABLE() をいろんなところで呼ぶようにしています。従来 sharable を設定していないところにもたくさん追加しているのでより厳密に Ractor sharable の検証をする方針になったみたいです。
[024bbf5401] Koichi Sasada 2025-10-21 18:52:40 UTC
bc00c4468e0054ca896d2b83d3020180915f64cf の対応の続きで NameError の Ractor 間の共有についてのテストを変更しています。
[a177799807] Koichi Sasada 2025-10-21 19:47:18 UTC
45907b1b00d09ce2c40f5073ff540d8b63217d96 と bc00c4468e0054ca896d2b83d3020180915f64cf の変更の追随で GC の実装インタフェースに rb_gc_impl_checking_shareable() という関数を追加して rb_gc_obj_shareable_p() を gc.c に引き上げて default 実装と mmtk 実装で共有するようにしています。mmtk では使ってないですが。
[3b190855ba] Koichi Sasada 2025-10-21 20:10:15 UTC
iseq.c の rb_iseq_mark_and_move() で ISeq が参照するオブジェクトが Ractor Sharable かチェックする場合に YJIT/ZJIT のコンパイル中の情報はチェック対象から除外するようにしています。たぶん本来はチェックしないといけないのですが現時点で対応できているかわからないので一時的に除外しておくという感じだと思います。