ES6 no io.js

O io.js é compilado com versões modernas do V8. Mantendo-nos atualizados com a última versão deste motor, garantimos que as novas funcionalidades da especificação JavaScript ECMA-262 são disponibilizadas rapidamente aos programadores io.js, bem como as melhorias de performance e estabilidade.

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

Chega de --harmony flag

No joyent/node@0.12.x (V8 3.26), a flag de runtime --harmony ativava todas as funcionalidades entregues, em teste, e em desenvolvimento do ES6, em simultâneo e de uma só vez (com a exceção da não-padrão/não-harmoniosa semântica para typeof que estava escondida sob --harmony-typeof). Isto significava que algumas funcionalidades com bugs ou até mesmo funcionalidades partidas como os proxies, estavam imediatamente disponíveis aos programadores, tal como os generators, que tinham poucos ou nenhum problema conhecido. Como tal, era boa prática apenas habilitar algumas funcionalidades utilizando flags específicas de runtime harmony (p.e --harmony-generators), ou simplesmente habilitar todas as funcionalidades e usar apenas um subconjunto específico.

Com o io.js (V8 4.1+), toda essa complexidade deixa de existir. Todas as funcionalidades harmony estão agora logicamente separadas em três grupos: entregues, em testes e em desenvolvimento:

Que funcionalidades ES6 estão disponíveis por omissão no io.js (não necessitam de flag runtime)?

Podem consultar uma lista mais detalhada, incluíndo a comparação com outros motores na tabela de compatibilidades.

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

Tenho a minha infraestrutura configurada para usar a flag --harmony. Devo removê-la?

O comportamento atual da flag --harmony no io.js é ativar funcionalidades em teste apenas. Afinal de contas, é agora um sinónimo de --es_staging. Como foi mencionado em cima, estas são funcionalidades desenvolvidas que ainda não foram consideradas estáveis. Se quiser jogar pelo seguro, especialmente em ambientes de produção, considere remover esta flag de runtime até sair por omissão no V8 e consequentemente no io.js. Se mantiver esta flag ativa, deverá estar preparado para que atualizações no io.js possam partir o seu código se o V8 mudar a semântica para estar mais de acordo com a especificação.

Como descubro a versão do V8 que vem com uma versão específica do io.js?

O io.js disponibiliza uma maneira simples de listar todas as dependências e respetivas versões que vêm incluídas num binário específico através do objecto global process. No caso do motor V8, basta escrever o seguinte no terminal para obter a versão do mesmo:

iojs -p process.versions.v8