V8 выпуск v5.1
Первым шагом в процессе выпуска V8 является создание новой ветки из главной ветки Git непосредственно перед ветвлением Chromium для этапа Chrome Beta (примерно каждые шесть недель). Наша новейшая ветка выпуска — V8 v5.1, которая останется в бета-версии, пока мы не выпустим стабильную сборку вместе с Chrome 51 Stable. Вот основные особенности версии V8, предназначенные для разработчиков.
Улучшенная поддержка ECMAScript
V8 v5.1 содержит ряд изменений, направленных на соответствие черновой спецификации ES2017.
Symbol.species
Методы массива, такие как Array.prototype.map
, создают экземпляры подкласса в качестве их результата, с возможностью настроить это путем изменения Symbol.species
. Аналогичные изменения внесены в другие встроенные классы.
Настройка instanceof
Конструкторы могут реализовывать собственный метод Symbol.hasInstance
, который переопределяет стандартное поведение.
Завершение итератора
Итераторы, созданные в рамках цикла for
-of
(или другой встроенной итерации, такой как оператор spread), теперь проверяются на наличие метода завершения, который вызывается, если цикл завершается преждевременно. Это можно использовать для очистки после завершения итерации.
Метод exec
в подклассах RegExp
Подклассы RegExp могут переопределять метод exec
, чтобы изменять только основной алгоритм сопоставления, с гарантией вызова этого метода высокоуровневыми функциями, такими как String.prototype.replace
.
Вывод имени функции
Имена функций, выводимые для функциональных выражений, теперь обычно становятся доступными через свойство name
функций, в соответствии с формализацией этих правил в ES2015. Это может изменить существующие трассировки стека и предоставить другие имена, чем в предыдущих версиях V8. Также это дает полезные имена свойствам и методам с вычисляемыми именами свойств:
class Container {
...
[Symbol.iterator]() { ... }
...
}
const c = new Container;
console.log(c[Symbol.iterator].name);
// → '[Symbol.iterator]'
Array.prototype.values
Аналогично другим типам коллекций, метод values
в Array
возвращает итератор по содержимому массива.
Улучшения производительности
V8 v5.1 также предлагает несколько заметных улучшений производительности следующих функций JavaScript:
- Выполнение циклов, таких как
for
-in
Object.assign
- Инициализация
Promise
иRegExp
- Вызов
Object.prototype.hasOwnProperty
Math.floor
,Math.round
, иMath.ceil
Array.prototype.push
Object.keys
Array.prototype.join
иArray.prototype.toString
- Разворачивание повторяющихся строк, например
'.'.repeat(1000)
WebAssembly (Wasm)
V8 v5.1 имеет предварительную поддержку WebAssembly. Вы можете включить ее с помощью флага --expose_wasm
в d8
. Или вы можете попробовать демо Wasm с Chrome 51 (Beta Channel).
Память
V8 реализовал дополнительные этапы Orinoco:
- Параллельная эвакуация молодого поколения
- Масштабируемые наборы памяти
- Черное выделение памяти
Эффект — снижение задержек и потребления памяти в критические моменты.
API V8
Пожалуйста, ознакомьтесь с нашим резюме изменений API. Этот документ регулярно обновляется через несколько недель после каждого крупного выпуска.
Разработчики с активным репозиторием V8 могут использовать команду git checkout -b 5.1 -t branch-heads/5.1
, чтобы экспериментировать с новыми функциями V8 v5.1. Или вы можете подписаться на бета-канал Chrome и в скором времени попробовать новые функции самостоятельно.