はじめに

昨今JavaScriptランタイムがいくつか出てきており、それぞれ違いがあるので、まとめてみることにする

この手の解説は、図にするがベストなので余裕があるときにやります、、 古川さんの資料が本当に分かりやすく。その引用ばかりになります。。ご了承ください。

前提

JavaScriptエンジン

  • V8
  • JavaScriptCore(Nitro)

JITコンパイラ

JITコンパイルは、プログラム実行時にソースコードや中間コードをbytecodeへ変換します。1行1行実行するインタプリタと比較して、コンパイル時のオーバーヘッドがあるが、実行時の速度が速い。

V8はインタプリタを使わず、JITコンパイラでJavaScriptをより効率が良い機械語に変換します。

言語処理方法

  1. Tokenize(ソースコードから、Token)
  2. Parse(Tokenから、AST)
  3. Compile(ASTから、Byte Code)
  4. Byte Codeから機械語
英語 日本語
Tokenize 字句解析
Parse 構文解析
Token トークン列
AST 抽象構文木

Node.js

構成

Bun

構成

参考

JavaScriptエンジンでの処理を理解する Bunファーストインプレッション - JavaScriptランタイム界に”赤壁の戦い”を! Bun first impressions