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

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