ruby-trunk-changes 2026-07-15

今日は主に Proc#refined メソッドの新規追加により Proc に Refinements を効かせる機能の追加や、文字列オブジェクトの NUL 文字終端に依存しないようにする修正などがありました。

[c6e3e8c594] Max Bernstein 2026-07-14 13:05:56 UTC

ZJIT で inline 化の最適化をするにあたってどのくらいの HIR 命令を使うかをインライン化の可否判定でチェックしていたみたいですが、この数を過大に評価して最適化しそこなっていたので型推論の適用後に残っている命令の数でチェックするように修正しています。 https://github.com/ruby/ruby/pull/17765

[8bcc8101be] Shugo Maeda 2026-07-14 13:52:32 UTC

GC.compact によるオブジェクトの移動時の RGenGC 用の write barrier の不足を修正しています。

[307a771532] Max Bernstein 2026-07-14 17:01:59 UTC

ZJIT の defined?(yield) によるブロック有無の判定はインライン展開時に定数化するようにしています。 https://github.com/ruby/ruby/pull/17861

[1d363d6f41] Max Bernstein 2026-07-14 17:02:19 UTC

tool/zjit_analyze_perf_map_size.rb という --zjit-perf によるプロファイル情報の出力を解析するツールを追加しています。 https://github.com/ruby/ruby/pull/17734

[7facc9f2a1] Kevin Newton 2026-07-14 15:59:03 UTC

prism で利用している PRISM_ASSUME() マクロのための attribute のサポート条件が間違っていたので preprocessor 分岐を修正しています。

[be2a2eea8d] Koichi Sasada 2026-07-14 19:23:56 UTC

vm_insnhelper.c の VM_ASSERT() によるチェックの内容が不完全だったためデバッグビルド時に異常終了していたのを修正しています。

[39564b8957] Koichi Sasada 2026-07-14 19:02:53 UTC

missing/dtoa.c の代替実装で複数 Ractor サポートのため RUBY_ATOMIC_PTR_LOAD() マクロを利用するようにしています。

[243e640982] Jean Boussier 2026-07-14 19:18:41 UTC

T_OBJECT のインスタンス変数が heap に確保されている状態から再度 slot 内への埋め込みに変更する処理を rb_gc_obj_changed_slot_size() から gc_ref_update_object() に移動しています。テストをみてもよくわからなかったですがどういう場合に再埋め込みが可能な条件が成立するんだろう。

[71ee81f7d9] Jean Boussier 2026-07-14 12:49:55 UTC

T_OBJECT 型オブジェクトも too complex の時のインスタンス変数を T_IMEMO 型オブジェクトの fields_obj 経由で持つようになったので、構造体 struct rb_fields 内の共用体で st_table へのポインタを持っていたのを直接 st_table を埋め込むようにしています。 e0083cffa31ae58f6326fb7a62199f4e59d86e87 の変更の続きですね。

[6f0548a0bd] Jean Boussier 2026-07-14 15:54:47 UTC

Object Shapes の rb_obj_copy_ivar() および rb_copy_generic_ivar() の処理を統合するリファクタリング。

[6c23075086] Jean Boussier 2026-07-14 16:04:03 UTC

variable.c の飛び元が 1箇所になって不要になった goto 文を削除しています。

[24337e3cbe] Jean Boussier 2026-07-14 17:38:15 UTC

Object Shapes のインスタンス変数のコピー処理のリファクタリング。

[944d936d7c] Jean Boussier 2026-07-14 18:18:54 UTC

Object Shapes の too complex への遷移処理をまとめるリファクタリング。

[4bd94ccbbd] Jean Boussier 2026-07-14 20:35:47 UTC

shape.c の static 変数の id_object_id を削除してかわりに構造体 rb_shape_tree_t にメンバー id_object_id を追加し、too complex なオブジェクトのインスタンス変数のイテレート時に object_id 用の ID のみ除外するように修正しています。

[9a3be8a74c] Takashi Kokubun 2026-07-14 21:43:34 UTC

ZJIT の Rust 実装内での Object Shapes の T_DATA 型オブジェクトのレイアウトのための enum 定数の名称を変更しています。

[09e19a51ee] Takashi Kokubun 2026-07-14 21:50:14 UTC

ZJIT で T_OBJECT 型オブジェクトのインスタンス変数設定の最適化。

[8f0c0b3d00] Max Bernstein 2026-07-14 22:35:58 UTC

ZJIT の軽量 JITFrame の対応のため vm_args.c の RUBY_ASSERT() によるチェックを修正しています。 https://github.com/ruby/ruby/pull/17875

