📊

JavaScript エンジンの高速化

に公開4
GitHubで編集を提案

Discussion

ramenha0141ramenha0141

大変有益な記事を投稿いただきありがとうございます。

特に、JavaScriptCore は、他の JavaScript エンジンより 1 階層多い JIT コンパイラで構成されており、より優れた設計をもちます。

V8ではChrome117からSparkplugとTurboFanの間にMaglevという新しいJITコンパイラが導入されたことにより、JavaScriptCoreと同じく全4階層の構成になっています。

https://v8.dev/blog/maglev

一色聡一郎一色聡一郎

よくまとめて頂いて勉強になりました。ありがとうございます。

RubyのJITに関してですが、2021年にYJITがマージされました。2023年に新しくRJITがマージされ、MJITが削除されてYJITが事実上のメインJITエンジンとなっています。
Ruby 3.1正式リリース。Shopify開発のJITコンパイラ「YJIT」をメインラインにマージ
YJIT: Building a New JIT Compiler for CRuby
YJIT: a basic block versioning JIT compiler for CRuby
RJITはRubyでJITコンパイラを書くという野心的なプロジェクトですが、現在はExperimentalな位置付けです。
RJIT: RubyでRubyのJITコンパイラを書いた

MJITに関してですが、原型となったMJIT(区別のためVlad's MJITと呼びます)がレジスタマシンVMを採用していたのはその通りなのですが、RubyにマージされたMJITは互換性維持の観点から当初よりRubyの標準VM(スタックマシン)を使用するようになっています。
Ruby 2.6にJITコンパイラをマージしました

なお、参考文献にあるMIRは(作者はVlad's MJITと同じ方ですが)MJITとは別のプロジェクトです。文中の「高速なコンパイルを実現するために軽量 JIT コンパイラ」はMIRの特徴です。

Atsushi EnoAtsushi Eno

JavaScriptCore において 2 番目に起動する JIT コンパイラをDFGと呼びます

(WebKit blogの表記をひと通り確認しましたが)DFGはあくまでdata flow graphのことであって、DFG JITコンパイラのことをDFGと呼んではいない(そう呼び出すと余計な混乱が生じる)と思います。IRのJITコンパイラのことをIRとは呼ばないのと同じです。FTL JITコンパイラについても同様のことがいえそうです。

(1本の記事だけの問題としては些細なことなのですが、この記事は資料価値が高くて今後たびたび参照されそうな気がするので、あまりこの表記が広がらないうちに是正されたほうが良いと思いコメントしました。)

lewisacidlewisacid

コメントありがとうございます。修正に反映させていただきます。