ruby-trunk-changes 2023-03-15

今日は Process.waitpid 系の実装のため SIGCHLD シグナルの扱いを特別扱いしていたのをやめる変更の再挑戦や ObjectSpace::WeakMap の GC.compact 対応の不具合修正などがありました。

[548086b34e] Jean Boussier 2023-03-14 08:12:55 UTC

ObjectSpace::WeakMap が GC.compact した時に参照の移動対応が漏れていて異常終了する可能性があった不具合を修正しています。 rb_gc_update_tbl_refs() で st_table の参照更新をしようとしていましたが WeakMap の実装は st_table の値のところが VALUE の配列へのポインタとしてちょっと別の構造にしているので特別対応した実装が必要でした。 [ruby-core:112871] [Bug #19529]

[76f2031884] Takashi Kokubun 2023-03-14 17:26:05 UTC

YJIT の Rust 実装のテストを書きやすくするための変更みたいです。 https://github.com/ruby/ruby/pull/7470

[9a43c63d43] Takashi Kokubun 2023-03-14 20:39:06 UTC

YJIT に VM 命令 throw による大域脱出の JIT コンパイル対応を追加しているようです。 https://github.com/ruby/ruby/pull/7491

[868f03cce1] Takashi Kokubun 2023-03-14 21:00:19 UTC

vm.c の vm_exec() の第2引数 jit_enable_p がもう不要になっていたので削除して、取り回すための構造体 struct rb_vm_exec_context の同名のメンバーも削除しています。

[70ba310212] Takashi Kokubun 2023-03-14 22:38:58 UTC

組み込みメソッドの ruby 実装のための Primitive.attribute! メソッドの引数に :no_gc という属性の指定も受け付けるように拡張しています。たぶん名前の通りメソッドの実装内で GC が発生するポイントがないということを保証して JIT コンパイルした時のコードでレジスタの退避などの処理をスキップする最適化のためみたいです。 https://github.com/ruby/ruby/pull/7511

[3dc8cde700] Peter Zhu 2023-03-15 03:18:11 UTC

548086b34e3dd125edabf5dc1e46b891fad3ea9c の ObjectSpace::WeakMap の GC.compact 対応の不具合修正の再修正。 st_table の値の扱いを間違えていたのを修正。 [ruby-core:112871] [Bug #19529]

[55a0fbfaf8] Hiroshi SHIBATA 2023-03-13 09:13:15 UTC

rubygems の Gem::Specification#missing_extensions? に追加していた拡張ライブラリのファイルを探す処理を bundler による Gem::Specification の拡張をしている部分に移動しています。

[31137dc67f] Hiroshi SHIBATA 2023-03-13 10:09:46 UTC

55a0fbfaf855da513e7c8e1234e9edfd51693efa で bundler の拡張のほうに移動した Gem::Specification#missing_extensions? の実装の文字列リテラルのクオートをダブルクオートに変更。また rubygems のほうのテストに missing_extentions? の拡張部分のテストが残っていたので削除しています。

[04a2550928] Hiroshi SHIBATA 2023-03-13 10:24:00 UTC

55a0fbfaf855da513e7c8e1234e9edfd51693efa で bundler の拡張のほうに移動した Gem::Specification#missing_extensions? の実装で探索するディレクトリの参照方法を raw_require_paths というメソッド? のほうを利用するように変更しています。よくわからないけど bundler での実装ではこれが使えるということかな。

[ce47ee00ae] Nobuyoshi Nakada 2022-12-27 02:21:46 UTC

bootstraptest の Ractor 間のメッセージ送受信のテストで共有数のカウントアップに不具合があったのを修正しています。

[7fd53eeb46] Samuel Williams 2023-03-15 06:48:27 UTC

昨日 ac65ce16e904695ba45888d3fba641d12caf733a で revert した SIGCHLD の特別扱いをやめる変更のリトライ。Process.waitpid 系の実装の対応部分のみかな。 https://github.com/ruby/ruby/pull/7527

[6462c1a042] Koichi Sasada 2023-03-13 18:42:47 UTC

e87d0882910001ef3b0c2ccd43bf00cee8c34a0c の変更で f(*args, **kw) のようなメソッド呼び出しでのオブジェクト生成を抑制する変更で keyword rest 引数を渡してメソッド呼び出しした時にメソッド内で参照できる keyword rest 引数の Hash オブジェクトが呼び元で渡した Hash オブジェクトと同一のインスタンスになってしまっていたので、dup を促すフラグを立てておく処理を追加しています。 https://github.com/ruby/ruby/pull/7507 [ruby-core:112854] [Bug #19526]

[ca437aeb39] Jean Boussier 2023-03-14 09:12:32 UTC

Array#sum に初期値を引数として渡した時に、全要素が整数や Rational だった時の最適化が行なわれるとそれが利用されず数値のように振る舞うオブジェクトを引数に渡した時に戻り値がそのクラスのオブジェクトにならないという不具合を修正しています。最適化するかどうかのチェックに引数のオブジェクトの型のチェックも追加しています。 https://github.com/ruby/ruby/pull/7519 [ruby-core:112873] [Bug #19530]

[09041a6ee8] Nobuyoshi Nakada 2023-03-15 09:19:31 UTC

7ce4b716bdb5bcfc8b30ffcd034ce7aded1f72b9 で追加した default gems のテストでも使うための assertion メソッド assert_linear_performance に rehearsal キーワード引数を追加して最初にかかる時間を測定するのに繰り返す回数を別途指定できるようにしています。

[b528ecc164] Hiroshi SHIBATA 2023-03-15 06:10:12 UTC

rubygems の Gem::Security.create_digest というメソッド定義を OpenSSL::Digest が定義されているかどうかで分岐していたのがもう不要とのことで常に OpenSSL::Digest を利用するように変更しています。

[a90302adec] Hiroshi SHIBATA 2023-03-15 06:27:48 UTC

rubygems のテストで OpenSSL::Digest モジュールを OpenSSL を省略して Digest で参照していたのをフルパスで参照するように修正しています。

[56b38fdd69] Hiroshi SHIBATA 2023-03-15 06:38:49 UTC

bundler のテストで拡張ライブラリ digest を利用していたところを openssl の OpenSSL::Digest をかわりに利用するように変更しています。