📊JavaScript エンジンの高速化2024/08/10に公開4件コンパイラtechGitHubで編集を提案Discussionramenha01412024/08/11大変有益な記事を投稿いただきありがとうございます。 特に、JavaScriptCore は、他の JavaScript エンジンより 1 階層多い JIT コンパイラで構成されており、より優れた設計をもちます。 V8ではChrome117からSparkplugとTurboFanの間にMaglevという新しいJITコンパイラが導入されたことにより、JavaScriptCoreと同じく全4階層の構成になっています。 https://v8.dev/blog/maglev 返信を追加一色聡一郎2024/08/11よくまとめて頂いて勉強になりました。ありがとうございます。 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 Eno2024/08/12 JavaScriptCore において 2 番目に起動する JIT コンパイラをDFGと呼びます (WebKit blogの表記をひと通り確認しましたが)DFGはあくまでdata flow graphのことであって、DFG JITコンパイラのことをDFGと呼んではいない(そう呼び出すと余計な混乱が生じる)と思います。IRのJITコンパイラのことをIRとは呼ばないのと同じです。FTL JITコンパイラについても同様のことがいえそうです。 (1本の記事だけの問題としては些細なことなのですが、この記事は資料価値が高くて今後たびたび参照されそうな気がするので、あまりこの表記が広がらないうちに是正されたほうが良いと思いコメントしました。) 返信を追加lewisacid2024/08/14コメントありがとうございます。修正に反映させていただきます。 返信を追加
ramenha01412024/08/11大変有益な記事を投稿いただきありがとうございます。 特に、JavaScriptCore は、他の JavaScript エンジンより 1 階層多い JIT コンパイラで構成されており、より優れた設計をもちます。 V8ではChrome117からSparkplugとTurboFanの間にMaglevという新しいJITコンパイラが導入されたことにより、JavaScriptCoreと同じく全4階層の構成になっています。 https://v8.dev/blog/maglev 返信を追加
一色聡一郎2024/08/11よくまとめて頂いて勉強になりました。ありがとうございます。 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 Eno2024/08/12 JavaScriptCore において 2 番目に起動する JIT コンパイラをDFGと呼びます (WebKit blogの表記をひと通り確認しましたが)DFGはあくまでdata flow graphのことであって、DFG JITコンパイラのことをDFGと呼んではいない(そう呼び出すと余計な混乱が生じる)と思います。IRのJITコンパイラのことをIRとは呼ばないのと同じです。FTL JITコンパイラについても同様のことがいえそうです。 (1本の記事だけの問題としては些細なことなのですが、この記事は資料価値が高くて今後たびたび参照されそうな気がするので、あまりこの表記が広がらないうちに是正されたほうが良いと思いコメントしました。) 返信を追加
Discussion
大変有益な記事を投稿いただきありがとうございます。
V8ではChrome117からSparkplugとTurboFanの間にMaglevという新しいJITコンパイラが導入されたことにより、JavaScriptCoreと同じく全4階層の構成になっています。
よくまとめて頂いて勉強になりました。ありがとうございます。
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の特徴です。
(WebKit blogの表記をひと通り確認しましたが)DFGはあくまでdata flow graphのことであって、DFG JITコンパイラのことをDFGと呼んではいない(そう呼び出すと余計な混乱が生じる)と思います。IRのJITコンパイラのことをIRとは呼ばないのと同じです。FTL JITコンパイラについても同様のことがいえそうです。
(1本の記事だけの問題としては些細なことなのですが、この記事は資料価値が高くて今後たびたび参照されそうな気がするので、あまりこの表記が広がらないうちに是正されたほうが良いと思いコメントしました。)
コメントありがとうございます。修正に反映させていただきます。