ruby-trunk-changes 2022-08-10

今日は主に splat つきの代入(いわゆる多重代入)の時の VM 命令列を最適化する peephole 最適化や標準添付ライブラリ error_highlight の更新などがありました。

[ff07e5c264] Nobuyoshi Nakada 2022-08-08 17:15:10 UTC

gc.c の objspace_each_objects_try() でコールバック関数を呼び出す前に __asan_region_is_poisoned() で対象のメモリ領域 ASAN でチェック対象になってないかチェックするようにしています。debug.gem が ASAN を有効にしているとエラーになってたみたいです。

[357352af5e] Jeremy Evans 2021-10-19 19:59:39 UTC

開発中ブランチであることを示す RUBY_DEVEL というマクロが RUBY_PATCHLEVEL が -1 の時自動で真になるのを止めるようにしています。 [ruby-core:101695] [Feature #17468]

[3569d13095] git 2022-08-10 05:13:45 UTC

version.h の日付更新

[9f8abd28ba] Jeremy Evans 2022-07-20 19:16:24 UTC

VM 命令列の peephole 最適化に newarray と expandarray が並んで VM の値スタックのトップの2つの内容を(結果的に)入れ替えるのは swap 命令1つにおきかえるようにしています。中間の配列オブジェクトを不要にしています。

[d9167491db] Jeremy Evans 2022-07-20 19:24:50 UTC

結構前ですが 5512353d97250e85c13bf10b9b32e750478cf474VM 命令の reverse が本体では未使用になっているので削除していたのを reverse しています。

[5089b6acc7] Jeremy Evans 2022-07-20 19:28:48 UTC

9f8abd28babf1ab84093fe0cc97f8d42cf62286c の続きで VM 命令の newarray と expandarray で同じサイズを指定してた場合を d9167491db220756df159048348f006619df28c1 で復活させた reverse 命令を利用するようにして任意のサイズに対応するように拡張しています。また reverse 命令は opt_reverse 命令に変更しています。

[7922fd65e3] Jeremy Evans 2022-07-20 20:13:47 UTC

benchmark/masgn.yml の配列を splat して代入する処理のベンチマークに代入する値がリテラルでないパターンを追加しています。 5089b6acc7b57605823704d28c82e286f49661e6 の peephole optimization の効果を測定するたみみたいです。

[fc4b4f2e8d] Jeremy Evans 2022-07-20 21:06:28 UTC

5089b6acc7b57605823704d28c82e286f49661e6 の peephole optimization の最適化では newarray と expandarray のサイズが同じだったら最適化できるとしていましたが、splat 代入で右辺値と左辺値の数が一致してないケースでも最適化できるようにしています。

[9363b0423a] Jeremy Evans 2022-07-20 22:09:20 UTC

VM 命令の peephole optimization に duparray + expandarray が連続していたら duparray で dup された配列オブジェクトはすぐに VM の値スタック上に展開されるので新しい Array オブジェクトを確保する必要がないのでコピーはせずに putobject でコピー元の Array オブジェクトを VM スタックに積んで expandarray するような最適化を追加しています。これも splat 代入で起こりうる命令のパターンみたいで 7922fd65e30fb9f011b939dead38cda94a7e2721ベンチマークで改善が測定できたようです。

[b7e492fa9e] Jeremy Evans 2022-07-21 01:24:06 UTC

yjit/src/cruby_bindings.inc.rs の YJIT の Rust 実装に取り込む C のシンボル情報の再生成をしています。 VM 命令の opt_reverse の復活/改名に追随するためみたいですね。

[1139bc8c20] git 2022-08-10 07:05:11 UTC

gems/bundled_gems と NEWS の debug.gem のバージョンを 1.6.2 に更新しています。

[99e7fa5b37] Yusuke Endoh 2022-08-10 09:36:59 UTC

標準添付ライブラリ error_highlight の ErrorHighlight.spot メソッドの引数に例外(Exception)オブジェクトを渡すとその例外の backtrace_locations を使って例外発生箇所の Spotter オブジェクトを生成するようにしています。また ErrorHighlight::CoreExt#generate_snippet で NameError や TypeError の対応をしていたのを ErrorHighlight.spot に委譲するようにリファクタリングしています。