今日は主に YJIT の JIT コード領域の独自の GC をデフォルトでは無効にする変更や、cross compile や Universal Binary のビルド時の ruby 実装の組み込みメソッドの埋め込みのために ISeq のバイナリフォーマットのヘッダの構造を変更して互換性チェックを緩める変更、Tempfile や Regexp の dup/clone 時の不具合修正などがありました。
[7efe0669ae] Jean Boussier 2023-11-08 07:56:32 UTC
392238e3fd76beb923de1ba3f8d8d6bd28c7030e で TypedData_Make_Struct0() マクロの変更時に削った明示的なキャストが警告抑制のために必要だったということで復活させています。
[b4bf8c9ee2] Han Young 2023-11-01 03:58:31 UTC
bundler で rubygems の Gem::BasicSpecification というクラスで extensions_dir メソッドを定義するように変更されたのに追随するため bundler で再定義するクラス名も変更しています。
[05cde4155c] Adam Hess 2023-11-01 07:01:55 UTC
正規表現の名前つき capture のための NameTable という構造のコピーの処理が不十分で異常終了する可能性があった不具合を修正しています。
[f694bd158c] Adam Hess 2023-11-07 06:46:42 UTC
05cde4155cd43a79733ab4996db2d8b1f64c4fb5 の追加修正でメモリ確保のエラー処理やメモリリーク修正。
[d80009d169] Burdette Lamar 2023-11-08 14:26:27 UTC
Process の rdoc 用コメントの説明やサンプルの追加。 https://github.com/ruby/ruby/pull/8847
[ddcfc9feab] Jeremy Evans 2023-11-08 15:19:45 UTC
標準添付ライブラリ tempfile の Tempfile#dup や #clone での複製時のため initialize_dup や initialize_clone メソッドを追加して、また open メソッドで finalizer への登録をリセットして再入できるようにしています。 Tempfile を dup/clone するとか危険そうであんまりやりたくない香りがしますが実際従来の実装では問題があったようですね。 [ruby-core:112445] [Bug #19441]
[50402db5a7] Takashi Kokubun 2023-11-08 15:21:04 UTC
YJIT で JIT コンパイルして作ったコード領域を独自の GC で未使用になったものを回収する code GC という機構をデフォルトでは起動しないようにしています。コマンドラインオプション --yjit-code-gc を追加してこれを指定したら有効になるようにしているようです。実際のアプリケーションであまり必要がないのでパフォーマンスのためにデフォルトで off にしたということかな。 https://github.com/ruby/ruby/pull/8865
[eb2abc3f16] Mau Magnaguagno 2023-11-08 15:37:19 UTC
YJIT の統計情報の表示のための数値の出力用で小数点の位置をそろえるための処理をシンプルにしています。 https://github.com/ruby/ruby/pull/8869
[ddd99a5290] Jeremy Evans 2023-11-08 16:35:16 UTC
ddcfc9feabf22ed6cc1071e65948a1d512a906fe の標準添付ライブラリ tempfile の変更で Tempfile.open の最後にメソッド呼び出しを追加したせいで戻り値が変化してしまっていたのを修正しています。
[8d0eb872e8] Peter Zhu 2023-11-08 18:29:10 UTC
bundler のテストのためのサンプルの gemspec ファイルが追加漏れしていたのを追加しています。
[d9ac2d91e0] David Rodríguez 2023-11-08 11:30:55 UTC
bundler のテストのヘルパーメソッドで環境変数で例外クラス名を指定する機能が未使用ということで削除されています。
[f67a80cdc0] David Rodríguez 2023-11-08 11:31:06 UTC
bundler のテストで bundle update 相当の処理をするヘルパーメソッドの呼び出しで不要にエラーを無視するオプションが渡されていたのを削っています。
[28356c2870] David Rodríguez 2023-11-08 12:30:41 UTC
bundler のテストのヘルパーメソッドの install_gem というのにインストール先のディレクトリを指定する引数を追加しています。
[a1d0c048df] David Rodríguez 2023-11-08 11:37:24 UTC
bundler のテストで bigdecimal のバージョン指定を書いてたものが bigdecimal のバージョンアップで失敗するようになってしまったみたいなので、bigdecimal の更新で壊れないように指定するバージョンを 99.1.4 ととても大きくしています。
[a168426881] Vít Ondruch 2023-11-08 15:18:08 UTC
rubygems のテストで 54547417129b2f3448dddcfba22d3f443f373da4 で導入したヘルパーメソッド extension_in_lib を利用して Gem.install_extension_in_lib の戻り値を stub 化して実行することで環境によるエラー? を回避するようにしているようです。
[1d5598fe0d] Ben Hamilton 2023-02-23 20:31:53 UTC
macOS の Intel 版のマシン上でビルドしたものを ARM(M1/M2) マシン上にもっていくとエラーになるというチケットで、一瞬そりゃそうだろと思いますが Universal Binary つまり x86_64 版と arm64 版の両方を含むバイナリなのに SEGV するという不具合の修正で、ビルド時に ruby 実装のメソッドを ISeq のバイナリフォーマットにダンプしたものを埋め込むというのが Universal Binary を考慮していなかったため、Universal Binary のビルド時にはこの最適化を抑制するようにしています。 [ruby-core:105920] [Bug #18286]
[486b674e2a] Yusuke Endoh 2023-11-09 03:56:07 UTC
test/runner.rb でテスト実行時に環境変数の GEM_PATH および GEM_PATH に .bundle や ../.bundle を明示的に追加していたのを消しています。ビルドディレクトリに bundled gems をダウンロードして展開したものを参照させるようにしていたのですが make test-all 時には不要なはずということで削除しています。 b19490f75dd790f2f886df2c05ed8fba947326a9 で去年追加されていた部分なので 3.2 も同じ状態のはずなのでそちらも消したほうがいいかなぁ。
[40d40a651e] Nobuyoshi Nakada 2023-11-09 04:40:55 UTC
1d5598fe0d3470e7cab06a756d40a9221fcd501b で Universal Binary 用にビルドされる時に ruby 実装の組み込みメソッドを ISeq にコンパイルしてバイナリフォーマットで埋め込むのをやめたのを revert しています。
[61bb5c0572] Nobuyoshi Nakada 2023-10-19 09:06:45 UTC
ISeq のバイナリフォーマットのヘッダのための構造体のメンバーの型を unsigned int から uint32_t に変更してシステムでサイズの変化がないようにしています。
[e2ef85b109] Nobuyoshi Nakada 2023-10-19 09:27:48 UTC
ISeq のバイナリフォーマットへの変換時に実行時のアーキテクチャの endian と word サイズを埋め込んでおいて load 時に現在のシステムと一致していない時に RuntimeError 例外を発生させるようにしています。 おそらく 1d5598fe0d3470e7cab06a756d40a9221fcd501b の Universal Binary での ISeq のバイナリフォーマット埋め込みがエラーになる件の対応のための準備かな。バイナリフォーマットのヘッダの構造が変化しているのでバージョンを上げないといけないんじゃないかな。
[22939382a8] Nobuyoshi Nakada 2023-10-19 11:23:58 UTC
e2ef85b1090d8806f6b68e2fa93d929d02e543b5 の ISeq のバイナリフォーマットのロード時のチェックの緩和で cross compile 時の ruby 実装の組み込みメソッドの ISeq バイナリフォーマットでの埋め込みもできる可能性があるので configure で一致するかチェックして可能なら埋め込みを使うようにしています。 [ruby-core:105920] [Bug #18286]
[7e8d9f49b3] Nobuyoshi Nakada 2023-11-09 04:42:31 UTC
22939382a897af32d9899fafedd5be807b0d555b の ruby 定義による組み込みメソッドを ISeq のバイナリフォーマットで埋め込むために builtin_binary.inc を生成する時に sha256sum でチェックサムを作って表示するように common.mk にアクションを追加しています。 [ruby-core:105920] [Bug #18286]
[195a09cc7f] Nobuyoshi Nakada 2023-11-09 07:12:03 UTC
拡張ライブラリ digest の各 Digest クラスの update メソッドの定義を生成するマクロで明示的なキャストを追加して警告抑制しています。
[b013aae0c6] Jean Boussier 2023-11-09 09:17:46 UTC
IO の読み込み系のメソッドで読み込みバッファに使う String オブジェクトの準備(指定がなかったら新規に作るなど)に使う io_setstrbuf() という関数で String オブジェクトが指定されていたり確保済みの時に rb_str_modify() の呼び出しがなぜか文字列のサイズが読み込みのサイズより大きい時だけ呼ばれてたのを無条件に呼ぶようにしています。
[ea1b1ea1aa] Jean Boussier 2023-11-08 13:05:52 UTC
String#force_encoding で Encoding の紐付けした時に元々の Encoding と変化しない時でも coderange の状態はクリアされてしまい続く処理で速度的なデメリットを被る可能性があるので、変化しない時はなにもしないようにして、さらに Encoding が変化しても 元々の coderange が ENC_CODERANGE_7BIT で Encoding も ASCII compatible な場合は変更する必要がないのでそのまま coderange の clear はスキップするようにしています。
[c4efd17061] tomoya ishida 2023-11-09 13:15:22 UTC
irb のコマンドラインオプションに --regexp-completor と --type-completor というのを追加して e34401046566ad1938b1eec654a6bf69b1319102 で導入した rbs を利用した型ベースの補完処理を起動時に有効にすることができるようにしています。 https://github.com/ruby/irb/pull/754
[f6910a6112] Peter Zhu 2023-11-08 15:19:06 UTC
Object Shapes の rb_shape_t::type のタイプの定数の SHAPE_CAPACITY_CHANGE というのを削除しています。元の実装がよくわかってませんが最近の capacity transition という変更による動的な capacity 変更の実装により rb_shape_t のノードで表現する必要がなくなったみたいです。