×

ECMAScript 2015

JavaScript ist eine Sprache, die eine lange Entwicklung hinter sich hat. Ursprünglich wurde sie entwickelt um Webseiten interaktiver zu gestalten, z.B. durch die automatische Validierung von Formularen. Mittlerweile wird JavaScript aber auch außerhalb des Browsers eingesetzt, stark vorangetrieben durch Node.js, eine von Webbrowsern unabhängige JavaScript Laufzeitumgebung.
Das letzte große Update der Sprache, oft ECMAScript 6 oder kurz ES6 genannt, hat der Sprache eine wachsende Popularität verschafft. Doch was ist der Grund dafür und wie kann man die neuen JavaScript Features in einem bereits laufenden Projekt nutzen?

ECMAScript und Ecma International

ECMAScript ist keine eigene Sprachimplementierung, sondern eine Sprachspezifikation, die von der Ecma International entwickelt wird. Diese Organisation standardisiert seit 1961 alle Arten von Computersystemen, wobei ECMAScript einer dieser Standards ist. Die Organisation ist ein Zusammenschluss aus viele Unternehmen in der IT Branche, Mitglieder sind z. B. Google, IBM, Intel und Microsoft [1].
JavaScript ist dabei eine von mehreren Implementierungen der ECMAScript Spezifikation. Andere Implementierungen sind z.B. TypeScript und ActionScript.
Der ECMAScript-Standard wurde im Laufe der Zeit immer weiterentwickelt. Es gab mehrere große Updates, wovon ECMAScript 2015 (auch bekannt unter ES6 oder ES Harmony) das letzte dieser Art ist. In diesem Update wurden z. B. Klassen und Module eingeführt, von denen vor allem Entwickler profitieren, die vorher weniger mit JavaScript gearbeitet haben. Seitdem gibt es jährlich eine neue Version des Standards mit neuen Features, um mit dem schnellen Wandel im JavaScript-Umfeld Schritt halten zu können.
Die Entwicklung eines Standards erfolgt demokratisch. Im Folgenden schauen wir uns den TC39 Prozess an, nach dem ECMAScript weiterentwickelt wird.

Der TC39 Prozess

TC39 steht für „Technical Comittee 39“ und ist das Komitee, das verantwortlich für die Weiterentwicklung der Sprache ist. Mitglieder dieses Komitees sind z.B. alle großen Browserhersteller. Das Komitee trifft sich regelmäßig und bespricht die aktuellen Featurevorschläge und Allgemeines zu der Sprache. Entscheidungen werden durch Konsens getroffen, d.h. eine Abstimmung erfordert, dass eine Mehrheit zustimmt und niemand dagegen stimmt. Die Besprechungen selbst sind nicht öffentlich, es stehen aber die Protokolle online frei zur Verfügung [2].

Ein neuer Featurevorschlag muss fünf Phasen („Stages“) durchlaufen bevor dieser in den Standard aufgenommen wird [3]:

Stage-0: Strawman

Features in dieser Phase sind formlose Vorschläge. Vorschläge können von jedem eingereicht werden, man muss dafür kein Mitglied des TC39 sein.

Stage-1: Proposal

Für diese Phase ist ein formaler Vorschlag für das Feature nötig. Es muss anschließend ein Champion („Pate“) oder Co-Champion für dieses Feature aus dem TC39 gefunden werden. Weiterhin erforderlich sind:

  • Beispiele der Anwendung des Features
  • Grobe Beschreibung der Schnittstellen
  • Diskussion der benötigen Algorithmen, Abstraktionen und Semantik
  • Identifizierung möglicher Herausforderungen und Probleme bei der Implementierung des Features und eventuelle Konflikte mit anderen Features
  • Beispielhafte Implementierung des Features

Durch das Akzeptieren von Vorschlägen in diese Phase zeigt das Komitee, dass der Wille besteht dieses Feature genauer zu diskutieren und zu dessen Entwicklung beizutragen.

Stage-2: Draft

Hier ist eine erste Version einer formalen Spezifikation nötig. Alle wesentlichen Syntaxelemente, Schnittstellen und Semantiken müssen beschrieben sein, Platzhalter und Todos sind aber erlaubt. Der Draft kann weiter überarbeitet werden, solange er sich in Stage-2 befindet. Des Weiteren ist eine experimentelle Implementierung des Features erforderlich.
Das Komitee erwartet, dass Features in dieser Phase am Ende in den Standard aufgenommen werden.

Stage-3: Candidate

