ruby-trunk-changes 2023-11-09

今日は主に YJIT の JIT コード領域の独自の GC をデフォルトでは無効にする変更や、cross compile や Universal Binary のビルド時の ruby 実装の組み込みメソッドの埋め込みのために ISeq のバイナリフォーマットのヘッダの構造を変更して互換性チェックを緩める変更、Tempfile や Regexpdup/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 という構造のコピーの処理が不十分で異常終了する可能性があった不具合を修正しています。

[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 ととても大きくしています。

[5454741712] Vít Ondruch 2023-11-08 15:10:27 UTC

rubygems のテストのヘルパーメソッドに extension_in_lib というのを追加するリファクタリング

[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

macOSIntel 版のマシン上でビルドしたものを 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

1d5598fe0d3470e7cab06a756d40a9221fcd501bUniversal 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 例外を発生させるようにしています。 おそらく 1d5598fe0d3470e7cab06a756d40a9221fcd501bUniversal 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

22939382a897af32d9899fafedd5be807b0d555bruby 定義による組み込みメソッドを 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() の呼び出しがなぜか文字列のサイズが読み込みのサイズより大きい時だけ呼ばれてたのを無条件に呼ぶようにしています。

[0a7e620a36] Jun Aruga 2023-11-08 14:24:21 UTC

Travis-CI の設定に arm64-linux でのビルドを復活させています。

[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 のノードで表現する必要がなくなったみたいです。

[ad3db6711c] Nobuyoshi Nakada 2023-11-09 14:27:55 UTC

GitHub の dependabot の設定に GitHub Actions のアクションのバージョン更新の監視対象を .github 配下に指定しています。範囲を絞ってるのかなと思いましたが、コミットログによると "/" という指定はデフォルトで ".github/workflows/" を指定したことになるそうで、逆に明示的に指定することで範囲を広げて .github/actions/ 配下の独自アクションの定義の中も更新対象にするということみたいです。