ECMAScript 5 darf man spätestens seit dem Erscheinen des Internet Explorer 9 getrost als die aktuelle, tatsächlich benutzbare Version von JavaScript bezeichnen. Alle neueren Versionen der verbreiteten Browser sowie auch Node.js unterstützen den neuen Standard so weit, dass sich Entwickler nur noch von ganz alten Browser-Fossilien aufgehalten fühlen dürfen. Damit wird es also höchste Eisenbahn, sich mit der nächsten Java-Script-Version, ECMAScript 6 (auch Harmony genannt) zu befassen. Dieser Artikel ist der Auftakt zu einer Serie, die der Reihe nach der einzelnen ES6-Features unter die Lupe nimmt, sobald sie in mindestens einem Browser vernünftig implementiert sind. Dieser Beitrag betrachtet zunächst nur das Drumherum; richtig technisch wird es erst im nächsten Teil.

Geschichtlicher Überblick

Wie in der Artikelserie zu ECMAScript 5 beschrieben, handelt es sich bei ES5 um ein ein eher vorsichtiges Update, bei dem die Wahrung der Abwärtskompatibilität über allem steht. Dies ging naturgemäß so manchen Entwickler nicht weit genug und so wurde gefordert, man möge doch bitte die große Axt herausholen und JavaScript von Grund auf reformieren. Das ist allerdings nicht ganz so einfach wie es sich anhört. Schon Version 4 von ECMAScript sollte mit allerlei neuen Features aufwarten, doch zwischen den verschiedenen Interessengruppen kam es nicht zur Einigung. Nach Meinung Einiger uferte das Updatepaket aus und man konnte sich nicht darüber verständigen, wie weit und wie schnell man die Entwicklung vorantreiben sollte.

Als klar wurde, dass es sehr Unterschiedliche Auffassungen über die Zukunft von ECMAScript gab, schwiegen sich die an der Arbeitsgruppe beteiligten Partien zunächst ein Jahr lang gegenseitig an. Da sich aber auch dieser Zustand nicht als besonders vielversprechend heraussetellte, einigte man sich schließlich darauf, die Entwicklung der Sprache in kleineren Schritten voranzutreiben. Zunächst wurde mit ECMAScript 5 die Sprache vor allem ausgemistet. Die wenigen neuen Features waren entweder schon praxiserprobt (z.B. Function.prototype.bind) oder wurden mit viel Mühe so konzipiert, dass sie unter keinen Umständen mit bestehenden Scripts im Web kollidieren konnten (z.B. Strict Mode, Objekterweiterungen).

Mit ES5 wurde ein Fundament gelegt, aus das zukünftige Versionen der Sprache aufsetzen konnten, was mit ES6 nun langsam Realität wird. Zwar kommt die Anzahl der Neuerungen für die sechste Version der Sprache nicht an das heran, was mit ES4 geplant war, aber für Web-Verhältnisse kann sich der Umfang des Gebotenen durchaus sehen lassen.

Ein Rüstprogramm für JavaScript

ES6 ist ein vergleichsweise großes Rüstprogramm für JavaScript. Das Standardisierungskomitee um Brendan Eich war teilweise durchaus willens, auch radikalere Umbauten vorzunehmen und so zum Beispiel Köpfe von Kontrollstrukturen ohne Klammern zuzulassen:

if foo > 42 {
    bar++;
}

Obwohl diese eine Änderung aller Voraussicht nach nun nicht den Weg in den Standard finden wird, demonstriert sie doch sehr schön die Geisteshaltung, mit der an das Projekt ES6 herangegangen wurde: JavaScript sollte gründlich um- und aufgebaut werden! Letztlich sind es wesentlich mehr Aus- als Umbauten geworden; bestehende Scripts samt und sonders nicht mehr lauffähig zu halten, war dann doch etwas viel verlangt. Die komplette Liste der Features, die sich (ziemlich sehr) sicher im neuen Standard wiederfinden werden gibt es im ECMAScript-Wiki. Einige Highlights:

Wie immer bei Webstandards müssen wir natürlich auch das, was auf dem Papier steht, mit dem vergleichen, was in der Realität existiert. Dort ist zwar noch nicht viel von dem neuen Standard angekommen, doch das was schon da ist, kann sich in aller Regel sehen lassen.

Status und Unterstützung

ECMAScript 6 selbst ist Stand Anfang 2012 noch kein fertiger Standard, aber die meisten Teile der Spezifikationen sind schon recht stabil. Anders als bei anderen Webstandards funktioniert JavaScript wirklich fast genau so, wie man es von einem Standard erwartet: erst kommt das Papier, dann folgen die Implementierungen. So gibt es verglichen mit den ebenfalls unfertigen Standards HTML5 und CSS3 bisher nur punktuelle Browserunterstützung.

In Chrome Canary, einem experimentelle Chrome-Build, findet man (Stand Anfang 2012) von allen Browsern die meisten ES6-Features. Um in den Genuss von ES6 zu kommen, muss man unter about:flags den Punkt „Enable Experimental JavaScript“ aktivieren:

Der ES6-Aktivierungs-Dialog in Chrome

Danach stehen in allen Scripts, die im Strict Mode ausgeführt werden, die in Chrome Canary vorhandenen ES6-Features zur Verfügung. Auch in anderen V8-basierten Umgebungen kommt man in den Genuss der Features von Chrome – in Node.js lassen sich verschiedene ES6-Aspekte per Startparameter aktivieren (z.B. --harmony_weakmaps für Weak Maps).

Manche JS-Engines stellen die Neuheiten auch ohne zusätzliche Arbeit bereit, so zum Beispiel der Firefox. Es ist realistischerweise davon auszugehen, dass ich all diese Details zur Aktivierung von ES6 im Wochentakt ändern werden, doch vom Experimentieren mit den neuen Features muss das nicht abhalten – denn diese selbst sind schließlich weitgehend stabil.

Problematisch ist allein die fehlende Dokumentation. Neben dem Standard selbst gibt zur Zeit so gute wie gar keine Quellen, aus denen man Infos über ES6 beziehen könnte (z.B. Browser-Sourcecode und dazugehörige Unit Tests), aber genau dafür ist schließlich diese Artikelserie da.

Wie geht es weiter?

Dieser Artikel ist der Auftakt zu einer Serie, die die neuen Features von ES6 genauer beleuchtet. Zur Vorbereitung empfehle ich, die Artikelserie zu ES5 zu lesen – es ist schließlich immer sinnvoll, den ersten Schritt vor dem Zweiten zu tun. Die Serie wird nach und nach neue Teile erhalten wenn immer mehr ES6-Features in den Browsern verfügbar werden, wobei als erstes Thema voraussichtlich Block Scope und Konstanten auf der Agenda stehen – irgendwann in den nächsten Tagen.