Menü
Developer

JVM-Sprache: Kotlin 1.1 ist fertig

Die wesentlichen Neuerungen seit der ersten Hauptversion der JVM-Sprache sind Koroutinen und das Kompilieren nach JavaScript. Letzteres ist nun nicht mehr als experimentell gekennzeichnet.

vorlesen Drucken Kommentare lesen 13 Beiträge

Ein gutes Jahr nach der Veröffentlichung des 1.0-Releases hat JetBrains die erste Nebenversion von Kotlin herausgegeben. Die wesentlichen Neuerungen waren bereits in der Vorschauversion vom Sommer 2016 beziehungsweise der ersten Beta vom Januar 2017 enthalten. Das in letzterer eingeführte Kompilieren nach JavaScript ist mit der nun fertigen 1.1-Version der Sprache nicht mehr als experimentell gekennzeichnet.

Das Kompilieren bezieht sich nur auf Kotlin selbst: Entwickler können alle Kern-APIs der Programmiersprache wie Strings, Collections und Arrays in die Skriptsprache übersetzen, nicht jedoch das JDK. Webanwendungen lassen sich somit prinzipiell vollständig in Kotlin schreiben. Für das Zusammenspiel mit JavaScript bringt die JVM-Sprache (Java Virtual Machine) dynamische Typen mit. Unterstützt wird die Programmierung für den Browser ebenso wie Node.js. JetBrains stellt die Kotlin-Standardbibliothek über den Paketmanager npm zur Verfügung.

Mit dem aus anderen Programmiersprachen bekannten Konzept der Koroutinen tragen die Macher der Sprache der Tatsache Rechnung, dass Anwendungen immer stärker parallelisiert werden. Vereinfacht ausgedrückt können die Routinen ihren Ablauf unterbrechen, wenn sie beispielsweise auf die Übertragung einer Datei über das Netzwerk warten, ohne dabei den aktiven Thread zu blockieren.

Das kotlinx.coroutines-Projekt zur Umsetzung der Technik über Bibliotheken liegt auf GitHub. Es umfasst unter anderem spezifische Module für Java 8 beziehungsweise Android mit dem API Level 24, Swing, JavaFx und RxJava, der Reactive-Erweiterung für die JVM. Die Umsetzung der Koroutinen ist an andere Sprachen angelehnt, sodass sich deren Konstrukte in Kotlin abbilden lassen. Dazu gehören generators/yield von Python, channels/select von Go und async/await von C#. Da Koroutinen in Kotlin 1.1 noch als experimentell gekennzeichnet sind, müssen Entwickler sie explizit aktivieren.

Zu den weiteren Neuerungen gehören gebundene Referenzen (bound references), die eine Anbindung über :: nicht nur an Typen und Klassen, sondern an auch an Ausdrücke und Variablen des jeweiligen Objekts erlauben, sowie Type Aliases. Letztere sind wie bei anderen Sprachen im Wesentlichen Pseudonyme, die längere Konstrukte abkürzen oder besser lesbar beschreiben. Sie kommen vor allem bei generischen Typen wie Collections zum Einsatz wie im folgenden Beispiel:

typealias Multimap<K, V> = Map<K, List<V>>

Außerdem dürfen Entwickler nun Unterstriche als Platzhalter für unbenutzte Symbole verwenden. So darf ein Lambda folgenden Aufbau haben:

foo {_, x -> ... }

Dasselbe gilt für Destructuring Declarations, bei denen einem Objekt mehrere Variablen zugewiesen werden. Auch hierbei dürfen Entwickler künftig wie in folgendem Beispiel nicht benötigte Werte durch Unterstriche ersetzen :

val (x, _, z) = listOf(1, 2, 3) 
print(x+z)

Für eine bessere Lesbarkeit dürfen Unterstriche zudem wie in Java 8 als Trennzeichen innerhalb numerischer Literale zum Einsatz kommen: 1_000_000 ist ebenso erlaubt wie 0xAA_BB_CC_DD und 0b11001100_00110011.

Laut dem Kotlin-Blog haben im vergangenen Jahr 160.000 Entwickler Kotlin in Open-Source-Software-Projekten eingesetzt. Auf GitHub liegen demnach derzeit in 8132 Repositories insgesamt 10 Millionen Codezeilen in der JVM-Sprache und damit viermal so viele wie ein Jahr zuvor, zum Release von Kotlin 1.0.

Das kommende Java 9 haben die Macher bereits auf dem Schirm: Kotlin soll die neuen Features bereits vor dem für Juli geplanten Release unterstützen. Ansonsten stehen zunächst die Stabilität und Optimierung im Mittelpunkt. Ein Fokus liegt auf dem Tooling für JavaScript und der inkrementellen Kompilierung in die Skriptsprache.

Weitere Details lassen sich dem Kotlin-Blog sowie der Seite mit den Neuerungen in Kotlin 1.1 entnehmen. Kotlin ist eine objektorientierte, statisch typisierte Programmiersprache. Sie ist kompatibel zu Java und setzt wie Scala, Clojure und Ceylon auf die JVM auf (Java Virtual Machine). Als Vorzüge nennen die Macher eine bessere Performance und Sicherheit sowie eine gut lesbare Syntax. (rme)