JEP 12 vorgeschlagen

Java erhält Inkubator: Die Ideenschmiede für neue Sprachen-Features

Hartmut Schlosser

© Shutterstock / KreativKolors

Java soll einen geschützten Bereich für die Entwicklung neuer Sprachfeatures erhalten. Ein neues JEP (Java Enhancement Proposal) schlägt vor, dass neue Sprachen- und VM-Features zukünftig in einem Inkubator entwickelt werden können. Dadurch sollen Innovationen auf Sprachebene beflügelt sowie das Risiko einer frühzeitigen Standardisierung eliminiert werden.

Innovationen in Java?

Wie kommen neue Features in eine Programmiersprache? In Java wird dafür üblicherweise eine Spezifikation geschrieben, die ausführlich in einer Expertengruppe diskutiert, dann durch das Exekutiv-Komitee des JCP (Java Community Process) bestätigt und schließlich in einem JDK-Release zur Verfügung gestellt wird.

Das Problem an der Sache: Die Tauglichkeit eines neuen Features hat sich noch nicht immer durch den Einsatz in echten Anwendungen bewährt. Anpassungen in späteren Releases sind zwar möglich, müssen aber schon voll die Abwärtskompatibilität berücksichtigen.

Viele Technologien haben deshalb einen speziellen Status für noch nicht ganz ausgereifte Features eingeführt. Neuerungen werden dann beispielsweise „experimentell“ genannt oder müssen sich zunächst in einem „Inkubator“ bewähren, bevor sie zur allgemeinen Nutzung empfohlen werden.

Ein solcher Inkubator soll nun auch für Java eingeführt werden – so lautet der Vorschlag von Alex Buckley im neuen JEP 12: Incubating Language and VM Features.

Ein Inkubator für Java

Ganz neu ist die Idee nicht. Bereits in JEP 11 hatten Chris Hegarty und Alex Buckley Anfang 2017 einen Inkubator für Module vorgeschlagen. Inkubator-Module sollen JDK-Release-Projekten einen Weg eröffnen, neben ihren offiziellen APIs ein Set von nicht-finalen APIs zur Verfügung zu stellen.

Explizit nicht abgedeckt waren damals aber Sprachen- oder VM-Features. Dies holt nun der neue JEP 12 nach. Demnach sollen Neuerungen an der Sprache oder der Virtual Machine zukünftig in zwei Gruppen aufgeteilt werden: erstens in permanente Features, die auch in den folgenden Java-Releases enthalten sein werden, zweitens in Inkubator-Features, die sich in zukünftigen Releases  noch verändern oder gar ganz entfernt werden könnten.

Als Motivation für den JEP wird beschrieben, dass kleinste Fehler in einer derart verbreiteten Plattform wie Java SE hohe Kosten verursachen – angefangen bei technischen Problemen über architektonische Ungenauigkeiten bis hin zu Usability-Schwächen. Durch den Inkubator können geplante Features noch vor einer Standardisierung einem breiten Publikum ausgesetzt werden, wertvolles Feedback kann gesammelt werden, Veränderungen können ohne Rücksicht auf Abwärtskompatibilität vorgenommen werden.

Dabei stellt der JEP 12 klar, dass der Inkubator keine notwendige Vorstufe für den Eingang ins offizielle JDK sein soll: Neue Sprachen- und VM-Features müssen nicht vorher den Inkubator durchlaufen haben. Auch werden keine konkreten Vorgaben gemacht, wie Inkubator-Features mit dem Feedback aus der Community umzugehen haben.

Compiler & Runtime Flags

Wohl im Scope liegt aber die Frage nach der Beziehung zwischen Inkubator-Sprachenfeatures und den erwähnten Inkubator-Modulen (JEP 11), die sich auf APIs beziehen. Während APIs in Inkubator-Modulen ausgeliefert werden, betreffen Sprachen- und VM-Features das Compiler- und Runtime-System.

So soll der Java-Compiler javac einen Flag nutzen, um Inkubator-Features zu aktivieren. Im JEP 12 wird die folgende Schreibweise vorgeschlagen:

javac Foo.java                  // Do not enable any incubating features
javac --incubating 11 Foo.java  // Enable incubating features of Java SE 11

Im JDK 12 sollen folgende Varianten erlaubt sein:

javac Foo.java                  // Do not enable any incubating features
javac --incubating 12 Foo.java  // Enable incubating features of Java SE 12

ALLOWED:
javac --release 12 --incubating 12 Foo.java
DISALLOWED:
javac --release 12 --incubating 11 Foo.java

ALLOWED:
javac --release 11 Foo.java
DISALLOWED:
javac --release 11 --incubating 11 Foo.java
javac --release 11 --incubating 12 Foo.java

Genauso soll zur Laufzeit ein Flag dem Java Launcher die Nutzung von VM Inkubator-Features erlauben:

java Foo                           // Do not enable any incubating features
java --incubating 11 Foo           // Enable incubating features of SE 11
java --incubating 11 -jar App.jar  // Enable incubating features of SE 11
java --incubating 11 -m App        // Enable incubating features of SE 11

Im JDK 12:

java Foo                           // Do not enable any incubating features
java --incubating 12 Foo           // Enable incubating features of SE 12
java --incubating 12 -jar App.jar  // Enable incubating features of SE 12
java --incubating 12 -m App        // Enable incubating features of SE 12

DISALLOWED:
java --incubating 11 Foo

Der JEP ist offiziell noch keinem Java-Release zugeordnet. Wann der Inkubator also in Betrieb genommen werden soll, ist noch nicht klar. Wie oben zu sehen ist, beziehen sich die Beispiele aber bereits auf das JDK 11. Würde sich die Java-Version 11 als Target bewahrheiten, würden wir noch in diesem Jahr in den Genuss des Inkubators kommen. Die Veröffentlichung von Java 11 ist für den September 2018 vorgesehen.

Verwandte Themen:

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Content-Stratege, IT-Redakteur, Storyteller – als Online-Teamlead bei S&S Media ist Hartmut Schlosser immer auf der Suche nach der Geschichte hinter der News. SEO und KPIs isst er zum Frühstück. Satt machen ihn kreative Aktionen, die den Leser bewegen. @hschlosser
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: