以下の内容はhttps://ruby-trunk-changes.hatenablog.com/entry/ruby_trunk_changes_20251206より取得しました。


ruby-trunk-changes 2025-12-06

今日は主に non-blocking Fiber 用 Scheduler の新しいフックメソッドの仕様追加や標準添付ライブラリ timeout の Ractor 対応、IO::Buffer#get_value の 128-bits 単位のアクセス対応などがありました。

[b0c9286d98] John Hawthorn 2025-11-03 05:13:37 UTC

T_BIGNUM 型のオブジェクトを Variable Width Allocation に対応して拡張した slot サイズ内により大きな整数も埋め込めるようにしています。

[930afa1c7b] John Hawthorn 2025-11-03 23:48:28 UTC

b0c9286d98929db56514d8009040fe206b3d310f の再修正で T_BIGNUM 型オブジェクトの値をヒープに保持している時の realloc の処理で元のサイズより小さいサイズが指定されたら REALLOC_N() を呼ばないようにしています。

[65dbd571c1] Étienne Barrié 2025-12-05 14:33:44 UTC

拡張ライブラリ psych のキーワード引数 parse_symbols の伝播が途切れてるところがあったので修正しています。

[ec28bd75a8] Koichi Sasada 2025-12-04 16:49:31 UTC

標準添付ライブラリ timeout を複数 Ractor をサポートするために Process.clock_gettime メソッドを Method オブジェクトとして取り出したうえで Ractor shareable にして定数に格納して呼び出すようにしています。昨日の f2cd772329b8d07e29ed114480ff99ad36acbd75 および 4c893e2ff1077b977483da14c0540e9247b87c7e で Method オブジェクトを Ractor shareable にしたのに依存しているので 4.0 以降でのみ機能します。またその他の定数は Timeout::State という内部クラスに格納して Ractor local storage で Ractor ごとに保持するようにしています。Process.clock_gettime は Ractor からそのまま呼ぶのではだめなのかな? 組み込みメソッドだし特に状態を持つわけでもないので呼べそうだけど。

[a523e9d872] Benoit Daloze 2025-12-05 18:14:28 UTC

標準添付ライブラリ timeout の ec28bd75a869c2e525388582370239a9ff8c19e7 の変更で Timeout::State オブジェクトを保持するのにインスタンス変数を使ってたのを定数に変更しています。いいのかな? と思ったけどこれは Ractor をサポートしない時の分岐なので問題なかった。

[dc406af9cb] Benoit Daloze 2025-12-05 18:19:13 UTC

ec28bd75a869c2e525388582370239a9ff8c19e7 の再修正で Ractor.shareable? の typo を修正しています。defined? の中なので常に Ractor サポートしない実装になってて気がつかなかったのですね。

[3e189ddb9d] Benoit Daloze 2025-12-05 18:21:37 UTC

ec28bd75a869c2e525388582370239a9ff8c19e7 からの timeout の修正の続きで Ractor をサポートする実装を使うかどうかの判定を修正しています。

[00b91c727f] Benoit Daloze 2025-12-05 18:25:22 UTC

ec28bd75a869c2e525388582370239a9ff8c19e7 からの標準添付ライブラリ timeout の修正の続きで Process.get_clocktime を Method オブジェクトとして取り出すところをシンプルに書き換えています。

[8c4f79d5f3] Kazuki Yamaguchi 2025-12-05 18:33:12 UTC

拡張ライブラリ openssl の OpenSSL::X509::Certificate#inspect メソッドを C 実装から ruby 実装に移植しています。そして not_before と not_after というプロパティについて inspect ができない場合の例外捕捉を追加しています。

[2b05785941] Keenan Brock 2024-09-26 20:34:39 UTC

