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

V8 выпуск v5.1

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

Первым шагом в процессе выпуска 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 и в скором времени попробовать новые функции самостоятельно.