javascript compiler-construction ecmascript-harmony

ECMAScript: compilador de Harmony/ES6 a JavaScript



babel js (8)

Después de leer el artículo de Peter sobre JavaScript noté

Brendan Eich afirmó que uno de los objetivos de Harmony es ser un mejor objetivo para los compiladores de JavaScript.

Actualmente hay dos compiladores populares con algunos ES vagos : cumplimiento de Harmony :

Aunque CoffeeScript tiene algún cumplimiento, no está diseñado para ser un compilador ES: Harmony, por lo que no es útil para este fin.

Tracuer parece ajustarse más rigurosamente a la especificación ES: Harmony, pero no sé si pretende convertirse en un ES completo: el compilador Harmony.

Como el objetivo es compilar ES6 hasta ES3, también necesitaría ser compatible con las características de ES5 (y probablemente con un cambio si compila ES5 a ES3 o ES6 a ES3).

  1. ¿Existen actualmente otros proyectos que tengan como objetivo crear un compilador completo de ES: Harmony to ES3?
  2. Es conveniente comenzar a escribir un compilador de este tipo sabiendo que el estándar es joven / inestable / en flujo.
  3. ¿Hay actualmente algún compilador ES5 -> ES3?

He dejado una pregunta en la lista de correo de Traceur .

El objetivo de tal compilador sería la compatibilidad con versiones anteriores de ES3. No emulación completa de ES5 y ES6 en ES3.


(enchufe desvergonzado pero relevante a continuación)

Caja está reelaborando su soporte de ES5 a través de ES5 / 3 y hará lo mismo para la armonía de ES. Por lo tanto, nuestra estructura se implementará como una capa Harmony to ES3 que se puede omitir para implementaciones de armonía real y luego como un cargador separable que conserva las propiedades de seguridad que conciernen a la caja.

Al igual que Traceur, los miembros del equipo de Caja forman parte de TC39 (el comité que define ES Harmony).

No sé sobre los planes de Coffeescript, pero fue mencionado durante las discusiones de los módulos de Harmony. Los cargadores de módulos probablemente podrán interceptar el código fuente cargado (a través de los ganchos eval ) y volver a escribirlo antes de la inicialización del módulo, de modo que si un módulo está escrito en CoffeeScript, se podría invocar un reescritura CoffeeScript en tiempo de ejecución en el momento de la inicialización. Esto permitiría que las aplicaciones se compongan de módulos escritos en varios idiomas que se compilan hasta Harmony en el momento de la carga.

Una cosa a tener en cuenta es que no todo en Harmony se puede implementar fácilmente a través de la traducción. Por ejemplo, la implementación correcta de mapas débiles requeriría la implementación de su propio recolector de basura en JavaScript, e incluso si lo hiciera, probablemente reintroduzca el problema del objeto host / ciclo del objeto nativo.


A partir del momento de tipear, ahora tenemos a Babel . Se integra con muchas herramientas / sistemas de compilación diferentes y transpila ES6 + para admitir navegadores heredados (no indica a qué versión apunta, pero dice que se dirige a IE9 +).

Para instalarlo, escriba npm install babel -g .

Tenga en cuenta que tiene un montón de dependencias y cuando está instalado es ~ 23.4 MB (2888 archivos).


Eche un vistazo a TypeScript , el nuevo lenguaje de Microsoft basado en ES6.


No estoy seguro de en qué instancia la compilación de vuelta a ES3 sería valiosa en comparación con ES5, ya que los cambios en la implementación están limitados a las funciones array y object helper, y la compatibilidad con ES5 es tan frecuente .

Entonces, para completar, otro compilador de ES6 a ES5 es el próximo proyecto de Square. Es una colección de varios módulos diseñados para rellenar varias características ES6 proporcionadas en un paquete. Aquí está la lista de módulos incluidos: https://github.com/square/esnext#available


También hay https://github.com/matthewrobb/six

Six es un superconjunto de lenguaje de JavaScript que permite utilizar nuevas características sintácticas de la sexta edición de ECMAScript, a través de un transpiler, en sus scripts actuales.

ADVERTENCIA : Todavía en un estado muy temprano, proceda con precaución.


Continuum ha implementado la mayoría de las características relevantes y debería ejecutarse en navegadores es3 (como IEs anteriores).


Mascara es probablemente lo que estás buscando.


Google Closure Compiler ( Github ) es una gran herramienta para la compilación de ES6. Es un simple jar de Java que se usa desde la línea de comando. Hay otras opciones, como los servicios de API y las GUI, pero creo que lo mejor era configurar un sistema de compilación automático conectado al JAR de Java. Puede transpilar su código ES6 en código compatible con ES5. Empecé a usarlo para comprimir y ofuscar el código, pero también puede hacer la comprobación de errores y la transpilación ES6 como mencioné.

Tenga en cuenta que las características de ES6 están marcadas como experimentales. Pero planeo usarlos en producción pronto, ya que mis pruebas fueron sólidas.