ES6 в io.js

В основе io.js стоит современная версия V8. Придерживаясь самых последних версий этого движка, мы гарантируем, что новые возможности спецификации JavaScript ECMA-262 станут доступны разработчикам io.js своевременно, а вместе с ними и улучшения, связанные с производительностью и стабильностью.

Версия io.js 3.3.1 основана на версии V8 4.4.63.30, которая включает в себя гораздо больше возможностей ES6 в отличие от версии 3.28.73, на которой основан joyent/node@0.12.x

Теперь без флага --harmony

В joyent/node@0.12.x (V8 3.28) флаг --harmony включает все completed, staged и in progress возможности ES6 одновременно, (исключая нестандартную семантику для typeof, которая скрыта за флагом --harmony-typeof). Это означает, что некоторые содержащие множество ошибок возможности, такие как прокси, одинаково доступны для разработчиков как и, например, генераторы, которые имеют очень мало или вообще не имеют известных проблем. Поэтому, хорошей практикой было бы либо включать только конкретные возможности, используя определенные флаги harmony (например --harmony-generators), или включить все, но использовать ограниченное их подмножество.

В io.js@1.x (V8 4.1+) исчезает любая сложность. Все возможности спецификации логически разделены на три группы — shipping, staged и in progress:

Какие возможности ES6 входят в io.js по умолчанию (не требуя флагов)?

Вы можете ознакомиться с более подробным списком возможностей, включая сравнение с другими движками, на странице проекта compat-table.

Какие возможности ES6 скрыты за флагом --es_staging?

Какие возможности ES6 считаются «in progress»?

Новые возможности постоянно добавляются в V8. Обычно, они появляются в будущих релизах io.js, хотя срок неизвестен.

Вы можете получить список всех возможностей в состоянии in progress для любого релиза анализируя вывод io.js с аргументом --v8-options. Имейте ввиду, что это незавершенные и, возможно, неработоспособные функции V8, так что используйте их «на свой страх и риск»:

iojs --v8-options | grep "in progress"

Моя инфраструктура работает с использованием флага --harmony. Следует ли мне удалить его?

Текущее поведение флага --harmony в io.js заключается во включении только staged возможностей. В конце концов, на данный момент это синоним флага --es_staging. Как уже упоминалось выше, существуют возможности, которые все еще не рассматриваются как стабильные. Если для вас важна надежность, особенно в случае продакшена, лучше убрать этот флаг до тех пор, пока эти возможности не будут реализованы по умолчаню в V8 и, следовательно, в io.js. Если вы оставите этот флаг, вам следует быть готовым к тому, что следующие обновления io.js могут сломать ваш код, в случае если V8 изменит семантику некоторых возможностей, для лучшего соответствия стандарту.

Как определить какая версия V8 поставляется с конкретной версией io.js?

io.js предоставляет простой способ получения списка всех входящих в конретную сборку зависимостей и их версий через глобальный объект process. В случае V8, чтобы получить его версию, введите следующую команду в терминал:

iojs -p process.versions.v8