今日は主に複数 Ractor でのパフォーマンス改善のための変更や ZJIT の不具合修正、Object Shapes の不具合修正などがありました。
[e2bd36388f] Burdette Lamar 2025-07-31 13:13:01 UTC
Strgin#encode のドキュメントに関連リンクを追記しています。
[ff6a8e95b7] BurdetteLamar 2025-07-30 17:38:04 UTC
String#end_with? のドキュメントのサンプルを変更したりリンクを追加したり。
[6d466a55bd] BurdetteLamar 2025-07-30 18:00:33 UTC
String#eql? の rdoc 用コメントを doc/string/eql_p.rdoc に分離して :include: タグで取り込むようにしています。
[d7bc1378d2] BurdetteLamar 2025-07-30 18:13:43 UTC
String#force_encoding のドキュメントの手直し。
[6f7a4f9c96] BurdetteLamar 2025-07-30 18:33:51 UTC
String#getbyte の rdoc 用コメントを doc/string/getbyte.rdoc というファイルに分離して :include: タグで取り込むようにしています。
[05353ab4b7] Peter Zhu 2025-07-30 18:31:20 UTC
複数 Ractor 利用時に require を main Ractor に実行させて待つために使われる内部的オブジェクトを RGenGC 用の WB-protected なオブジェクトにしています。
[6c24904a69] Peter Zhu 2025-07-28 13:36:19 UTC
Symbol の管理用の構造体 rb_symbols_t のメンバー last_id を next_id という名前に変更して型も rb_atomic_t にして atomic な操作で更新するようにして VM 全体のロックを不要にしています。
[b3598cf2a3] Nobuyoshi Nakada 2025-07-31 07:45:09 UTC
クロスコンパイル時の fake.rb のテンプレート template/fake.rb.in で渡されたファイル(ではなくてビルドツールチェインのコマンドの実行結果らしい?)の改行コードに CR が含まれている場合(Windows 環境)を考慮して削るようにしています。
[771804248e] Peter Zhu 2025-07-31 13:16:47 UTC
ARGF から参照される IO? などのオブジェクトは pin down されて GC.compact で移動できなくなっていたので ARGF の mark 処理で参照の mark を rb_gc_mark() から rb_gc_mark_and_move() に変更して参照の移動に対応するようにしています。
[69ff8f736b] Kazuki Yamaguchi 2025-07-31 16:57:31 UTC
拡張ライブラリ openssl で外部ライブラリとして AWS-LC を利用している時に正常終了しているのに ERR_peek_error() で誤ってエラー状態が取れることがあるみたいで OpenSSL::PKCS7 にエラー状態がセットされてしまっていたのを修正しているようです。
[865a6191d0] Kazuki Yamaguchi 2025-07-24 18:14:04 UTC
拡張ライブラリ openssl の OpenSSL::PKCS7 のテストの追加や鍵の更新など。
[dd352461da] Alan Wu 2025-07-24 17:01:04 UTC
ZJIT の arm64 版に新たな命令? の関数を追加しています。
[0aabbbe31d] Alan Wu 2025-07-30 23:02:22 UTC
ZJIT の Rust 実装の誤ったコメント削除。
[da0de3cb87] Alan Wu 2025-07-30 23:13:24 UTC
ZJIT の arm64 版の命令生成の不具合修正。
[84ee71df45] Alan Wu 2025-07-31 19:30:46 UTC
variable.c の general_ivar_set() の RUBY_ASSERT() にエラー時のメッセージを追加。
[f0c31c5e64] Jean Boussier 2025-07-31 12:25:41 UTC
Object Shapes の RSHAPE_PARENT() という inline 関数の名前が実態に合ってないということで RSHAPE_PARENT_RAW_ID() に改名しています。また RSHAPE_DIRECT_CHILD_P() という inline 関数も導入しています。
[12306c0c6f] Takashi Kokubun 2025-07-31 19:57:59 UTC
ZJIT で JIT コンパイルされたメソッド同士の呼び出しの時の対応の準備? みたいです。 https://github.com/ruby/ruby/pull/14052
[5a7be72c06] Alan Wu 2025-07-31 20:23:24 UTC
84ee71df4540c9c13854c86d6b30bf8f385780c8 の続きで general_ivar_set() の RUBY_ASSERT() のメッセージにさらに shape_id の情報を詳しく埋め込むようにしています。デバッグ中みたいですね。
[543f8dcad3] Takashi Kokubun 2025-07-31 21:28:08 UTC
ZJIT の disasm の出力の強化をしているようです。 https://github.com/ruby/ruby/pull/14070
[1055e04e28] Peter Zhu 2025-08-01 01:18:26 UTC
object.c の rb_obj_copy_ivar() で冗長なローカル変数の代入を削っています。
[fc5e1541e4] Jean Boussier 2025-07-29 13:13:01 UTC
構造体 struct rb_callcache の klass メンバーから参照する Class オブジェクトへは GC mark 時に weak 参照として扱うようにして対象のクラスが回収されるのを妨げないようにしています。このため cc->klass の参照時に回収されていないかのチェックを行うようにしています。なるほどたしかに call cache は invalidate されるまで残るけどもうそのクラスは不要(一時的な特異クラスとか?)ということがありえて肥大化するということがあるのか? 動機はちょっとよく読み取れてませんが。と、思いましたが次のコミット f2a7e48deadb9101d49c9b613abf5a83c9e1dd49 を読むとどうやら複数 Ractor でのパフォーマンスの改善のための変更に向けての布石だったみたいです。
[f2a7e48dea] Jean Boussier 2025-07-30 10:44:39 UTC
構造体 rb_classext_t のメンバー cc_table を rb_id_table のテーブルから独自の内部的な T_TYPEDDATA 型オブジェクトとして定義するようにして、GC で回収を管理するようにしています。fc5e1541e4bb4b7995b6acc1ea6121b60fc64e7a の変更もこの変更のための準備だったみたいです。ということであらためて fc5e1541e4bb4b7995b6acc1ea6121b60fc64e7a のコミットログをよむと、おそらく複数 Ractor 利用時の cc_tbl のアクセスの衝突? が多くなるので RCU による排他を行いたくて、そのためにはここのメモリ管理を GC まかせにしたかった、ということみたいです。動機としては Ractor でのパフォーマンスみたいですね。
[547f111b5b] Jean Boussier 2025-07-30 14:51:59 UTC
ということで fc5e1541e4bb4b7995b6acc1ea6121b60fc64e7a と f2a7e48deadb9101d49c9b613abf5a83c9e1dd49 の下準備を経て rb_classext_t::cc_tbl の call cache の参照を RCU を用いた更新にして参照時に lock free にすることで複数 Ractor 利用時のパフォーマンス改善をしようとしているようです。
[1064c63643] Jean Boussier 2025-08-01 09:22:11 UTC
Object Shapes で object_id を管理するのに使う関数 rb_shape_transition_object_id() で丁度 too_complex になる場合の対応が不足していた不具合を修正しています。