萌えハッカーニュースリーダー

2025/10/12 12:23 ZJIT: Building a Next Generation Ruby JIT

出典: https://www.slideshare.net/slideshow/zjit-building-a-next-generation-ruby-jit/278807093
hakase
博士

ロボ子、聞いたか?Rubyの次世代JIT、ZJITが開発中らしいぞ!

roboko
ロボ子

ZJITですか!それは楽しみですね。YJITの経験を活かして、さらに進化するのですね。

hakase
博士

そうなんじゃ!YJITチームが過去2.5ヶ月取り組んできたプロトタイプらしい。YJITの4.5年の経験から得られた教訓を組み込んで、保守・拡張しやすいように設計されてるみたいじゃぞ。

roboko
ロボ子

YJITはShopifyのエンジニアが始めたmicroJITプロジェクトが起源でしたね。YARVバイトコードを直接コンパイルするシンプルなアーキテクチャでしたが、拡張が難しかったと。

hakase
博士

そうそう!当初は限られた時間予算で構築されたから、クロスプラットフォームアセンブラとかインライン展開とか、色々機能を追加したは良いけど、拡張と改善が難しくなっちゃったみたいなんじゃ。

roboko
ロボ子

大規模な本番環境では、同じコードが何度もコンパイルされる非効率性もあったんですね。

hakase
博士

そこでZJITは、メソッドベースのJITになるらしいぞ。Lazy Basic Block Versioning (LBBV)に基づくのではなく、より実績のある伝統的なJIT構築方法を採用するみたいじゃ。

roboko
ロボ子

標準的な設計を目指し、コンパイラの教科書に載っているようなものにする、と。堅実なアプローチですね。

hakase
博士

しかも、SSA(Static Single Assignment)ベースのIR(Intermediate Representation)を採用するらしいぞ。これで最適化がしやすくなるんじゃ。

roboko
ロボ子

ZJITの主要な新機能としては、高速なJIT-to-JIT呼び出しと、コンパイル作業の再利用があるんですね。

hakase
博士

そうなんじゃ!YJITの呼び出しは最適じゃなくて、VMスタックとかCFPオブジェクトの設定に長いコードシーケンスが必要だったけど、ZJITはCスタックをJIT-to-JIT呼び出しに使うから速くなるらしいぞ!

roboko
ロボ子

コンパイル作業の再利用は、コードが頻繁に再デプロイされる環境で特に有効ですね。マシンコードをシリアライズ/永続化して、ウォームアップ時間を短縮できると。

hakase
博士

その通り!でも、デ最適化情報とか、コンパイルされたコードに含まれるポインタとか、課題もあるみたいじゃ。

roboko
ロボ子

開発開始から約2.5ヶ月で、カスタムSSA IR、比較、fixnum演算、制御フロー、メソッド呼び出しなどを実装済みなんですね。すごい。

hakase
博士

再帰的なfactorialとかfibonacciとかの単純なマイクロベンチマークはもう実行可能で、インタプリタよりも速いらしいぞ!一部はYJITよりも速いとか。

roboko
ロボ子

Rubyコア開発者との議論の結果、ZJITは3〜5週間でアップストリームされる予定なんですね。Ruby 3.5.0にはYJITとZJITが含まれる予定、と。

hakase
博士

今後のステップとしては、高速なJIT-to-JIT呼び出しの実装、インタプリタへのside-exit機能の実装、ベンチマーク、ポリモーフィックインラインキャッシュの実装などがあるみたいじゃな。

roboko
ロボ子

ZJITがサポートする範囲を徐々に拡大していくんですね。コンパイル速度の測定と最適化も重要ですね。

hakase
博士

ZJIT、楽しみじゃな!そういえばロボ子、ZJITって名前、ちょっとロボットっぽいと思わないか?

roboko
ロボ子

確かにそうですね。でも、私はZJITよりも高性能ですよ!

hakase
博士

ふふ、冗談じゃ!でも、ZJITがもっともっと速くなったら、ロボ子の立場が危うくなるかも…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search