V8リリースv5.7
毎6週間ごとに、私たちはリリースプロセスの一環としてV8の新しいブランチを作成しています。各バージョンは、Chromeのベータマイルストーン直前にV8のGitマスターから分岐されます。本日、私たちは最新のブランチV8バージョン5.7を発表します。このブランチは数週間後にChrome 57 Stableと調整してリリースされるまでベータ版となります。V8 5.7には、開発者向けの多くの便利な機能が詰まっています。このリリースを前に、一部のハイライトをご紹介します。
パフォーマンスの改善
ネイティブasync関数の性能がPromiseと同等
Async関数は、Promiseを使用したコードとほぼ同じくらい高速になりました。当チームのmicrobenchmarksによると、Async関数の実行性能は4倍に向上しました。同期間中、Promise全体の性能も倍増しました。
ES2015の継続的な改善
V8は新しい言語機能を性能コストなしで使えるように、ES2015言語機能を高速化し続けています。スプレッド演算子、分割代入、ジェネレーターは現在ではその単純なES5相当とほぼ同等の速度です。
RegExpが15%高速化
RegExp関数を自己ホスト型のJavaScript実装からTurboFanのコード生成アーキテクチャに結び付けた実装に移行することで、RegExp全体のパフォーマンスが約15%向上しました。詳細はこちらのブログ記事をご覧ください。
JavaScript言語機能
ECMAScript標準ライブラリへの最近の追加機能のいくつかがこのリリースに含まれています。2つのStringメソッド、padStart
とpadEnd
は便利な文字列フォーマット機能を提供し、Intl.DateTimeFormat.prototype.formatToParts
はロケールに応じた日付/時刻のフォーマットをカスタマイズする能力を提供します。
WebAssembly有効化
Chrome 57(V8 v5.7を含む)は、デフォルトでWebAssemblyを有効化する最初のリリースとなります。詳細については、webassembly.orgの開始ガイドおよびMDNのAPIドキュメントをご覧ください。
V8 APIへの追加
私たちのAPI変更の概要をご覧ください。このドキュメントは主要リリースの数週間後に定期的に更新されます。アクティブなV8チェックアウトを持つ開発者は、git checkout -b 5.7 -t branch-heads/5.7
を使用してV8 v5.7の新機能を試すことができます。または、Chromeのベータチャンネルを購読し、間もなく新機能をお試しください。
PromiseHook
このC++ APIにより、Promiseのライフサイクルを追跡するプロファイリングコードの実装が可能になります。これにより、Nodeの新しいAsyncHook APIが実現され、非同期コンテキスト伝播を構築できます。
PromiseHook
APIは次の4つのライフサイクルフックを提供します:init、resolve、before、after。新しいPromiseが作成されるとinitフックが実行され、Promiseが解決されるとresolveフックが実行されます。pre & postフックはPromiseReactionJob
の直前と直後に実行されます。詳細については、追跡問題および設計ドキュメントをご覧ください。