Java soll einen Inkubator für neue Features bekommen

Der offizielle Vorschlag JEP 12 sieht eine Kennzeichnung für neue Funktionen der Programmiersprache oder JVM vor, die zwar vollständig spezifiziert und implementiert, aber nicht unbedingt dauerhafter Bestandteil von Java sind.

In Pocket speichern vorlesen Druckansicht 28 Kommentare lesen
Java soll einen Inkubator für neue Features bekommen
Lesezeit: 3 Min.

Der Leiter der Java-Spezifikation, Alex Buckley, hat das JEP 12 (JDK Enhancement Proposal) veröffentlicht. Es schlägt vor, bestimmte neue Features für Java SE (Java Standard Edition) als "incubating" zu kennzeichnen, was sich mit ausbrütend übersetzen lässt. Eine vergleichbare Bezeichnung verwendet unter anderem die Apache Software Foundation für neue Projekte unter dem Dach der Organisation, die sich zunächst noch beweisen müssen, bevor sie dort zum Top-Level-Projekt aufsteigen.

Das Ausbrüten bezieht sich im Fall von Java nicht auf den technischen Reifegrad, sondern ausschließlich auf den Einsatz der entsprechenden Funktionen. Das JEP sieht die Kennzeichnung für neue Features der Programmiersprache oder VM (Virtual Machine) vor, die vollständig spezifiziert und implementiert sind, aber nicht unbedingt dauerhafter Bestandteil von Java SE sein werden. Sie sollen Entwickler zu Rückmeldung auffordern, die schließlich darüber entscheiden, ob und in welcher Form sie Bestandteil der Plattform werden.

Wer als "incubating" bezeichnete Funktionen nutzt, kann sich somit nicht darauf verlassen, dass das Programm kompatibel zu künftigen Versionen von Java SE sein wird. Daher sieht das JEP vor, dass Entwickler explizit die Verwendung über ein Compiler-Flag aktivieren müssen. Der Einsatz funktioniert jeweils nur mit dem aktuellen JDK. In JDK 12 gilt somit Folgendes:

javac Foo.java // Kompiliert den Code ohne incubating-Features
javac --incubating 12 Foo.java // Aktiviert die incubating-Features
javac --incubating 11 Foo.java // Nicht erlaubt, da ältere JDK-Version

Auch zur Laufzeit soll das Flag die Funktionen explizit aktivieren, was wiederum für Java 12 folgendes bedeutet:

java Foo // Die incubating-Features sind deaktiviert
java --incubating 12 Foo // Aktiviert die incubating-Features
java --incubating 12 -jar App.jar // Aktiviert die incubating-Features
java --incubating 12 -m App // Aktiviert die incubating-Features
java --incubating 11 Foo // Nicht erlaubt, da ältere JDK-Version

Bereits im Herbst 2016 war das JEP 11 erschienen, dass sich ebenfalls dem Einsatz eines Inkubators widmet, wenn auch mit einer leicht anderen Ausrichtung. Darin geht es um APIs, die noch nicht vollständig fertiggestellt sind. Das aktuelle Proposal hebt als Unterschied zum vorherigen hervor, dass die im JEP 12 verwendeten Features keine syntaktische Kennzeichnung im Code benötigen. Für die Incubating APIs gilt der separate Namespace jdk.incubator.

Durch den geplanten strafferen Releasezyklus, der frische Java-SE-Versionen im Halbjahresrhythmus vorsieht, bleiben den Features im Inkubator jeweils nur sechs Monate, um sich zu bewähren. Allerdings ist durchaus der Prozess des Re-Incubating vorgesehen, also die erneute Übernahme eines als "incubating" bezeichneten Features unter Vorbehalt. Derzeit handelt es sich wie bei allen JEPs lediglich um einen Vorschlag. Ob und ab welchem Java-Release der Inkubator Bestandteil von Java SE sein wird, ist somit offen. (rme)