rb_thread_call_with_gvl() という C API を既に GVL を取得している状態で呼んでもそのままコールバック関数を呼ぶようにして使いやすくしています。 [ruby-core:119239] [Feature #20750]

[834adc358a] Steven Johnstone 2025-12-05 16:07:33 UTC

prism の実装の pm_encoding_xx() 関数群に引数の n が 0 の時のチェックを追加しています。 潜在的に不正メモリアクセスをする可能性があったようです。 https://github.com/ruby/prism/issue/3784

[be12e19856] Steven Johnstone 2025-12-05 17:44:00 UTC

prism ビットマスクを初期化する初期化子で uint32_t へのキャストをしていたのを 1U とリテラルで unsigned であることを指定したうえで左シフト演算を使うようにしてキャストを不要にしています。

[ee7923288f] Alan Wu 2025-12-03 02:50:06 UTC

ZJIT のレストのうち GC.auto_compact= を使うテストを skip するようにしています。

[3269ae1b0d] Alan Wu 2025-12-03 03:11:20 UTC

vm_exec.h でコンパイラの警告抑制のため関数ポインタに明示的な rb_zjit_func_t へのキャストを追加しています。

[7ecd369a87] Alan Wu 2025-12-03 19:31:48 UTC

ZJIT のテストで ZJIT を有効にして起動する子プロセスの ruby を起動する時に --disable-all オプションを付与するようにしています。

[02ca507aa3] Alan Wu 2025-12-03 20:05:01 UTC

Ruby VM のメインループの実装方法のうち単純な巨大な switch 文による実装の時に不要な RUBY_ASSERT_ALWAYS() を呼ばないように分岐を追加しています。

[f01fd2bde2] Alan Wu 2025-12-03 20:41:21 UTC

YJIT 用の C binding を再生成しています。

[8132b3d1d8] Alan Wu 2025-12-04 02:15:04 UTC

ZJIT が無効で YJIT のみ有効な時に YJIT の統計情報の集計や出力に ZJIT の項目が含まれてしまっていた不具合を修正しています。

[109ddd291e] Alan Wu 2025-12-03 21:03:23 UTC

ZJIT で構造体 rb_iseq_constant_body の定義を Rust 実装に取り込んでいたのをやめて、param メンバーの先頭からの offset のみ得るようにして構造体定義への依存を減らしています。ビルド時の設定によって構造体の内容が変化するため。

[fb72ff7be0] Alan Wu 2025-12-03 21:14:40 UTC

GitHub Actions のいろんなコンパイラオプションを試す workflow で古い clang を使う時は configure 時に --disable-zjit を指定して ZJIT 無効化してビルドするようにしています。

[2bc9b5a854] Alan Wu 2025-12-03 21:55:26 UTC

依存関係の再生成を行うツール tool/update-deps に ZJIT の Rust コードからコンパイルしたオブジェクトファイルを除外対象に追加しています。

[8296524fd6] Alan Wu 2025-12-03 22:16:27 UTC

zjit/zjit.mk で ZJIT 向けのライブラリをビルドするルールを追加するかどうかの分岐を書き換えています。 $ZJIT_LIBS のファイルに対して strip コマンドで symbol 情報を除去しているみたいだけど、なんだろうこれ? ターゲットの再定義の警告を抑制するためみたいですが条件の内容がよくわからないというか副作用のあるコマンドを実行しているみたいにみえるのでちょっと謎です。

[addeafdd5b] Alan Wu 2025-12-03 22:20:44 UTC

8296524fd6cf2fb9ae1eca4be722fe9ee2c26f37 と同様に yjit/yjit.mk でも ZJIT 用のライブラリのターゲットを追加するかの分岐を変更しています。

[dce716e25b] Alan Wu 2025-12-04 01:26:51 UTC

depend ファイルを再生成して zjit.o への依存関係を更新しています。

[9a2710013c] Alan Wu 2025-12-04 02:16:23 UTC

YJIT/ZJIT 共通の Rust 実装で警告抑制のための crate attribute を追加しています。

[ffe99a56de] Alan Wu 2025-12-02 03:57:04 UTC

configure で YJIT/ZJIT の有効化時の依存する cargo のチェック強化や YJIT/ZJIT 両方を有効にする時の適切なチェックが行なわれるように修正したりしています。

[f559a9106c] Alan Wu 2025-12-03 21:55:55 UTC

さらに configure で ZJIT を有効にした時は GNU make が必須なのでそのチェックを追加しています。

[d396a66a82] Alan Wu 2025-12-05 03:43:28 UTC

configure で --enable-zjit を指定しなくても ZJIT を有効化できるようにビルドするのをデフォルトの挙動にしています。

[c4c909b538] Stan Lo 2025-12-05 22:00:24 UTC

ZJIT の中間表現 HIR のダンプ時に GetLocal/SetLocal 命令の表示に変数名を含めるようにしています。 https://github.com/ruby/ruby/pull/15423

[65995c22f8] Benoit Daloze 2025-12-05 22:08:48 UTC

標準添付ライブラリ timeout の Ractor.shareable 関連のテストで Intel 上の macOS (x86_64-darwin) で失敗しているのでテストメソッド定義をスキップするように分岐の条件に RUBY_PLATFORM での判定を追加しています。

[791acc5697] Peter Zhu 2025-12-05 22:08:20 UTC

228d13f6ed914d1e7f6bd2416e3f5be8283be865 の新規オブジェクトの初期化時に Object Shapes の shape_id を渡して GC が走る可能性がある処理の前に Object Shapes のセットアップをしておく変更を revert しています。shape.h への依存関係ができたので ModGC で拡張ライブラリとしてビルドできなくなってしまうため。

[8f9838476d] Peter Zhu 2025-12-05 22:58:11 UTC

Struct のインスタンス(T_STRUCT 型オブジェクト)で fields_obj が未初期化になる可能性があったのを修正しています。

[a7dc53b91c] Samuel Williams 2025-12-06 02:55:32 UTC

bignum.c の rb_ull2big() や rb_ll2big()、rb_uint128t2big() といった 128-bits の整数(LONG_LONG)を変換する関数を IO::Buffer から利用できるように static 修飾子を外して、IO::Buffer#get_value の変数タイプ指定に :u128、:U128、:s128、:S128 などのサポートを追加しています。 https://github.com/ruby/ruby/pull/15399

[734dab5ec8] BurdetteLamar 2025-12-05 16:21:55 UTC

拡張ライブラリ stringio の rdoc 用コメントのリンクの修正。

[bbef73b2ff] BurdetteLamar 2025-11-22 21:23:25 UTC

String#[] などについてのドキュメントでマルチバイト文字(キリル文字かな?)の結果がぱっと見で非ASCII文字でないことがわからない例だったので見た目でわかりやすい例に変更しています。

[da2c67388a] BurdetteLamar 2025-11-21 18:22:34 UTC

String#swapcaes のドキュメントの手直し。

[e5e4175dbd] BurdetteLamar 2025-11-21 18:01:35 UTC

String#upcase のドキュメントの手直し。

[2491a504ff] BurdetteLamar 2025-11-21 17:16:37 UTC

String#downcase のドキュメントの手直し。

[bd64cf00a2] BurdetteLamar 2025-11-21 14:23:04 UTC

String#capitalize の rdoc 用コメントを doc/string/capitalize.rdoc という独立したファイルに分離して :include: で取り込むようにしています。

[21f9a647fb] Burdette Lamar 2025-12-04 21:57:46 UTC

拡張ライブラリ stringio の StringIO クラスのドキュメントを大幅に追記しています。 https://github.com/ruby/stringio/pull/178

[d490247df2] Nobuyoshi Nakada 2025-12-05 08:30:14 UTC

doc/language/globals.md に footnotes を追加して特殊変数に対応するコマンドラインオプションについてのリンクを追加しています。

[7259c18c3a] Takashi Kokubun 2025-12-06 07:00:13 UTC

NEWS の ZJIT のセクションを YJIT の前に移動して少し説明を修正しています。もう JIT なしよりは多くのベンチマークで速くなってきたとのこと。 https://github.com/ruby/ruby/pull/15426

[180020e1e5] Samuel Williams 2025-12-06 07:35:08 UTC

non-blocking Fiber のための Scheduler の IO#pwrite の対応が不完全だった? のを修正しています。 https://github.com/ruby/ruby/pull/15428

[42f5654b69] Samuel Williams 2025-12-06 08:44:14 UTC

rb_fiber_scheduler_yield() という C API を追加して non-blocking Fiber のための Scheduler のインターフェースに yield を追加して割り込みの検出処理(CHECK_INT()) 時にこれを呼ぶか 0 秒の sleep を行なって Scheduler が Fiber を resume できるようにしています。 Thread.handle_interrupt で割り込みが抑制されてた時にシグナルが検出されなくて non-blocking Fiber がブロックしてしまう不具合を修正しているようです。 https://github.com/ruby/ruby/pull/14700

[aae8592650] Benoit Daloze 2025-12-06 10:09:27 UTC

標準添付ライブラリ timeout に Timeout.constants の結果をチェックする assertion を追加しています。状態の保持の実装を変更したからだと思うけどこれをテストにする必要あるかなぁ。

[f4f5f0a009] Nobuyoshi Nakada 2025-12-06 10:32:14 UTC

File.path メソッドの tet-all のテストと rubyspec のテストに非ASCII-compatible なエンコーディングの文字列や NUL 文字を含む文字列などを渡した時のテストを追加しています。

[0346206d3e] Steven Johnstone 2025-12-06 00:37:53 UTC

prism のバッファの境界を越えた参照の不具合修正。 https://github.com/ruby/prism/issues/3790




以上の内容はhttps://ruby-trunk-changes.hatenablog.com/entry/ruby_trunk_changes_20251206より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14