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


ruby-trunk-changes 2025-06-13

今日は主に Object Shapes でクラスのインスタンス変数アクセスの高速化や、正規表現マッチや子 Thread 内での require 処理などの複数 Ractor での不具合修正などがありました。

[a74c385208] Jean Boussier 2025-06-12 08:06:03 UTC

昨日の 3abdd4241fd5231a5711ce1b087d660c667ef30d で予告されていたクラスのインスタンス変数のアクセス時に VM 全体のロックをやめています。 T_IMEMO 型のオブジェクトに wrap した rb_shape_t::fields_obj をまるっと入れ替えるようにしたので RUBY_ATOMIC_VALUE_SET() による書き換えが可能になったとのこと。なるほどなぁ。

[d55c463d56] Peter Zhu 2025-06-11 17:59:38 UTC

Ractor#send で終了済みの Ractor にオブジェクトを送信しようとしてエラー発生時に内部的メモリリークがあったのを修正しています。

[0292b702c4] Jean Boussier 2025-06-12 11:55:05 UTC

shape.h の RSHAPE() は rb_shape_lookup() のエイリアスとしてマクロ定義されていたのを inline 関数として同じ内容を定義しています。逆に rb_shape_lookup() のほうが RSHAPE() を呼ぶだけの関数になっています。

[e070d93573] Jean Boussier 2025-06-12 12:03:57 UTC

YJIT 関連だけで残ってた rb_shape_lookup() の呼び出し元を使わないようにして rb_shape_lookup() の定義を削除しています。

[de4b910381] Jean Boussier 2025-06-12 13:15:20 UTC

GET_SHAPE_TREE() というマクロも削除してグローバル変数 rb_shape_tree を直接触るようにしています。

[7c22330cd2] Jean Boussier 2025-06-12 13:18:22 UTC

Object Shapes のグローバル変数 rb_shape_tree を rb_shape_tree_t のポインタとして定義して初期化関数で xmalloc() でメモリ確保していたのを構造体そのものを変数として定義して初期化子で初期化しておくようにしています。

[5ec9a392cd] Ufuk Kayserilioglu 2025-06-12 15:33:10 UTC

prism 利用時に配列に * をつけて展開して渡す記法が異常終了するケースがあった不具合を修正しています。 https://github.com/ruby/ruby/pull/13597 [ruby-core:122519] [Bug #21439]

[6e36841dbd] Peter Zhu 2025-06-11 20:21:11 UTC

Kernel#fork などで子プロセスを起動する時に rb_native_thread の解放処理はあきらめていたのをせめてメモリ領域だけは free() しておくようにしています。 pthread_cond_destroy() がハングしてしまう可能性があったので呼べないので解放してなかったけどメモリだけは解放しておくということみたいです。

[97994c77fb] Luke Gruber 2025-06-12 15:10:29 UTC

正規表現Regexp#match の最適化のための? reg_cache というグローバル変数のオブジェクトが複数 Ractor から使われると競合するので main Ractor の時のみ利用するようにしています。

[a34fcf401b] John Hawthorn 2025-06-05 20:48:34 UTC

割り込み処理を管理する構造体 struct rb_interrupt_exec_task の flags にセットするビットフラグの定数に rb_interrupt_exec_flag_new_thread というのを追加して割り込み処理のために新たな Thread を立てる場合の処理をその他の割り込みの処理と一元化して threadptr_interrupt_exec_exec() という関数内で Thread 起動する分岐をするようにしています。コミットログによると実装の共有化の他に GC の mark 漏れの修正? もあるようです。

[b28f344312] John Hawthorn 2025-06-05 20:27:33 UTC

複数 Ractor 利用時に子 Ractor の Thread 内で require を実行してその完了を待たずに Ractor の main Thread が終了すると処理待ちの Thread がそのまま回収されてしまい、解放済みのメモリ参照で異常終了する場合があった不具合を修正しています。Thread のマシンスタック上に置いていた require 要求の情報を T_DATA 型のオブジェクトとして作ることで GC の対象になるようにしています。 [ruby-core:120795] [Bug #21090]

[ef9301a6b7] John Hawthorn 2025-06-11 20:35:28 UTC

b28f3443122c4e5461877d704618c752e56ca8b0 の続きで子 Ractor からの require の処理で管理する構造体の feature 名を保持するメンバーで fstring を作るようにしています。

[7fa3e1a1db] Takashi Kokubun 2025-06-13 00:18:50 UTC

ZJIT の変更。詳細はわかりませんが JIT で生成したコードから JIT で生成されたメソッドのコードを呼び出す時の対応についての変更? みたいです。 https://github.com/ruby/ruby/pull/13579

[7cfdcde069] Nobuyoshi Nakada 2025-06-11 13:56:24 UTC

ruby_atomic.h の rbimpl_atomic_u64_load_relaxed() や rbimpl_atomic_u64_set_relaxed() の引数の型として RBIMPL_ALIGNAS(8) というマクロでアライメントの指定もつけた 64 bits unsigned な整数を定義するようにしています。

[73532ecf3a] Samuel Giddins 2025-05-29 19:40:40 UTC

rubygems のテスト用の証明書の削除や更新。

[22a7f6b6c2] Cody Cutrer 2025-03-13 15:21:12 UTC

bundler の --help オプションで man ページの参照をする場合の分岐で JRuby 向けの対応を追加しています。

[64c421db20] Hiroshi SHIBATA 2025-06-13 01:57:04 UTC

bundler のテストで cgi への依存を cgi/util と cgi/escape に分割しています。

[2e7e78cd59] Nobuyoshi Nakada 2025-06-13 05:15:14 UTC

Struct や Data クラスを継承したクラスのインスタンスで Struct/Data の要素のアクセス時に結果をインスタンス変数にセットすることで次回以降キャッシュするという挙動をするのですが、継承したクラスが freeze されているとこれが FrozenError になるのでその時はセットしないようにしています。 [ruby-core:122523] [Bug #21440]

[dd4c5acc0f] Jean Boussier 2025-06-13 07:11:28 UTC

vm_callinfo.h の VM_CALLCACHE_UNMARKABLE および VM_CALLCACHE_ON_STACK というビットフラグ定数の定義を IMEMO_FL_USER4 や IMEMO_FL_USER5 という予約された定数を使って定義するようにしています。歴史的経緯で? struct RBasic::flags 用の定数を使ってしまっていたようです。値も違ってたっぽいですね。

[071aa02a4a] Jean Boussier 2025-06-13 09:26:24 UTC

shape.c で未使用になった Symbol の ID の変数を削除しています。

[c7f5ae981a] Nobuyoshi Nakada 2025-06-11 14:29:41 UTC

File::Stat#dev や #rdev でシステムコール statx(2) 利用時には makedev() の戻り値が異なるので整数の変換マクロを ULL2NUM() を利用するように修正しています。

[b8de3cfb04] Nobuyoshi Nakada 2025-06-11 14:33:14 UTC

Time オブジェクトの mark 処理や GC.compact 時の処理で WIDEVALUE から VALUE への変換が必要なところを修正しています。

[583ce06c0e] Nobuyoshi Nakada 2025-06-13 09:25:14 UTC

Time の実装で秒以下の単位が高精度の環境で wideint_t という型を利用するようにしています。




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

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