TL;DR
Yet Another Ruby JIT の略。CRuby に組み込まれた、軽量な Ruby の JIT コンパイラである。
仕組み
YJIT は Basic Block Versioning(BBV)という方式で、コードを必要になったときに遅延コンパイルする。対応環境は、macOS、Linux、BSD の x86-64 と arm64 である。
YJIT はデフォルトでは無効で、次のどれかの方法で有効にする。
- コマンドラインオプション
--yjitを付けてrubyを起動する - 環境変数
RUBY_YJIT_ENABLEを設定する。RUBYOPT でオプションを渡してもよい - 実行時に Ruby のコードから
RubyVM::YJIT.enableを呼ぶ
有効になったかは、ruby --yjit -v の出力に +YJIT が含まれるか、RubyVM::YJIT.enabled? で確かめられる。
例
$ ruby --yjit myscript.rb
$ RUBYOPT="--yjit" ruby myscript.rb注意点
YJIT は、コンパイルした機械語とそのメタデータを保持するため、通常のインタプリタより多くのメモリを使う。また、起動時から有効にすると、起動時にしか使わないコードまでコンパイルしてしまう。その場合は、アプリケーションの初期化後に RubyVM::YJIT.enable で有効にすることが推奨されている。