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

V8リリース v4.5

· 約5分
V8チーム

約6週間ごとに、リリースプロセスの一環として新しいV8のブランチを作成します。各バージョンは、ChromeがChrome Betaマイルストーンのためにブランチを切る直前にV8のGitマスターからブランチされます。本日、私たちは最新のブランチ、V8バージョン4.5を発表できることを嬉しく思います。このバージョンは、Chrome 45 Stableと連携してリリースされるまでベータ版として提供されます。V8 v4.5には開発者向けの興味深い新機能がたくさん含まれているため、数週間後のリリースに先立ち、そのハイライトの一部をプレビューします。

改善されたECMAScript 2015 (ES6)サポート

V8 v4.5は、いくつかのECMAScript 2015 (ES6)機能をサポートします。

アロー関数

アロー関数を使用すると、よりスムーズなコードを書くことができます。

const data = [0, 1, 3];
// アロー関数なしのコード
const convertedData = data.map(function(value) { return value * 2; });
console.log(convertedData);
// アロー関数を使用したコード
const convertedData = data.map(value => value * 2);
console.log(convertedData);

アロー関数のもう一つの大きな利点は、thisの静的なバインディングです。その結果、メソッド内でのコールバックの使用が大幅に簡単になります。

class MyClass {
constructor() { this.a = 'こんにちは、'; }
hello() { setInterval(() => console.log(this.a + '世界!'), 1000); }
}
const myInstance = new MyClass();
myInstance.hello();

配列/TypedArray関数

ES2015で規定されている配列およびTypedArrayの新しいすべてのメソッドが、V8 v4.5でサポートされるようになりました。これにより、配列やTypedArrayを扱う際に便利になります。追加されたメソッドの中にはArray.fromArray.ofがあります。また、各TypedArrayでほとんどのArrayメソッドを反映する方法も追加されました。

Object.assign

Object.assignにより、オブジェクトを迅速にマージおよびクローンできるようになります。

const target = { a: 'こんにちは、' };
const source = { b: '世界!' };
// オブジェクトをマージする。
Object.assign(target, source);
console.log(target.a + target.b);

この機能は機能をミックスインするためにも使用できます。

より多くのJavaScript言語機能が“最適化可能”に

V8の伝統的な最適化コンパイラーCrankshaftは、長年にわたり多くの一般的なJavaScriptパターンを最適化する優れた仕事をしてきました。ただし、JavaScript全体の言語をサポートする能力はなく、try/catchwithのような一部の言語機能を関数内で使用すると、その関数を最適化できない状態になってしまいます。その場合、V8はより遅いベースラインコンパイラーにフォールバックしなければなりませんでした。

V8の新しい最適化コンパイラーTurboFanの設計目標の1つは、ECMAScript 2015の機能を含むJavaScript全体を最終的に最適化できるようにすることです。V8 v4.5では、Crankshaftでサポートされていないいくつかの言語機能を最適化するためにTurboFanの使用が開始されました。これには、for-ofclasswith、および算出プロパティ名が含まれます。

以下はfor-ofを使用したコードの例で、TurboFanによってコンパイルできるようになったものです:

const sequence = ['最初', '二番目', '三番目'];
for (const value of sequence) {
// このスコープは最適化可能です。
const object = {a: 'こんにちは、', b: '世界!', c: value};
console.log(object.a + object.b + object.c);
}

これらの言語機能を使用する関数は当初、Crankshaftでコンパイルされた他のコードと同じピークパフォーマンスには達しませんが、TurboFanは現在のベースラインコンパイラーをはるかに超える速度向上を可能にします。さらに良いことに、TurboFanのための最適化を引き続き開発することで、性能は急速に向上し続けるでしょう。

V8 API

API変更の概要についてはぜひご覧ください。この文書は主要なリリースから数週間後に定期的に更新されます。

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