ruby-trunk-changes 2024-01-28

今日は文法上のいくつかのケースで中間オブジェクトの生成を抑制するような最適化などがありました。

[0bac390e07] Masato Ohba 2024-01-27 13:19:40 UTC

bundle gem で生成する Gemfile のデフォルトの required_ruby_version を 2.6.0 から 3.0.0 にまで上げています。

[2217e08340] Jeremy Evans 2024-01-27 18:16:52 UTC

配列リテラルで大量の要素をもつ配列を定義した時にスタックあふれを避けるために複数の配列に分割しておいてから連結するような命令列にコンパイルしていたところで b8516d6d0174a10579817f4bcf5a94c8ef03dd7a で splat 引数処理のために追加した newarray/concatarray に相当するより効率な pushtoarray 命令を利用するようにして最適化しています。

[223910b329] Jeremy Evans 2024-01-26 21:35:37 UTC

配列リテラル内に [*a] のように配列を展開する記法を使っていた時の命令列へのコンパイルで concattoarray 命令を利用して中間オブジェクトの確保を抑制する最適化をしています。また peephole optimization で duparray + concattoarray の並びだった時も duparray をただの putobject にして余計な配列オブジェクトの生成を抑制する最適化を追加しています。

[a591e11a7a] Jeremy Evans 2024-01-26 20:29:37 UTC

演算子つき添字つき代入のメソッド(obj[*args] += ... のような代入の構文糖にみえるメソッド)の引数処理でも不要な配列オブジェクトの複製を抑制するように命令列を生成する最適化を施しています。すごい執念だな。

[d917bb8e60] Jeremy Evans 2024-01-26 19:53:49 UTC

添字付き代入メソッドが多値代入のような形式で呼ばれた時の命令列の生成でも不要な配列の複製を抑制するような命令列を作るように最適化しています。

[8a027d111f] Jeremy Evans 2024-01-26 22:01:55 UTC

VM 命令列へのコンパイル時の peephole optimization から expandarray + splatarray の命令の並びの時の splatarray を消す最適化をやめています。 expandarray 命令は実行の結果値スタックのトップに配列を置くとはかぎらないので。どうやら元々あった(潜在的な?)不具合みたいです。

[0f98d284f3] Nobuyoshi Nakada 2024-01-27 15:58:25 UTC

AST の ensure に対応するノードの型 rb_node_ensure_t のメンバーから nd_resq が未使用のため削除しています。

[e018036d89] Nobuyoshi Nakada 2024-01-28 02:08:23 UTC

AST 用の構造体 rb_node_resbody_t のメンバー nd_head を nd_next に改名しています。またメモリ上のレイアウトを変更しています。

[3dde9c1b43] Nobuyoshi Nakada 2024-01-28 03:00:26 UTC

GitHub Actions の YJIT を有効にする workflow でテストのエラーを無視するための設定を step へのパラメータとして渡すようにしています。しかし macOS 版のほうは設定の追加が漏れてそう。

[e0f4c4e410] Nobuyoshi Nakada 2024-01-28 03:46:07 UTC

3dde9c1b436e2e03da70306f7e5d08d85c9d3ab0 で漏れていた GitHub Actions の macOS 上の YJIT を有効にした workflow でエラーを無視するための設定を追加しています。

[f475dc1cd2] Nobuyoshi Nakada 2024-01-26 01:56:44 UTC

拡張ライブラリ digest に ext/digest/.document ファイルを追加してドキュメンテーション生成対象のファイルを指定しています。

[81702b4b87] Nobuyoshi Nakada 2024-01-26 03:13:21 UTC

拡張ライブラリ digest で C の初期化時のコードで定数からモジュールやクラスを得るのに rb_path2class() という関数を利用していたのを rb_const_get() を利用するように書きなおしています。

[d3e6bcd37f] Nobuyoshi Nakada 2024-01-26 03:15:59 UTC

拡張ライブラリ digest の Digest::SHAxxx クラスの定義でマクロを利用していたのをやめて普通に rb_define_class_under() を呼ぶようにしています。おそらく rdoc でのドキュメント生成で C のコード解析がうまくいかなくなるからでしょう。

[fed877c791] Nobuyoshi Nakada 2024-01-27 16:02:11 UTC

ensure 節に return を書いた時の警告? のチェックを修正しているみたいですが、ちょっとよくわからず。 [ruby-core:116459] [Bug #20217]

[5f733a1ae7] Nobuyoshi Nakada 2024-01-28 02:09:55 UTC

fed877c791f1c16a2b1a2c9a167b7f433505794d の続きで今度は rescue 節内の未使用の値にチェックを追加しているようです。 [ruby-core:116459] [Bug #20217]

[23b8337cd1] Nobuyoshi Nakada 2024-01-28 08:59:13 UTC

パターンマッチの ^var による変数の参照を引数のデフォルト値のところに書くと異常終了してしまう不具合を修正して SyntaxError になるようにしています。