web-dev-qa-db-de.com

ECMAScript: Harmony/ES6 zu JavaScript-Compiler

Nach dem Lesen von Peters Artikel über JavaScript fiel mir auf

Brendan Eich sagte, Harmony möchte ein besseres Ziel für to-JavaScript-Compiler sein.

Derzeit gibt es zwei beliebte Compiler mit einigen vagen ES: Harmony Compliance:

Obwohl CoffeeScript eine gewisse Konformität aufweist, ist es nicht als ES: Harmony-Compiler konzipiert, daher ist es für diesen Zweck nicht nützlich.

Tracuer scheint sich strikt an die ES: Harmony-Spezifikation zu halten, aber ich weiß nicht, ob er beabsichtigt, ein vollständiger ES: Harmony-Compiler zu werden.

Da das Ziel darin besteht, ES6 auf ES3 herunterzukompilieren, müssten auch ES5-Funktionen unterstützt werden (und wahrscheinlich ein Wechsel zwischen ES5 nach ES3 oder ES6 nach ES3). 

  1. Gibt es derzeit andere Projekte, die darauf abzielen, einen vollständigen ES: Harmony to ES3-Compiler zu erstellen? 
  2. Ist es ratsam, einen solchen Compiler zu schreiben, in dem Wissen, dass der Standard jung/instabil/im Fluss ist.
  3. Gibt es aktuell ES5 -> ES3-Compiler?

Ich habe eine Frage auf der Traceur-Mailingliste hinterlassen.

Das Ziel eines solchen Compilers wäre die Abwärtskompatibilität mit ES3. Nicht vollständige Emulation von ES5 und ES6 in ES3. 

43
Raynos

Continuum hat die meisten relevanten Funktionen implementiert und sollte in es3-Browsern (wie älteren IEs) laufen.

8
kybernetikos

(schamloser, aber relevanter Plug unten)

Caja überarbeitet seine ES5-Unterstützung über ES5/3 und wird dies auch für die ES-Harmonie tun. Unsere Struktur würde also als eine Harmony-zu-ES3-Schicht implementiert, die für echte Harmonieimplementierungen übersprungen werden kann, und dann als separierbarer Loader, der die Sicherheitseigenschaften von caja beibehält.

Wie Traceur gehören auch Mitglieder des Caja-Teams zu TC39 (dem Ausschuss, der ES Harmony definiert).

Ich kenne die Pläne von Coffeescript nicht, aber es wurde bei Diskussionen über Harmony-Module erwähnt. Module loader wird wahrscheinlich die Möglichkeit haben, geladenen Quellcode abzufangen (über eval hooks ) und vor der Modulinitialisierung neu zu schreiben. Wenn also ein Modul in CoffeeScript geschrieben wird, könnte bei der Initialisierung ein Laufzeit-CoffeeScript-Writer aufgerufen werden Zeit. Auf diese Weise könnten Apps aus Modulen bestehen, die in mehreren Sprachen verfasst sind und sich zum Ladezeitpunkt auf Harmony übertragen lassen.

Eine Sache zu beachten ist, dass nicht alles in Harmony einfach per Übersetzung implementiert werden kann. Um beispielsweise schwache Karten korrekt zu implementieren, müssten Sie Ihren eigenen Garbage Collector in JavaScript implementieren, und selbst wenn Sie dies tun würden, würden Sie wahrscheinlich nur das Host-Objekt/das native Objektzyklusproblem erneut einführen.

14
Mike Samuel

Check out TypeScript , Microsofts neue Sprache basierend auf ES6.

11
orad

Zum Zeitpunkt der Eingabe haben wir jetzt Babel . Es lässt sich mit vielen verschiedenen Build-Tools/-Systemen integrieren und wird ES6 + transpilieren, um ältere Browser zu unterstützen (es wird nicht angegeben, auf welche Version es ausgerichtet ist, es heißt aber, dass es auf IE9 + zielt).

Zur Installation geben Sie npm install babel -g ein.

Beachten Sie, dass es ziemlich viele Abhängigkeiten gibt und dass es bei der Installation ~ 23,4 MB (2888 Dateien) ist.

4

Mascara ist wahrscheinlich das, wonach du suchst.

4
Eli Grey

Google Closure Compiler ( Github ) ist ein hervorragendes Werkzeug für die ES6-Kompilierung. Es ist ein einfaches Java-Jar, das von der Befehlszeile aus verwendet wird. Es gibt andere Optionen wie API-Dienste und GUIs, aber ich finde es am besten, ein automatisches Build-System einzurichten, das in die Java-JAR eingebunden ist. Es kann Ihren ES6-Code in ES5-kompatiblen Code umwandeln. Ich begann damit, den Code zu komprimieren und zu verschleiern, aber er kann auch die Fehlerüberprüfung und die ES6-Transpilierung durchführen, wie ich bereits erwähnte.

Beachten Sie, dass die ES6-Funktionen als experimentell gekennzeichnet sind. Ich habe jedoch vor, sie bald in der Produktion einzusetzen, da meine Tests absolut solide waren.

3

Es gibt auch https://github.com/matthewrobb/six

Sechs ist eine überlegene Sprache von JavaScript, mit der neue syntaktische Funktionen der 6. Auflage von ECMAScript über einen Transpiler in Ihren heutigen Skripts verwendet werden können.

WARNING: Noch in einem sehr frühen Zustand, mit Vorsicht vorgehen.

1
Ilia Choly

Ich bin mir nicht sicher, in welchem ​​Fall die Kompilierung auf ES3 im Vergleich zu ES5 von Vorteil wäre, da Implementierungsänderungen auf Array- und Objekthilfefunktionen beschränkt sind und die Unterstützung von ES5 ist .

Der Vollständigkeit halber ist das esnext-Projekt von Square ein weiterer ES6-zu-ES5-Compiler. Es ist eine Sammlung einer Reihe von Modulen, die verschiedene ES6-Funktionen in einem Paket enthalten. Hier ist die Liste der enthaltenen Module: https://github.com/square/esnext#available

0
Andrew Odri