ruby-trunk-changes 2023-08-04

今日は主に配列や文字列のバッファ共有した部分配列/部分文字列生成の処理の Variable Width Allocation 対応や YJIT の不具合修正などがありました。

[aeff31168a] Kunshan Wang 2023-08-02 09:53:01 UTC

配列オブジェクトのバッファの部分配列を共有するオブジェクトを作成する ary_make_partial() で Variable Width Allocation による埋め込みサイズが可変になったのに対応してまず最小の slot サイズの heap にオブジェクトを割当ててその slot サイズによる埋め込みできるサイズを元に slot 内に埋め込んだコピーを作るかバッファを共有したオブジェクトを作るかを判定するようにして不要に埋め込みコピーを量産しないようにしています。

[c65856d44f] Peter Zhu 2023-08-03 15:12:07 UTC

gc_mode_transition の gc_mode_transition() の不要な前方宣言を削除しています。

[b35a222348] Takashi Kokubun 2023-08-03 16:55:36 UTC

misc/gdb.py の cfp コマンドの実装で dummy frame の処理に対応。おそらくトップレベルの require で積まれるやつのことですね。

[132f097149] Kunshan Wang 2023-08-03 12:35:22 UTC

文字列オブジェクトのバッファを共有する部分文字列を作る str_subseq() で Variable Width Allocation により slot 内に埋め込みできるバッファサイズが可変になったのに対応して、関数内で埋め込みできるバッファサイズを別途計算していたのを最小の slot サイズの heap にオブジェクトを確保してから実際に str_embed_capa() で利用可能なサイズを得るように変更しています。

[98b4256aa7] Maxime Chevalier-Boisvert 2023-08-03 20:09:18 UTC

3b88a0bee841aee77bee306d9d34e587561515cf の配列を展開して代入する処理の YJIT での不具合修正が fd782dcd1e52326d81c5a776acfff362609df2f7 で revert されていたもののリトライ。今回は bootstraptest/test_yjit.rb に ruby スクリプトレベルのテストも追加されているのでやはり配列を展開して代入する時に配列サイズより左辺の代入先のほうが多かった時の問題だとわかります。 https://github.com/ruby/ruby/pull/8161

[4f99240b2e] Maxime Chevalier-Boisvert 2023-08-03 20:14:44 UTC

YJIT で x86_64 版のときに使える jb 命令(数値が指定より小さかった時の条件つきジャンプ命令)の対応を追加しています。 arm64 では使おうとした場合 side exit するようです。 https://github.com/ruby/ruby/pull/8168

[0dc0c24cad] Stan Lo 2023-08-04 11:15:58 UTC

8ecd300e1e51f9e56bf22a8c4fb64ef475612914irb のテストをリファクタリングした時にテストクラスの親クラスとして導入した IntegrationTestCase というクラスに TestCase を継承させるのを忘れていたのを修正しています。 https://github.com/ruby/irb/pull/667