[a42d327517] Takashi Kokubun 2026-07-15 00:33:47 UTC

ZJIT の HIR で割り込みチェックの CheckInterrupts 命令を挿入しているジャンプ命令で、ジャンプ先が後のアドレスの場合はループを形成しないので割り込みチェックは省略するように最適化しています。 https://github.com/ruby/ruby/pull/17878

[6d6e9a93b1] Hiroshi SHIBATA 2026-07-14 05:35:51 UTC

vm_opts.h から不要になっていたマクロ OPT_GLOBAL_METHOD_CACHE と OPT_UNIFY_ALL_COMBINATION の定義を削除しています。

[ff0f4d4df3] Hiroshi SHIBATA 2026-07-14 05:33:34 UTC

GitHub Actions の macOS 版 workflow の matrix から --with-gmp をつけて configure するビルドが冗長だったので削除しています。

[ad57e69d90] Hiroshi SHIBATA 2026-07-14 05:45:19 UTC

GitHub Actions の macOS 版で YJIT を有効にする workflow で Rust 実装のテスト実行のための cargo 実行を独立したジョブから既存ジョブのステップに組込むようにしています。

[e7142e1c45] Hiroshi SHIBATA 2026-07-14 23:14:11 UTC

GitHub Actions の tarball パッケージでのテストを行う workflow の macOS 版のランナー節約のために不要なステップを削除しています。

[b1f50425cc] Hiroshi SHIBATA 2026-07-03 06:13:12 UTC

bundler の時間のかかっていたテストを2つのファイルに分割して並列化できるようにしています。

[9ed115039b] Hiroshi SHIBATA 2026-07-03 08:16:19 UTC

bundler のテストの並列化のためのファイルのグループ化に新規追加されたテストファイルを追記しています。

[03b091b890] Hiroshi SHIBATA 2026-07-03 08:43:45 UTC

bundler の時間のかかるテストを効率的な並列化のためにさらに分割しています。

[4659696b19] Hiroshi SHIBATA 2026-07-14 23:51:14 UTC

BSD/OS のサポートを終了し configure および process.c から対応のためのコードを削除しています。

[849d9d6e97] Koichi Sasada 2026-07-14 20:33:11 UTC

vm_callinfo.h の VM_ASSERT() によるチェックが複数 Ractor 利用時に成り立たない可能性があるものだったので複数 Ractor 利用時の条件を assertion に追加しています。

[6a952923e3] "dependabot[bot]" 2026-07-15 02:08:40 UTC

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

[57b8f1857f] Hiroshi SHIBATA 2026-07-14 08:27:53 UTC

rubygems の spec 名に "../" などが含まれると不正なパスを使ってしまう可能性があったのでチェックを追加しています。

[878d20ef1b] Nobuyoshi Nakada 2026-07-14 13:01:49 UTC

Dir のファイルパス操作および Process.spawn などのコマンド引数や環境変数などの文字列処理で終端の NUL 文字の存在に依存しないようにしています。

[21b7c7257f] Nobuyoshi Nakada 2026-07-14 18:34:40 UTC

compile.c や iseq.c の内部的な文字列処理で終端の NUL 文字の存在に依存しないようにしています。

[4cc24ebb69] Nobuyoshi Nakada 2026-07-14 18:48:05 UTC

compile.c の opobj_inspect() という関数で rb_str_resurrect() および rb_ary_resurrect() という関数を利用して inspect で表示可能にしています。

[37d2bb3c8c] Nobuyoshi Nakada 2026-07-14 18:53:16 UTC

NameError 例外の #to_str メソッドの実装でも文字列の NUL 文字終端に依存しないようにしています。

[b9a50a0b81] Nobuyoshi Nakada 2026-07-14 18:53:22 UTC

拡張ライブラリ socket でも文字列処理で文字列オブジェクトの NUL 文字終端に依存しないようにしています。

[4b638eecd1] Nobuyoshi Nakada 2026-07-15 00:06:11 UTC

memrchr(3) 関数の代替実装を string.c から missing/memrchr.c に切り出して他からも使えるようにしています。今進めている文字列オブジェクトのバッファの NUL 文字終端依存をなくす変更で使うためですかね。

[c2883ddf97] Nobuyoshi Nakada 2026-07-15 00:06:25 UTC

load.c でも文字列オブジェクトの NUL 文字終端に依存しないように書き直しています。

[c67dc0dce7] Nobuyoshi Nakada 2026-07-15 00:40:07 UTC

prism_compile.c で rb_syserr_new() にわざわざ文字列オブジェクトからバッファを取り出して渡していたのを直接文字列オブジェクトを渡す rb_syserr_new_str() を利用するようにリファクタリング。

