ES6 und io.js

Die io.js-Entwicklung basiert auf der aktuellen Version der V8-Engine. Mit dem Bestreben, ständig die aktuellste Version der V8-Engine einzusetzen, stellen wir sicher, dass neue Funktionen der JavaScript ECMA-262 Spezifikation sowie Geschwindigkeits- und Stabilitätsverbesserungen schnell für io.js-Entwickler zu Verfügung stehen.

Die Version 3.3.1 von io.js wird mit der V8-Version 4.4.63.30 ausgeliefert, welche bereits ES6-Funktionen beinhaltet, die deutlich weiterentwickelter sind, als jene der Version 3.28.73, die in joyent/node@0.12.x enthalten sind.

Überflüssiger Startparameter --harmony

In joyent/node@0.12.x (V8 3.28+) aktiviert der Startparameter --harmony alle ES6-Funktionen auf einmal. Enthalten sind alle jene Funktionen, die als completed (Fertiggestellt), staged (Auslieferungsvorbereitung) und in progress (Entwicklungsphase) gekennzeichnet sind. (Mit der Ausnahme des nonstandard/non-harmonious Ausdrucks typeof, welcher sich hinter dem Startparameter --harmony-typeof versteckt). Das bedeutet, dass einige sehr fehlerhafte oder sogar kaputte Funktionen wie proxies genauso frei verfügbar sind, wie solche Funktionen wie generators, die nur sehr wenige Fehler enthalten, wenn überhaupt. Daraus hätte sich die Best-Practice ergeben, entweder nur bestimmte Funktionen durch einzelne Startparameter verfügbar zu machen (z.B. --harmony-generators), oder einfach alle Funktionen einzuschalten, aber dann nur eine sehr restriktive Untermenge an Funktionen zu verwenden.

Anders in io.js@1.x (V8 4.1+), hier entfällt diese Komplexität: Alle "harmony"-Funktionen sind nun in logische Gruppen aufgeteilt. Diese Gruppen sind: shipping (Ausgeliefert), staged (Bereit zur Auslieferung) und in progress (Noch in Entwicklung).

Welche ES6-Funktionen sind bereits in io.js enthalten und aktiv (ohne Startparameter verwendbar)?

Eine detailliertere Liste, die dazu noch Vergleiche zu anderen Engines enthält, gibt es auf der compat-table-Projektseite.

Welche ES6-Funktionen stehen mit dem Parameter --es_staging zur Verfügung?

An welchen ES6-Funktionen wird gerade gearbeitet?

Neue Funktionen werden ständing zur V8-Engine hinzugefügt. Allgemein gesagt, werden diese erwartungsgemäß in zukünftigen io.js-Versionen verfügbar sein. Der Zeitrahmen ist noch unbekannt.

Es ist möglich alle in progress-Funktionen, der installierten io.js-Version aufzulisten. Dafür gibt es den Startparamter --v8-options. Es ist zu beachten, dass diese V8-Funktionen unvollständig oder gar kaputt sind. Es gilt: Benutzen auf eigene Gefahr!

iojs --v8-options | grep "in progress"

In meiner Infrastruktur kommt der Paramterer --harmony zum Einsatz. Ist es sinnvoll diesen Parameter zu entfernen?

Das Startparameter --harmony schaltet lediglich die staged-Funktionen ein und ist als Synonym zu --es_staging zu verstehen. Wie oben bereits beschrieben, werden hierdurch mehr oder weniger vollständige Funktionen aktiviert, die noch nicht als stabil zu bezeichnen sind. Wer auf Nummer sicher gehen will, gerade in produktiven Umgebungen, sollte ernsthaft darüber nachdenken, diesen Startparameter nicht zu verwenden, bis die benötigte Funktion in V8 standardmäßig zu Verfügung steht, und somit auch in io.js. Wird der Parameter trotzdem verwendet, muss man damit rechnen, dass künftige io.js-Aktualisierungen den eigenen Code fehlschlagen lässt, falls Funktionen der V8-Engine an den aktuellen Standard angepasst werden.

Wie erkenne ich, mit welcher V8-Version io.js ausgeliefert wurde?

io.js bietet eine einfache Möglichkeit, alle Abhängigkeiten der jeweilig installierten Version, durch das globale Objekt process aufzulisten. Durch folgenden Konsolen-Befehl kann die Version der V8-Engine ausgegeben werden:

iojs -p process.versions.v8