Java 8: Das Ende von 10 Jahren Stillstand
Es hat sich bereits abgezeichnet, doch jetzt ist es offiziell: Das Release von Java 8 wird nochmals verschoben. Statt in diesem September wird es nun frühestens im März 2014 erscheinen. Entwickler müssen also weiterhin auf die sehnsüchtig erwarteten Erweiterungen warten, die bereits für das ebenfalls mehrfach verschobene Java 7 versprochen waren. Dazu gehören insbesondere Lambda Expressions
und Default Methods
.
Zur Erinnerung: Die letzten nennenswerten Erweiterungen der Sprache sind bereits einige Zeit her. Generics, Annotations, Autoboxing, Enumerations und Varargs wurden allesamt 2004 mit Java 5 eingeführt. Mit Java 6 und Java 7 hat sich kaum etwas getan. Die Sprache hat sich also aus Sicht der Entwickler ungefähr zehn Jahre nicht weiterentwickelt.
Sind zehn Jahre viel für eine Programmiersprache? Wie haben sich andere Programmiersprachen im Vergleich dazu in den letzten 10 Jahren entwickelt?
- Visual Basic hat 2008 umfangreiche Erweiterungen erfahren. Dazu gehören auch Lambda-Expressions und Default-Methods.
- Python startete 2008 eine grundlegende Überholung der Programmiersprache mit Version 3, die mit vielen Altlasten aufgeräumt hat.
- C++ wurde zuletzt 2011 als neuer ISO-Standard verabschiedet und führte insbesondere dabei Lambda-Ausdrücke und Typinferenz ein.
Am Besten lässt sich die Entwicklung von Java allerdings mit der Entwicklung von C# vergleichen. Denn beide Sprachen sind mit sehr ähnlichen Konzepten und fast identischer Syntax gestartet, und C# hinkte Java Ende 2004 noch ein wenig hinterher. Doch seitdem hat sich in C# im Gegensatz zu Java viel getan:
- C# 2.0 erschien 2005 und hat mit Generics die Lücke zu Java geschlossen.
- Zwei Jahre später wurde C# 3.0 veröffentlicht. Bereits mit dieser Version wurden Lambda-Expressions und Default-Methods eingeführt – also mit fast sieben Jahren Vorsprung auf Java. Darüber hinaus sind noch Typinferenz für lokale Variablen sowie anonymen Typen als bedeutende Erweiterungen hervorzuheben.
- 2010 wurden mit C# 4.0 optionale Parameter, benannte Parameter und dynamische Typbindung eingeführt.
- Die neueste Version ist seit 2012 verfügbar. Mit den neu eingeführten Schlüsselwörtern
asyncundawaitunterstützt C# 5.0 insbesondere die asynchrone und parallele Programmierung.
Viele Java-Programmierer kennen diese oder vergleichbare Features aus anderen JVM-basierten Programmiersprachen, die in den letzten Jahren wie Pilze aus dem Boden sprießen. Ihre bekanntesten Vertreter sind Scala, Clojure und Kotlin, und ihr Wachstum wird durch Javas Trägheit begünstigt. Eine vergleichbare Entwicklung ist im C#-Umfeld dagegen nicht zu erkennen.
Hier liegt aus meiner Sicht das große Problem: Wenn Oracle es nicht schafft, wieder mehr Geschwindigkeit in die Weiterentwicklung von Java zu bringen, dann werden die Entwickler auf Dauer noch stärker abwandern – hauptsächlich zu anderen JVM-basierten Programmiersprachen. Darunter wird in erster Linie Java selbst leiden, und als Folge daraus auch die JVM. Doch auch die Heterogenität der Programmiersprachenlandschaft sollte man nicht unterschätzen. Vor 20 Jahren war man schon einmal an diesem Punkt, und CORBA erinnert uns als Mahnmal an den gescheiterten Versuch, mehrere Programmiersprachen innerhalb von Systemen eng miteinander zu verzahnen.
