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

V8リリース v7.3

· 約4分
Clemens Backes, コンパイラ担当

6週間ごとに、私たちはV8リリースプロセスの一環としてV8の新しいブランチを作成します。各バージョンはV8のGitマスターから直接Chrome Betaのマイルストーン直前に派生しています。本日、最新のブランチV8バージョン7.3を発表します。このバージョンは数週間後にChrome 73 Stableと連携してリリースされるまでベータ段階です。V8 v7.3は、開発者向けの魅力的な機能が満載です。この投稿では、リリースを待ついくつかのハイライトを紹介します。

非同期スタックトレース

--async-stack-tracesフラグをデフォルトで有効にします。ゼロコスト非同期スタックトレースにより、重い非同期コードを使用している場合でも通常エラーが検出された際にログファイルやサービスへ送られるerror.stackプロパティが問題の原因に関する洞察を提供します。

awaitの高速化

上記の--async-stack-tracesフラグに関連して、--harmony-await-optimizationフラグもデフォルトで有効にします。これは--async-stack-tracesの前提となる機能です。詳細については高速非同期関数とプロミスをご覧ください。

WebAssemblyの高速起動

Liftoffの内部最適化により、生成されたコードの品質を損なうことなくWebAssemblyのコンパイル速度を大幅に向上させました。ほとんどのワークロードでは、コンパイル時間が15〜25%短縮されました。

Epic ZenGardenデモのLiftoffコンパイル時間](/_img/v8-release-73/liftoff-epic.svg)

JavaScript言語機能

V8 v7.3にはいくつかの新しいJavaScript言語機能が含まれています。

Object.fromEntries

Object.entries APIはこれまでも知られていますが:

const object = { x: 42, y: 50 };
const entries = Object.entries(object);
// → [['x', 42], ['y', 50]]

残念ながら、entriesの結果から同等のオブジェクトに戻る簡単な方法はありませんでした…今まで!V8 v7.3はObject.fromEntries()をサポートしており、新しいビルトインAPIでObject.entriesの逆を行います:

const result = Object.fromEntries(entries);
// → { x: 42, y: 50 }

詳細情報や使用例についてはObject.fromEntriesの機能説明をご覧ください。

String.prototype.matchAll

グローバル(g)またはスティッキー(y)正規表現の一般的な使用例は、文字列に適用し、すべての一致を反復処理することです。新しいString.prototype.matchAll APIを使用すると、特にキャプチャグループを持つ正規表現の場合、これが以前より簡単になりました:

const string = 'Favorite GitHub repos: tc39/ecma262 v8/v8.dev';
const regex = /\b(?<owner>[a-z0-9]+)\/(?<repo>[a-z0-9\.]+)\b/g;

for (const match of string.matchAll(regex)) {
console.log(`${match[0]} at ${match.index} with '${match.input}'`);
console.log(`→ owner: ${match.groups.owner}`);
console.log(`→ repo: ${match.groups.repo}`);
}

// 出力:
//
// tc39/ecma262 at 23 with 'Favorite GitHub repos: tc39/ecma262 v8/v8.dev'
// → owner: tc39
// → repo: ecma262
// v8/v8.dev at 36 with 'Favorite GitHub repos: tc39/ecma262 v8/v8.dev'
// → owner: v8
// → repo: v8.dev

詳細についてはString.prototype.matchAllの機能説明をご覧ください。

Atomics.notify

Atomics.wakeAtomics.notifyに名前が変更され、最近の仕様変更と一致しました。

V8 API

git log branch-heads/7.2..branch-heads/7.3 include/v8.hを使用してAPI変更の一覧を取得してください。

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