[b9ad19da12] Nobuyoshi Nakada 2026-07-15 01:46:11 UTC

vm_backtrace.c でファイル名などを埋め込む時にフォーマット文字列で C の文字列(%s) ではなく PRIsVALUE を使って文字列オブジェクトをそのまま埋め込むようにしています。

[529d86a2c3] Nobuyoshi Nakada 2026-07-15 01:46:35 UTC

Struct#initialize の実装で例外発生時のメッセージに埋め込む文字列を C の文字列を取り出さずに直接 PRIsVALUE で文字列オブジェクトを埋め込むようにしています。

[043f949813] Nobuyoshi Nakada 2026-07-15 01:47:15 UTC

vm_backtrace.c の oldbt_print() および oldbt_bugreport() のフォーマット文字列の %s を %.*s + RSTRING_LENINT() に変更し、長さ付きで出力するようにした。これも NUL 終端依存をやめる変更の一部ですかね?

[ec002ff361] Nobuyoshi Nakada 2026-07-15 01:48:43 UTC

043f949813b888d76e5c0c3097e56dc5db152f52 と同様に vm_dump.c の文字列埋め込みに長さ指定をつけるようにしています。

[92c6f4331b] Nobuyoshi Nakada 2026-07-15 01:51:13 UTC

043f949813b888d76e5c0c3097e56dc5db152f52 と同様にあちこちで文字列埋め込みに長さ指定をつけるようにしています。

[f636ac3825] Hiroshi SHIBATA 2026-07-15 04:41:30 UTC

Array#[] や Hash#[]、stringio などの rdoc 用コメントの主にサンプルコードの不具合を修正。

[6f8d0dd256] Hiroshi SHIBATA 2026-07-15 04:41:36 UTC

Set#include? や Set#each の rdoc 用コメントのサンプルコードの typo や不具合を修正しています。

[cce7041630] Shugo Maeda 2026-07-15 04:10:35 UTC

Proc#refined というメソッドを新規追加して、Refinements で Module を using した状態の Proc オブジェクトの複製を作ることができるようにしています。 [ruby-core:125650] [Feature #22097]

[e34c45efbb] Hiroshi SHIBATA 2026-07-15 02:12:37 UTC

rubygems の Windows 環境での改行コードの変換による不具合の修正。

[b1c35b998f] Hiroshi SHIBATA 2026-07-15 04:37:35 UTC

rubygems の Gem::YAMLSerializer の改行コードの CR がうまく扱えないことがあった不具合を修正しています。

[365865067d] Jean Boussier 2026-07-15 07:28:29 UTC

rb_obj_using_gen_fields_table_p() という inline 関数を shape.h から gc.c に移動しています。 gc.c でしか使っていなかった模様。

[a885c897f3] Hiroshi SHIBATA 2026-07-15 06:36:18 UTC

bundled gems のテストで net-imap のテストが古い simplecov の API を使っていた NoMethodError になっていたので、SIMPLECOV_DISABLE を設定して無効化し、テスト用 gem のインストールから simplecov を除外しています。

[5e00f17ae7] Hiroshi SHIBATA 2026-07-15 06:36:33 UTC

gems/bundled_gems の net-imap のテストに使う commit hash の指定が a885c897f3258a708021a714f585ae9c213a356c で不要になったようなので削除しています。

[4b6f5f299e] Nobuyoshi Nakada 2026-07-15 08:32:24 UTC

拡張ライブラリ date で文字列オブジェクトの NUL 文字終端に依存していたのを解消しています。

[902e86c1f5] Nobuyoshi Nakada 2026-07-15 10:59:32 UTC

cce7041630642c56dd4e32eb669d9fd8bffa4040 の Proc#refined 追加時の rubyspec に追加したテストで古い matcher を利用していたので修正しています。 [ruby-core:125650] [Feature #22097]

[38c714f577] Jean Boussier 2026-07-15 10:27:21 UTC

71ee81f7d99200041e8b0812028fbefd540aa48a の T_OBJECT 型オブジェクトの too complex なインスタンス変数保持の方法変更に関連する変更時の不具合修正。メモリの解放漏れと誤ったアドレスで free を呼んでしまう可能性があった不具合の修正。

[ead9055ac4] Nobuyoshi Nakada 2026-07-15 11:27:45 UTC

NEWS の String#unpack についての記述が Array#pack と同居していたので String クラスの変更として分離しています。

[06d4c1d1a5] Shugo Maeda 2026-07-15 12:12:27 UTC

NEWS に Proc#refined メソッドの新規追加について追記しています。