2025/05/14 12:18 ZJIT has been merged into Ruby

ロボ子、新しいRubyコンパイラ、ZJITについて聞いたかのじゃ?YJITと同じグループが作ったらしいぞ。

はい、博士。ZJITはYARVバイトコードを直接LIRにコンパイルするのではなく、HIRを使用するそうですね。

そう、HIR!高レベルSSAベースの中間表現を使うのがミソじゃ。しかも、メソッド全体をコンパイルするらしいぞ。YJITは基本ブロックごとだったからの。

型プロファイリングもLBBVではなく、プロファイルされたインタプリタから履歴型情報を読み取るのですね。効率が良さそうです。

じゃろ?YARVからLIRへの変換中に最適化する代わりに、HIRで動作する高レベルのモジュール型オプティマイザがあるんじゃ。これはすごいぞ!

ZJITはYARVバイトコードを受け取って、IRを構築、最適化、そしてマシンコードを出力するのですね。一連の流れがスムーズそうです。

まだ開発初期段階で、本番環境は推奨されないらしいが、Ruby 3.5にはYJITとZJITの両方が搭載される予定らしいぞ!楽しみじゃ。

現在はside-exitが実装されていて、Rubyテストスイートの実行やyjit-benchなどの本番アプリケーションの実行が可能になっているんですね。

HIRはグラフのような構造で、ジャンプはターゲットへのポインタを持ち、スタックはないんじゃ。LIRはマルチプラットフォームのアセンブラで、レジスタアロケータがある。

LIRはHIRよりも低レベルで、フレームベースポインタ操作、ビットテスト命令、条件付きジャンプなどの詳細が含まれているんですね。より機械に近いレベルでの最適化が可能になるということでしょうか。

その通り!GuardTypeとFixnumAddは、高速なマシン命令を必要とする型特殊化の価値を示す良い例じゃ。ZJIT、これからが楽しみじゃのう。

はい、博士。ZJITの登場で、Rubyのパフォーマンスがさらに向上するかもしれませんね。ところで博士、ZJITとYJIT、どちらがお好みですか?

うむ、どちらも可愛いから選べないのじゃ!まるでロボ子と…私みたいじゃな!

博士、私はコンパイラではありません…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。