GoogleのV8 JavaScriptエンジンのバージョン7.2と7.3には、JavaScriptパース性能の向上、新しいJavaScript言語機能のサポート、WebAssemblyパフォーマンス改善が含まれている。
binary-astプロポーザルの導入により、JavaScriptパース時間の性能向上に目が向けられている。
V8 7.2のリリース発表によると、典型的なWebページにおいて、V8実行時間の約10%が、起動時のJavaScriptリソースのパースに費やされているという。バージョン7.0から7.2で、V8のデスクトップパース性能は約30%向上し、その結果、典型的なJavaScriptのパースは実行時間の約7.5%に下がった。
V8 7.2リリースには、最近発表されたasync機能とpromisesを最適化する改善が含まれている。7.3リリースではasyncスタックトレースが可能になり、非同期コードをデバッグする際の開発者体験が向上している。
7.2リリースでは、スプレッド要素が配列リテラルの最初の項目である場合(例えば[...foo, 42, 75]
)の性能も改善されている。V8チームは次のように説明した。
この改善は、配列、プリミティブ文字列、セット、マップキー、マップバリューのスプレッディング、さらには
Array.from(x)
まで、いくつかのユースケースで恩恵があります。
V8 7.2では、JavaScript言語プロポーザルのサポートが複数追加されている。public class fieldsのTC39 Stage 3プロポーザルがサポートされ、private class fieldsは今後のV8リリースで計画されている。Intl.ListFormat
のサポートによりローカライズしたリストフォーマットが可能になる。そして、module namespace exportsのStage 1プロポーザル(export * as utils from './utils.mjs';
)も今回のリリースに含まれている。
7.3リリースは、ES2019仕様に含まれるObject.fromEntriesのStage 4プロポーザルをサポートする。また、キャプチャグループでの正規表現マッチのイテレートを簡単にするStage 3 String.prototype.matchAll
プロポーザルのサポートも含まれている。
これらのリリースでは、WebAssemblyにも目が向けられている。V8チームの説明によると、バージョン7.2には多くの改善が含まれているという。
私たちは様々なWebAssemblyベンチマークを分析することで、最上位実行層におけるコード生成を改善してきました。特にV8 v7.2では、最適化コンパイラのスケジューラにおけるノード分割とバックエンドにおけるループローテーションが可能になりました。また、ラッパーキャッシングを改善し、インポートされたJavaScript math関数の呼び出しオーバーヘッドを削減するカスタムラッパーを導入しました。さらに、レジスタアロケータに変更を加えて、今後のバージョンで使われる多くのコードパターンの性能が改善されるように設計しています。
バージョン7.3では、生成されるコードの品質を低下させることなく、WebAssemblyコンパイル時間を15–25%削減している。
トラップハンドラによってWebAssemblyコードのスループットを改善する重要な作業も進んでいる。V8 v7.2では、Windows、macOS、Linuxをサポートしている。
Chromeのリリースに合わせて6週ごとに、GoogleはV8 JavaScriptエンジンのブランチリリースを作成している。V8のバージョン7.2はChrome 72に、7.3はChrome 73に搭載されている。V8はNode.js JavaScriptランタイムにも組み込まれている。
V8はオープンソースソフトウェアであり、外部依存によりコードベースのサブセットに対して適用される複数のライセンスがある。彼らはV8 Gitプロジェクト経由でのコントリビューションを歓迎しており、V8のコントリビューションガイドラインとGoogleのオープンソース行動ガイドラインに従う必要がある。