Programmiersprache: Kotlin 1.5.30 bereitet gewünschte Sprachneuerungen vor

Neben Previews für Features wie versiegelte when-Anweisungen bringt das Release eine native Anbindung an Apple Silicon.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 4 Beiträge
Luftbild einer Insel

Die Programmiersprache Kotlin ist nach der gleichnamigen russischen Insel benannt.

(Bild: news.ifmo.ru)

Von
  • Rainald Menge-Sonnentag

JetBrains hat die Programmiersprache Kotlin in der Version 1.5.30 veröffentlicht. Das Release bringt einige für Kotlin 1.6 geplante Sprachfeatures mit, die zunächst als Preview gekennzeichnet sind. Dazu gehören versiegelte when-Anweisungen und die Verwendung unterbrechender Funktionen als Elterntyp.

Außerdem lässt sich das Release nativ auf den M1-Prozessoren von Apple verwenden. Bisher benötigte Kotlin Rosetta zum Erstellen und Ausführen von Anwendungen auf Apple Silicon. Kotlin 1.5.30 kommt ohne die Kompatibilitätsschicht aus und kennt die neuen Zielplattformen macosArm64, iosSimulatorArm64, watchosSimulatorArm64 sowie tvosSimulatorArm64.

Die versiegelten (sealed) oder auch erschöpften (exhausted) when-Anweisungen sind wohl seit Langem gewünscht. Versiegelt bedeutet in dem Fall, dass für alle möglichen Fälle ein Zweig existieren muss. Im Zweifel kann ein else-Block alle nicht behandelten Fälle abdecken. Version 1.6 der Programmiersprache warnt bei nicht erschöpften when-Anweisungen, und ab Kotlin 1.7 soll der Compiler einen Fehler ausgeben.

Derzeit müssen Entwicklerinnen und Entwickler die Warnungen manuell aktivieren, indem sie die Umgebungsvariable languageVersion auf 1.6 setzen. Folgendes Beispiel aus der Dokumentation zeigt die Warnung für eine unvollständig abgearbeitete Anweisung:

val y: Boolean = true
when (y) {
    true -> println("true")
}
// WARNING: Non exhaustive 'when' statements
// on Booleans will be prohibited
// in 1.7, add a 'false' or 'else' branch instead

Eine weitere Neuerung ist, dass unterbrechende Funktionen nun als Elterntyp erlaubt sind. Die mit suspend gekennzeichneten Funktionen können in nebenläufigen Programmen eingesetzt werden, um die Ausführung von Koroutinen zu unterbrechen. So können sie beispielsweise auf die Übertragung einer Datei über das Netzwerk warten, ohne den aktuellen Thread zu blockieren. Das Konzept der Koroutinen kennt Kotlin seit Version 1.1.

Für das folgende kurze Beispiel ist ebenfalls die Anpassung der Umgebungsvariable languageVersion auf 1.6 erforderlich:

class MyClass: suspend () -> Unit {
    override suspend fun invoke() { TODO() }
}

Auf Sprachebene bringt Kotlin 1.5.30 zusätzliche Regeln für Opt-in-Annotationen und eine erweiterte Typinferenz für rekursive generische Typen mit.

Kotlin/Native bietet eine Integration in CocoaPods, den Dependency-Manager für Swift und Objective-C. Ein Plug-in sorgt für das Zusammenspiel mit dem Build-Werkzeug Gradle. Das aktuelle Release der Programmiersprache erweitert das DSL-Format und führt neue Parameter ein, um das Plug-in zu konfigurieren. Unter anderem lassen sich über die Kotlin-DSL neuerdings die dynamische oder statische Version des Frameworks festlegen und Export-Dependencies explizit angeben.

Das in Version 1.4 eingeführte IR-Compiler-Backend (Intermediate Representation), das eine einheitliche Basis des Zwischencodes beim Kompilieren bietet, erreicht nun für Kotlin/JS den Beta-Status, während es für die Java Virtual Machine (JVM) bereits seit Version 1.5 als stabil gilt.

Eine weitere Neuerung betrifft das gemeinsame Verwenden plattformabhängiger Libraries für mehrere native Ziele in Multiplattformprojekten. Während sich bisher nur die mit Kotlin/Native ausgelieferten Libraries teilen ließen, erlaubt Version 1.5.30 das Teilen von Bibliotheken, die im cinterops-Block des Build-Skripts definiert sind. Der Block enthält die Konfigurationen für C-, Objective-C- und Swift-Libraries.

Zehn Jahre Kotlin

Die Programmiersprache hat am 19. Juli ihren zehnten Geburtstag gefeiert. In den Anfängen war Kotlin auf die Java Virtual Machine (JVM) begrenzt. Besonders auf Android hat sie einen Siegeszug angetreten, seit Google sie 2017 offiziell als Alternative zu Java auch in Android Studio aufgenommen und zwei Jahre später zur ersten Wahl für das mobile Betriebssystem erklärt hat. Inzwischen ist die Programmiersprache aber auf diverse Plattformen ausgelegt: Kotlin/Native ermöglicht die Ausführung ohne virtuelle Maschine, vor allem um Plattformen wie iOS abzudecken, die von Haus aus keine JVM an Bord haben.

Mit Kotlin/JS ist zudem eine Anbindung an JavaScript verfügbar, und seit Kotlin 1.2 lassen sich Multiplattformprojekte erstellen, die mit einer Codebasis JVM und JavaScript abdecken. Den Namen, der hierzulande gerne Trolle in Foren anzieht, verdankt die Sprache einer Insel vor St. Petersburg. Das dortige JetBrains-Team hat Kotlin anfänglich maßgeblich entwickelt.

Kotlin 1.5.30 ist planmäßig das letzte inkrementelle Release in der 1.5.x-Reihe. JetBrains hat im Oktober 2020 den Release-Zyklus umgestellt, in dem alle sechs Monate ein Feature-Relese erscheint, und Version 1.6 ist für den November vorgesehen.

Weitere Details lassen sich dem Kotlin-Blog entnehmen. IntelliJ IDEA sollte automatisch ein Update zur aktuellen Version vorschlagen. Dasselbe gilt für das auf IntelliJ IDEA basierende Android Studio.

(rme)