ES6 no io.js

O io.js é construído usando versões modernas do V8. Mantendo-nos atualizados com as últimas versões desta engine, garantimos que novas funcionalidades da especificação JavaScript ECMA-262 são trazidas para desenvolvedores io.js rapidamente, além de manter performance continuada e melhorias de estabilidade.

A versão 3.3.1 do io.js vem com o V8 4.4.63.30, que inclui funcionalidades do ES6 bem além da versão 3.26.33 que vem com o joyent/node@0.12.x.

Não mais flag --harmony

No joyent/node@0.12.x (V8 3.26), a flag de runtime --harmony habilitava todas funcionalidades ES6 completas, em teste e em progresso juntas, de uma vez só (com a exceção de semânticas não padrão/não harmoniosas para typeof que estavam escondidas sob --harmony-typeof). Isto significava que algumas funcionalidades realmente bugadas ou mesmo quebradas como os proxies estavam prontamente disponíveis para desenvolvedores como os generators, que tinham poucos ou mesmo nenhuma issue conhecida. Portanto, era uma boa prática ou habilitar apenas certas funcionalidades usando flags de runtime harmony para funcionalidades específicas (por ex. --harmony-generators), ou simplesmente habilitar tudo e depois usar apenas um subconjunto restrito.

Com o io.js (V8 4.1+), toda esta complexidade vai embora. Todas as funcionalidades harmony agora estão logicamente divididas em três grupos para funcionalidades entregues, sob testes e em progresso:

Que funcionalidades ES6 estão disponíveis por padrão no io.js (sem requerer flag)?

Você pode ver uma lista mais detalhada, incluindo uma comparação com outras engines, no página do projeto da tabela de compatibilidade.

Que funcionalidades ES6 estão sob a flag --es_staging?

Eu tenho minha própria infraestrutura configurada para usar a flag --harmony. Devo removê-la?

O comportamento atual da flag --harmony no io.js é para habilitar funcionalidades em testes apenas. Além disso, ela é agora um sinônimo de --es_staging. Como mencionado acima, estas são funcionalidades completas que não foram consideradas estáveis ainda. Se você quiser manter-se seguro, especialmente em ambientes de produção, considere remover esta flag de runtime até que ela seja disponibilizada por padrão no V8 e, consequentemente, no io.js. Se você mantê-la habilitada, você deve estar preparado para que futuras atualizações do io.js quebrem seu código se o V8 alterar suas semânticas para ter uma maior conformidade com a especificação.

Como posso saber que versão do V8 está disponível com uma versão específica do io.js?

O io.js fornece uma maneira simples de listar todas as dependências e suas respectivas versões que são disponibilizadas em um binário através do objeto global process. No caso da engine V8, digite o seguinte em seu terminal para obter sua versão:

iojs -p process.versions.v8