Релиз V8 версии v4.5
Примерно каждые шесть недель мы создаем новую ветку 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 и попробовать новые функции самостоятельно в ближайшее время.