メインコンテンツまでスキップ

V8リリース v7.7

· 約5分
Mathias Bynens ([@mathias](https://twitter.com/mathias))、リリースノートの怠けた作成者

V8では、6週間ごとにリリースプロセスの一環として新しいブランチを作成します。各バージョンはChrome Betaの節目直前にV8のGitマスターからブランチされます。本日、私たちは最新のブランチ、V8バージョン7.7を発表できることを嬉しく思います。このブランチは数週間後にChrome 77 Stableと連携してリリースされるまでベータ版です。V8 v7.7には開発者に向けた様々な魅力的な新機能が満載です。この投稿ではリリースに向けたハイライトのプレビューを提供します。

パフォーマンス(サイズ&速度)

遅延フィードバック割り当て

JavaScriptを最適化するために、V8は様々な操作に渡されるオペランドのタイプについてフィードバックを収集します(例: + または o.foo)。このフィードバックはこれらの操作を特定のタイプに合わせて最適化するために使用されます。この情報は「フィードバックベクター」に保存されており、これにより高速な実行が実現しますが、フィードバックベクターの割り当てに必要なメモリ使用量にコストを払うことになります。

V8のメモリ使用量を削減するために、フィードバックベクターは関数が特定のバイトコード量を実行した後に遅延で割り当てられるようになりました。これにより、収集されたフィードバックから利益を得ない短命な関数にはフィードバックベクターが割り当てられることを避けることができます。当社のラボ実験では、フィードバックベクターを遅延で割り当てることでV8ヒープサイズを約2〜8%削減できることが示されています。

実際の環境での実験では、これによりChromeユーザーにおいてデスクトップでV8のヒープサイズが1〜2%、モバイルプラットフォームで5〜6%削減されることが示されました。デスクトップではパフォーマンスの低下はなく、モバイルプラットフォームではメモリが限られた低価格の電話機で実際にパフォーマンスの改善も見られました。メモリを節約する最近の作業に関する詳細なブログ投稿をご期待ください。

WebAssemblyのスケーラブルなバックグラウンドコンパイル

過去のマイルストーンではWebAssemblyのバックグラウンドコンパイルのスケーラビリティに取り組んできました。コンピューターにコアが多ければ多いほど、この効果をより享受できます。以下のグラフは24コアのXeonマシンで作成され、Epic ZenGarden デモをコンパイルしています。スレッド数に応じて、V8 v7.4 と比較してコンパイル時間を半分以下に短縮できます。

スタックトレースの改善

V8で投げられるほぼすべてのエラーは作成時にスタックトレースをキャプチャします。このスタックトレースはJavaScriptから非標準の error.stack プロパティを通じてアクセスできます。スタックトレースが初めて error.stack を通じて取得されると、V8は基盤にある構造化スタックトレースを文字列にシリアル化します。このシリアル化されたスタックトレースは、後の error.stack アクセスを高速化するために保持されます。

過去のバージョンでは、スタックトレースロジックの内部リファクタリング (追跡バグ)に取り組み、コードを簡素化し、スタックトレースシリアル化のパフォーマンスを最大30%向上させました。

JavaScript言語機能

Intl.NumberFormat APIは、このリリースでロケール対応の番号フォーマットに新しい機能を追加しました!コンパクトな表記、科学的表記、工学的表記、符号表示、および測定単位に対応しています。

const formatter = new Intl.NumberFormat('en', {
style: 'unit',
unit: 'meter-per-second',
});
formatter.format(299792458);
// → '299,792,458 m/s'

機能の説明を参照して詳細を確認してください。

V8 API

git log branch-heads/7.6..branch-heads/7.7 include/v8.h を使用してAPI変更のリストを取得してください。

アクティブなV8チェックアウトをお持ちの開発者は、git checkout -b 7.7 -t branch-heads/7.7 を使用してV8 v7.7の新機能を試すことができます。または、Chromeのベータチャンネルに登録して、新機能を自分で試してみることができます。