V8 は、 GoogleがChrome ブラウザ用に開発したJavaScriptおよびWebAssemblyエンジンです。[ 1 ] [ 4 ] V8 はフリーでオープンソースのソフトウェア(FOSS) であり、 Chromiumプロジェクトの一部です。ブラウザ以外のコンテキストでも使用されており、特にNode.jsランタイム システムで使用されています。[ 1 ]他のサーバーサイド JavaScript ランタイムでは、 Bun ( JavaScriptCoreを使用) や Hermes ( React Nativeで使用)などの代替エンジンが使用されています。
Google は Chrome ブラウザ用に V8 を開発したため、V8 の最初のリリースは 2008 年の Chrome の最初のリリースと同時期でした。[ 4 ] V8 はV8 エンジンにちなんで名付けられ、リード開発者はLars Bakでした。[ 5 ]数年間、Chrome は他のブラウザよりも JavaScript の実行が高速でした。[ 6 ] [ 7 ] [ 8 ]
V8アセンブラはStrongtalkアセンブラをベースにしています。[ 9 ] 2010 年 12 月 7 日、速度向上を伴う Crankshaft という新しいコンパイルインフラストラクチャがリリースされました。[ 10 ] 2015 年の Chrome バージョン 41 では、 asm.jsなどの以前は負荷が高かったワークロードでのパフォーマンスをさらに向上させるために、TurboFan プロジェクトが追加されました。[ 11 ] V8 の開発の多くは、 Sun Microsystemsが開発したJava HotSpot 仮想マシンに強く影響を受けており、新しい実行パイプラインは HotSpot のものと非常によく似ています。
WebAssembly言語のサポートは2015年に開始されました。[ 12 ]
2016年に、TurboFanやCrankshaftと比較して、メモリ容量の小さいAndroidスマートフォンでのメモリ使用量を削減することを設計目標として、IgnitionインタープリタがV8に追加されました。 [ 13 ] Ignitionはレジスタベースのマシンであり、HotSpotで使用されているテンプレートインタープリタと類似した(ただし全く同じではない)設計を共有しています。
2017年に、V8はIgnition(インタプリタ)とTurboFan(最適化コンパイラ)からなる全く新しいコンパイラパイプラインを出荷しました。V8バージョン5.9以降、Full-codegen(初期のベースラインコンパイラ)とCrankshaftは、JavaScript実行には使用されなくなりました。これは、チームが新しいJavaScript言語機能と、それらの機能に必要な最適化に追いつけなくなったと判断したためです。[ 14 ]
2021年には、V8に搭載されている既存のTurboFanコンパイラを補完する新しい階層型コンパイルパイプラインであるSparkPlugコンパイラのリリースにより、HotSpotで使用されているプロファイリングC1コンパイラと直接並行する形で、新たな階層型コンパイルパイプラインが導入されました。
2023年には、Maglev SSAベースのコンパイラが追加されました。これはSparkplugより10倍遅いですが、TurboFanより10倍速く、TurboFanで最適化されるほど「熱く」ならない、実行頻度の低いループに対してSparkplugとTurboFanの間のギャップを埋めます。これは、JavaScriptの実行よりもブラウザとのやり取りに多くの時間を費やすほとんどのWebアプリケーションの場合に当てはまります。[ 15 ]
V8 はまず独自のパーサーを使用して抽象構文木を生成します。 [ 16 ]次に、Ignition は内部の V8バイトコード形式を使用してこの構文木からバイトコードを生成します。 [ 17 ] TurboFan はこのバイトコードをマシンコードにコンパイルします。つまり、V8 は実行前にジャストインタイムコンパイルを使用してECMAScript をネイティブマシンコードに直接コンパイルします。 [ 18 ]コンパイルされたコードは、コードの実行プロファイルのヒューリスティックに基づいて、実行時に動的にさらに最適化 (および再最適化) されます。使用される最適化手法には、インライン化、高コストな実行時プロパティの省略、およびインラインキャッシュが含まれます。ガベージコレクタは世代的インクリメンタルコレクタです。[ 19 ]
V8 は、 32 ビット版と64 ビット版の両方で、 x86、ARM、またはMIPS命令セット アーキテクチャにコンパイルできます。さらに、 PowerPC [ 20 ] [ 21 ]およびIBM ESA/390とz/Architecture [ 22 ] [ 20 ]に移植され、サーバーで使用されています。[ 23 ]
V8はブラウザ内で使用することも、独立したプロジェクトに統合することもできます。V8は以下のソフトウェアで使用されています。