web-dev-qa-db-fra.com

ECMAScript: Compilateur Harmony/ES6 to JavaScript

Après avoir lu L'article de Peter sur JavaScript J'ai remarqué

Brendan Eich a déclaré que l'un des objectifs d'Harmony est d'être une meilleure cible pour les compilateurs to-JavaScript.

Il existe actuellement deux compilateurs populaires avec quelques vagues ES: Harmony compliance:

Bien que CoffeeScript soit conforme, il n'est pas conçu pour être un compilateur ES: Harmony, il n'est donc pas utile à cette fin.

Tracuer semble s'en tenir plus rigoureusement à la spécification ES: Harmony mais je ne sais pas s'il a l'intention de devenir un compilateur ES: Harmony complet.

L'objectif étant de compiler ES6 à ES3, il faudrait également prendre en charge les fonctionnalités de ES5 (et probablement un commutateur pour compiler ES5 à ES3 ou ES6 à ES3). 

  1. Existe-t-il actuellement d'autres projets visant à créer un compilateur ES: Harmony to ES3 complet? 
  2. Est-il sage de commencer à écrire un tel compilateur en sachant que la norme est jeune/instable/en flux.
  3. Existe-t-il actuellement des compilateurs ES5 -> ES3?

J'ai laissé une question sur la liste de diffusion Traceur .

L'objectif d'un tel compilateur serait une compatibilité ascendante avec ES3. Pas une émulation complète de ES5 et ES6 dans ES3. 

43
Raynos

Continuum a mis en œuvre la plupart des fonctionnalités pertinentes et devrait s’exécuter dans les navigateurs es3 (comme les anciens IE).

8
kybernetikos

(fiche éhontée mais pertinente ci-dessous)

Caja retravaille son support ES5 via ES5/3 et fera de même pour l’harmonie ES. Ainsi, notre structure serait implémentée en tant que couche Harmony to ES3 pouvant être ignorée pour une implémentation réelle d'harmonie, puis en tant que chargeur séparable préservant les propriétés de sécurité qui concernent caja.

Comme Traceur, les membres de l'équipe Caja font partie de TC39 (le comité définissant ES Harmony).

Je ne connais pas les plans de Coffeescript, mais cela a été mentionné lors des discussions sur les modules Harmony. Les chargeurs de modules auront probablement la capacité d'intercepter le code source chargé (via eval hooks ) et de le réécrire avant l'initialisation du module. Ainsi, si un module est écrit en CoffeeScript, un enregistreur d'exécution CoffeeScript pourrait être appelé à l'initialisation temps. Cela permettrait aux applications d'être composées de modules écrits dans plusieurs langues et compilées jusqu'à Harmony au moment du chargement.

Une chose à noter est que tout dans Harmony ne peut pas être implémenté facilement via une traduction. Par exemple, implémenter correctement faibles cartes nécessiterait l'implémentation de votre propre collecteur de mémoire en JavaScript et même si vous le faisiez, vous ne feriez probablement que réintroduire le problème du cycle objet hôte/objet natif.

14
Mike Samuel

Check out TypeScript , le nouveau langage de Microsoft basé sur ES6.

11
orad

Au moment de la saisie, nous avons maintenant Babel . Il s'intègre à de nombreux outils/systèmes de compilation et transpilera ES6 + afin de prendre en charge les navigateurs hérités (il ne précise pas la version qu'il cible, mais indique qu'il cible IE9 +).

Pour l'installer, tapez npm install babel -g.

Notez qu'il a beaucoup de dépendances et qu'il est environ 23,4 Mo (2888 fichiers) une fois installé.

4

Mascara est probablement ce que vous cherchez.

4
Eli Grey

Compilateur Google Closure ( Github ) est un excellent outil pour la compilation ES6. C'est un simple jar Java utilisé à partir de la ligne de commande. Il existe d'autres options telles que les services d'API et les interfaces graphiques, mais j'estime qu'il était préférable de configurer un système de génération automatique lié au jar Java. Il peut transpiler votre code ES6 en code compatible ES5. J'ai commencé à l'utiliser pour compresser et obscurcir du code, mais il peut également effectuer une vérification des erreurs et la transpilation ES6 comme je l'ai mentionné.

Notez que les fonctionnalités de l'ES6 sont marquées comme expérimentales. Mais je prévois de les utiliser bientôt en production, car mes tests étaient extrêmement solides.

3
Avindra Goolcharan

Il y a aussi https://github.com/matthewrobb/six

Six est un super-langage JavaScript qui permet d’utiliser les nouvelles fonctionnalités syntaxiques de la 6e édition d’ECMAScript, via un transpiler, dans vos scripts actuels.

WARNING: Toujours très tôt, procédez avec prudence.

1
Ilia Choly

Je ne suis pas sûr de savoir dans quel cas une compilation avec ES3 serait intéressante par rapport à ES5, vu que les modifications d'implémentation sont limitées aux fonctions d'assistance sur les tableaux et les objets, et le support ES5 est si répandu .

Ainsi, pour être complet, un autre compilateur ES6 à ES5 est le projet esnext de Square. Il s'agit d'un ensemble de modules conçus pour gérer diverses fonctionnalités de l'ES6 fournies dans un seul package. Voici la liste des modules inclus: https://github.com/square/esnext#available

0
Andrew Odri