Für die dritte Phase muss der Spezifikationstext vollständig sein und von Gutachtern des TC-39 und dem ECMAScript Spezifikations-Autor akzeptiert worden sein. Weiter ist eine Implementierung erforderlich, die kompatibel zur Spezifikation ist. Weitere Änderungen an dem Feature erfolgen nur, wenn sie aufgrund Erfahrungen mit der Implementierung als kritisch angesehen werden.

Stage-4: Finished

Features in dieser Phase sind bereit für die offizielle Aufnahme in den ECMAScript-Standard. Es muss Akzeptanztests und zwei Implementierungen geben, die diese Tests bestehen. Weiterhin ist Praxiserfahrung mit beiden Implementierungen nötig und der ECMAScript Spezifikations-Autor muss den Spezifikationstext final abnehmen. Wenn dies erfolgt ist, wird das Feature in der nächsten jährlichen Spezifikationsratifizierung in den Standard aufgenommen.

Das Browser-Problem

Trotz der zunehmenden Verbreitung von JavaScript ist der Webbrowser immer noch die populärste Plattform zur Verwendung der Sprache. Dabei werden unterschiedliche JavaScript Interpreter eingesetzt, die nicht unbedingt immer denselben Featureumfang bereitstellen. Stand heute (Mai 2018) unterstützt noch kein Browser den ES2015 Standard vollständig (es fehlt hauptsächlich die Implementierung des neuen Modulsystems). Das bedeutet, dass man nicht ohne weiteres alle neuen Features des neuesten Standards in Webanwendungen verwenden kann. Als Entwickler hat man keine Möglichkeit sicherzustellen, dass die Webanwendung nur von Browsern aufgerufen wird, die den neusten Standard unterstützen.

Die Lösung: Transpiler und ein JavaScript Buildprozess

Transpiler sind Tools, die grob vereinfacht Code in eine andere Form umwandeln. In Bezug auf die Verwendung neuer JavaScript-Features heißt das, dass Code, der in einer neueren Version von JavaScript verfasst ist in Code einer älteren Version umwandelt wird. Konkret wird damit oft ES6-Code in ES3-Code umgewandelt, den alle Browser interpretieren können. Der aktuell populärste Transpiler ist Babel [4], welcher stark modularisiert ist und sich durch Plugins beliebig erweitern lässt. Ein Projekt, welches Babel verwendet, ist damit nicht unbedingt an den aktuellen ECMAScript-Standard gebunden, da für viele Features Plugins bereitstehen, auch wenn diese sich noch in einem frühen Stadium des TC39-Prozesses befinden. Beispielsweise wird aktuell schon viel von Dekoratoren Gebrauch gemacht, deren Spezifikation sich aktuell noch in Stage-2 befindet [5].
Damit können im Prinzip auch bestehende Projekte Gebrauch von den neuesten JavaScript-Features machen, ohne auf Beschränkungen durch Webbrowser Rücksicht nehmen zu müssen. Bestehender „alter“ JavaScript Code wird auch nach dem Umwandeln wie gewohnt funktionieren. Nötig für die Verwendung in einem Projekt ist allerdings die Einführung eines JavaScript-Buildprozesses, da der geschriebene Code nicht direkt an den Browser ausgeliefert wird, sondern zunächst den Umwandlungsprozess durchläuft. Sollte ein Buildprozess noch nicht etabliert sein, ist unter Umständen einiges an Arbeitsaufwand nötig, um die passenden Projektstrukturen zu schaffen.

Ausblick

ES2015 hat das Entwickeln mit JavaScript in vieler Hinsicht deutlich erleichtert, vor allem für Entwickler, die vorher wenig Berührung mit der Sprache hatten. JavaScript hatte lange Zeit (zu Recht) einen schlechten Ruf unter fachfremden Entwicklern, da das Sprachdesign und die Schnittstellen viele Merkwürdigkeiten aufwiesen. Mit ES6 wurden viele Alternativen und Verbesserungen zu alten Sprachfeatures eingeführt, die das Entwickeln mit der Sprache auch in größeren Projekten sehr komfortabel gestalten.
Durch den neuen Prozess des TC-39 kann die Sprache mittlerweile sehr gut mit den aktuellen Entwicklungen in der IT-Welt Schritt halten und wird in der Zukunft sicher nicht an Bedeutung verlieren.

Quellen

[1] ECMA International Mitglieder: https://www.ecma-international.org/memento/members.htm
[2] TC-39 Besprechungsnotizen: https://tc39.github.io/tc39-notes/
[3] Der TC-39 Prozess: https://tc39.github.io/process-document/
[4] Babel-Website: https://babeljs.io/
[5] TC39-Proposals: https://github.com/tc39/proposals

 

Von Jannis Isensee | 4.06.2018
Jannis Isensee

Softwareentwicklung