Перейти к основному содержимому

Релиз V8 версии v4.5

· 3 мин. чтения
Команда V8

Примерно каждые шесть недель мы создаем новую ветку V8 в рамках нашего процесса релиза. Каждая версия создается из основной ветки V8 в Git непосредственно перед созданием ветки Chrome для этапа Chrome Beta. Сегодня мы рады представить нашу новейшую ветвь, 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();

Функции Array/TypedArray

Все новые методы на массивы и типизированные массивы, которые указаны в ES2015, теперь поддерживаются в V8 v4.5. Они делают работу с массивами и типизированными массивами более удобной. Среди добавленных методов — Array.from и Array.of. Также были добавлены методы, которые зеркально отображают большинство методов 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/catch и with — мешало ее оптимизации. V8 приходилось возвращаться к своему более медленному базовому компилятору для этой функции.

Одна из целей разработки нового оптимизирующего компилятора V8, TurboFan, — это стать в конечном итоге способным оптимизировать весь JavaScript, включая функции ECMAScript 2015. В V8 v4.5 мы начали использовать TurboFan для оптимизации некоторых функций языка, которые не поддерживаются Crankshaft: for-of, class, with и вычисляемые имена свойств.

Вот пример кода, который использует '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.

API V8

Пожалуйста, ознакомьтесь с нашим резюме изменений API. Этот документ регулярно обновляется через несколько недель после каждого крупного релиза.

Разработчики с активным репозиторием V8 могут использовать git checkout -b 4.5 -t branch-heads/4.5, чтобы попробовать новые функции в V8 v4.5. Кроме того, можно подписаться на бета-канал Chrome и попробовать новые функции самостоятельно в ближайшее время.