1. Über ECMAScript 6 (ES6)
Inhaltsverzeichnis
Bitte unterstützen Sie dieses Buch: kaufen Sie es (PDF, EPUB, MOBI) oder spenden Sie
(Werbung, bitte nicht blockieren.)

1. Über ECMAScript 6 (ES6)



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.

1.1 TC39 (Ecma Technical Committee 39)

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.

1.2 Wie ECMAScript 6 entworfen wurde

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.]

1.2.1 Der Entwurfsprozess nach ES6

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.

1.3 JavaScript versus ECMAScript

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.

1.4 Upgrade auf ES6

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

1.5 Ziele von ES6

Die ursprüngliche Projektseite für Harmony/ES6 nennt mehrere Ziele. In den folgenden Unterabschnitten werfe ich einen Blick auf einige davon.

1.5.1 Ziel: Eine bessere Sprache sein

Das Ziel ist: Eine bessere Sprache zum Schreiben

  1. komplexer Anwendungen;
  2. Bibliotheken (einschließlich des DOM), die von diesen Anwendungen gemeinsam genutzt werden;
  3. Code-Generatoren, die auf die neue Edition abzielen.

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

Sie sind beide nützlich, um z.B. C/C++ über Emscripten nach JavaScript zu kompilieren.

1.5.2 Ziel: Interoperabilität verbessern

Das Ziel ist: Interoperabilität verbessern, De-facto-Standards, wo immer möglich, übernehmen.

Beispiele sind

1.5.3 Ziel: Versionierung

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.

1.6 Kategorien von ES6-Features

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

1.7 Eine kurze Geschichte von ECMAScript

Dieser Abschnitt beschreibt, was auf dem Weg zu ECMAScript 6 geschah.

1.7.1 Die frühen Jahre: ECMAScript 1–3

1.7.2 ECMAScript 4 (eingestellt im Juli 2008)

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.

1.7.3 ECMAScript Harmony

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

  1. Entwicklung eines inkrementellen Upgrades von ECMAScript (das zu ECMAScript 5 wurde).
  2. Entwicklung einer neuen Hauptversion, die bescheidener sein sollte als ECMAScript 4, aber einen viel größeren Umfang haben sollte als die Version nach ECMAScript 3. Diese Version trug den Codenamen Harmony, aufgrund der Natur der Sitzung, in der sie konzipiert wurde.
  3. Features aus ECMAScript 4, die fallen gelassen würden: Pakete, Namespaces, frühe Bindung.
  4. Andere Ideen sollten in Konsens mit allen TC39 entwickelt werden.

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

Weiter: 2. FAQ: ECMAScript 6