ES6 en io.js

io.js está construido sobre versiones modernas de V8. Manteniéndolo actualizado con las últimas versiones de este motor nos aseguramos que las nuevas funcionalidades de la especificación ECMA-262 de JavaScript estén disponibles para los desarrolladores de io.js de manera oportuna, así como también las mejoras de rendimiento y estabilidad.

La versión 3.3.1 de io.js utiliza V8 4.4.63.30, que incluye las mejoras de ES6 superando claramente la versión 3.28.73 que será incluida con joyent/node@0.12.x.

No más --harmony flag

En joyent/node@0.12.x (V8 3.26), la flag --harmony habilita todas las mejoras completed, staged e in progress de ES6, en una sola (con la excepción de los semánticos non-standard/non-harmonious para typeof el cuál está oculto bajo --harmony-typeof). Esto significaba que algunas mejoras experimentales o incluso dañadas, como proxies, estaban tan fácilmente disponibles para los desarrolladores como generators, lo cual traía muy pocos o casi nulos problemas conocidos. Así, era mejor práctica habilitar sólo algunas mejoras usando flags harmony específicas (ej. --harmony-generators), o simplemente habilitarlas todas y después restringirlas una por una.

Con io.js@1.x (V8 4.1+), toda la complejidad queda eliminada. Todas las mejoras harmony están ahora equitativamente separadas en tres grupos: shipping, staged e in progress.

Todas las mejoras shipping, las que el equipo de V8 consideran estables, como generators, templates, nuevos métodos de string y muchas más están disponibles por defecto en io.js y NO requieren ningún tipo de configuración.

¿Qué características de ES6 vienen con io.js por defecto (no es necesaria la runtime flag)?

Puedes ver una lista más detallada, incluyendo la comparación con otros motores, en la página del proyecto compat-table.

¿Qué funcionales de ES6 están detrás de la --es_staging flag?

¿Qué características de ES6 están en progreso?

Constantemente se van añadiendo nuevas características al motor V8. En general, puedes espera que llegen en un futuro a una publicación de io.js, aunque el tiempo exacto es desconocido.

Puedes listar todas las características que estan en progreso en cada publicación de io.js usando grep a través del argumento --v8-options. Por favor ten encuenta que son características aún no terminadas y posiblemente rotas de V8, así que usalas bajo tu responsabilidad:

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

Tengo mi infraestructura configurada para hacer uso de la --harmony flag ¿Debo eliminarla?

El comportamiento actual de la --harmony flag en io.js es el de sólo activar funcionalidades staged. Después de todo, es ahora un sinónimo de --es_staging. Como se mencionó anteriormente, estas son funcionalidades completadas que no han sido consideradas estables todavía. Si quieres ir por lo seguro, especialmente en entornos de producción, considera no utilizar esta flag hasta que venga por defecto en V8 y, consecuentemente, en io.js. Si la mantienes activada, debes prepararte para que actualizaciones futuras de io.js rompan tu código en caso que V8 cambie su semántica a siguiendo de forma mas cercana el estándar.

¿Cómo determino la versión de V8 que se distribuye con una versión en particular de io.js?

io.js provee una manera sencilla de listar todas las dependencias y respectivas versiones que se distribuyen con un binario específico, a través del objeto global process. En el caso del motor V8, escribe lo siguiente en tu terminal para obtener su versión:

iojs -p process.versions.v8