Es hat lange gedauert, bis es fertig war, aber ECMAScript 6, die nächste Version von JavaScript, ist endlich Realität geworden
Die nächsten Abschnitte erklären Konzepte, die in der Welt von ES6 wichtig sind.
TC39 (Ecma Technical Committee 39) ist das Komitee, das JavaScript weiterentwickelt. Seine Mitglieder sind Unternehmen (unter anderem alle großen Browseranbieter). TC39 trifft sich regelmäßig, seine Sitzungen werden von Delegierten besucht, die die Mitglieder entsenden, und von eingeladenen Experten. Protokolle der Sitzungen sind online verfügbar und geben Ihnen eine gute Vorstellung davon, wie TC39 arbeitet.
Der Entwurfsprozess von ECMAScript 6 dreht sich um Vorschläge für Features. Vorschläge werden oft durch Anregungen aus der Entwicklergemeinschaft ausgelöst. Um ein „Design by Committee“ zu vermeiden, werden Vorschläge von Champions (1–2 Komiteemitgliedern) betreut.
Ein Vorschlag durchläuft die folgenden Schritte, bevor er zu einem Standard wird
[Quelle dieses Abschnitts: „Der Harmony-Prozess“ von David Herman.]
Ab ECMAScript 2016 (ES7) wird TC39 Releases zeitlich begrenzen. Jedes Jahr wird eine neue Version von ECMAScript veröffentlicht, mit allen Features, die zu diesem Zeitpunkt fertig sind. Das bedeutet, dass ECMAScript-Versionen von nun an relativ kleine Upgrades sein werden. Weitere Informationen über den neuen Prozess, einschließlich abgeschlossener und kommender Feature-Vorschläge, finden Sie im GitHub-Repository ecma262.
JavaScript ist das, was jeder die Sprache nennt, aber dieser Name ist eine Marke (von Oracle, das die Marke von Sun geerbt hat). Daher ist der offizielle Name von JavaScript ECMAScript. Dieser Name stammt von der Standardisierungsorganisation Ecma, die den Sprachstandard verwaltet. Seit der Einführung von ECMAScript hat sich der Name der Organisation von dem Akronym „ECMA“ zum vollen Namen „Ecma“ geändert.
Versionen von JavaScript werden durch Spezifikationen definiert, die den offiziellen Namen der Sprache tragen. Daher ist die erste Standardversion von JavaScript ECMAScript 1, was kurz für „ECMAScript Language Specification, Edition 1“ ist. ECMAScript x wird oft als ESx abgekürzt.
Die Stakeholder im Web sind
Diese Gruppen haben bemerkenswert wenig Kontrolle übereinander. Deshalb ist das Upgraden einer Websprache so herausfordernd.
Einerseits ist das Upgraden von Engines herausfordernd, da sie mit allen möglichen Codes im Web konfrontiert sind, von denen einige sehr alt sind. Außerdem möchten Sie, dass Engine-Upgrades automatisch und für Benutzer unbemerkt erfolgen. Daher ist ES6 eine Obermenge von ES5, nichts wird entfernt1. ES6 aktualisiert die Sprache, ohne Versionen oder Modi einzuführen. Es schafft es sogar, „strict mode“ zum De-facto-Standard zu machen (über Module), ohne den Graben zwischen ihm und „sloppy mode“ zu vergrößern. Der gewählte Ansatz heißt „One JavaScript“ und wird in einem separaten Kapitel erklärt.
Andererseits ist das Upgraden von Code herausfordernd, da Ihr Code auf allen JavaScript-Engines laufen muss, die von Ihrer Zielgruppe verwendet werden. Daher haben Sie nur zwei Möglichkeiten, wenn Sie ES6 in Ihrem Code verwenden möchten: Sie können entweder warten, bis niemand in Ihrer Zielgruppe mehr eine Nicht-ES6-Engine verwendet. Das wird Jahre dauern; Mainstream-Zielgruppen waren im Juni 2015 bezüglich ES5 dort, wo ES6 standardisiert wurde. Und ES5 wurde im Dezember 2009 standardisiert! Oder Sie können ES6 nach ES5 kompilieren und es jetzt verwenden. Weitere Informationen dazu finden Sie im Buch „Setting up ES6“, das online kostenlos gelesen werden kann.
Ziele und Anforderungen kollidieren im Design von ES6
Die ursprüngliche Projektseite für Harmony/ES6 nennt mehrere Ziele. In den folgenden Unterabschnitten werfe ich einen Blick auf einige davon.
Das Ziel ist: Eine bessere Sprache zum Schreiben
Unterziel (i) erkennt an, dass in JavaScript geschriebene Anwendungen riesig geworden sind. Ein wichtiges ES6-Feature, das dieses Ziel erfüllt, sind eingebaute Module.
Module sind auch eine Antwort auf Ziel (ii). Nebenbei bemerkt, ist das DOM notorisch schwierig in JavaScript zu implementieren. ES6 Proxies sollten hier helfen.
Mehrere Features wurden hauptsächlich hinzugefügt, um die Kompilierung nach JavaScript zu erleichtern. Zwei Beispiele sind
Math.fround() – Rundung von Zahlen auf 32-Bit-FloatsMath.imul() – Multiplikation von zwei 32-Bit-IntegersSie sind beide nützlich, um z.B. C/C++ über Emscripten nach JavaScript zu kompilieren.
Das Ziel ist: Interoperabilität verbessern, De-facto-Standards, wo immer möglich, übernehmen.
Beispiele sind
Das Ziel ist: Versionierung so einfach und linear wie möglich zu halten.
Wie bereits erwähnt, vermeidet ES6 die Versionierung über „One JavaScript“: In einer ES6-Codebasis ist alles ES6, es gibt keine Teile, die ES5-spezifisch sind.
Die Einführung der ES6-Spezifikation listet alle neuen Features auf
Einige der [ECMAScript 6] wichtigsten Verbesserungen sind Module, Klassendeklarationen, lexikalischer Block-Scoping, Iteratoren und Generatoren, Promises für asynchrone Programmierung, Destrukturierungs-Patterns und echte Tail Calls. Die ECMAScript-Bibliothek von Built-ins wurde erweitert, um zusätzliche Datenabstraktionen wie Maps, Sets und Arrays von binären numerischen Werten zu unterstützen, sowie zusätzliche Unterstützung für Unicode-Zusatzzeichen in Strings und regulären Ausdrücken. Die Built-ins sind nun durch Subclassing erweiterbar.
Es gibt drei Hauptkategorien von Features
Dieser Abschnitt beschreibt, was auf dem Weg zu ECMAScript 6 geschah.
Die Arbeit an ES4 begann nach der Veröffentlichung von ES3 im Jahr 1999. Im Jahr 2003 wurde ein Zwischenbericht veröffentlicht, danach ruhten die Arbeiten an ES4. Teilmengen der im Zwischenbericht beschriebenen Sprache wurden von Adobe (in ActionScript) und von Microsoft (in JScript.NET) implementiert.
Im Februar 2005 stellte Jesse James Garrett fest, dass eine Kombination von Techniken für die Implementierung von dynamischen Frontend-Anwendungen in JavaScript populär geworden war. Er nannte diese Techniken Ajax. Ajax ermöglichte eine völlig neue Klasse von Webanwendungen und führte zu einem Aufschwung des Interesses an JavaScript.
Das mag dazu beigetragen haben, dass TC39 im Herbst 2005 die Arbeit an ES4 wieder aufnahm. Sie basierten ES4 auf ES3, dem interimistischen ES4-Bericht und Erfahrungen mit ActionScript und JScript.NET.
Es gab nun zwei Gruppen, die an zukünftigen ECMAScript-Versionen arbeiteten
Die beiden Gruppen waren sich über die Zukunft von JavaScript uneinig, und die Spannungen zwischen ihnen nahmen weiter zu.
Ende Juli 2008 fand eine TC39-Sitzung in Oslo statt, deren Ergebnis von Brendan Eich wie folgt beschrieben wurde
Es ist kein Geheimnis, dass der JavaScript-Standardisierungsausschuss, Ecma’s Technical Committee 39, seit über einem Jahr gespalten ist, wobei einige Mitglieder ES4 […] befürworten und andere ES3.1 […] vertraten. Nun kann ich berichten, die Spaltung ist vorbei.
Die bei der Sitzung ausgearbeitete Vereinbarung bestand aus vier Punkten
Somit: Die ES4-Gruppe stimmte zu, Harmony weniger radikal als ES4 zu gestalten, der Rest von TC39 stimmte zu, die Dinge weiter voranzutreiben.
Die nächsten Versionen von ECMAScript sind