Programmiersprache Kotlin 1.8 schneidet alte Zöpfe ab und erweitert das Debuggen
Das alte Backend und die Anbindung an Uralt-JVM-Versionen verschwinden. Eine neue Compiler-Option verzichtet auf Optimierungen, um das Debugging zu verbessern.
JetBrains hat offiziell die Veröffentlichung von Kotlin 1.8 verkündet, nachdem das aktuelle Release der Programmiersprache turnusmäßig gerade noch im Dezember auf GitHub erschienen war. Zu den Neuerungen gehört ein neuer Compiler-Parameter, der Optimierungen deaktiviert, um das Debuggen übersichtlicher zu gestalten. Außerdem gibt es zwei experimentelle Funktionen, um Verzeichnisse rekursiv zu löschen oder zu kopieren.
Kotlin 1.8 trennt sich zudem von zwei Altlasten. Zum einen entfällt das alte Backend, das bereits seit Version 1.5 als überholt (deprecated) gilt. Seinerzeit hatte JetBrains mit dem JVM-IR-Backend (Intermediate Representation) eine neue gemeinsame Zwischenebene für alle Multiplattformziele von Kotlin stabilisiert, also die Java Virtual Machine (JVM), JavaScript und native Anwendungen.
Weg mit den antiken JDKs
Zum anderen arbeitet Kotlin 1.8 nicht mehr mit den veralteten JVM-Zielen 1.6 und 1.7 zusammen, also JDK 6 beziehungsweise 7. Die Standard-Libraries der Sprache sind nun einheitlich fĂĽr JDK 8 kompiliert. Bisher waren kotlin-stdlib
, kotlin-reflect
, and kotlin-script-*
für JDK 6 kompiliert. Wer die Varianten für ein aktuelleres JDK benötigte, musste explizit die Dependency kotlin-stdlib-jdk7
oder kotlin-stdlib-jdk8
angeben. Diese Einträge sollten nun einheitlich durch kotlin-stdlib
ersetzt werden.
Als positiver Nebeneffekt hat sich wohl die Performance der Funktion typeOf()
in kotlin-reflect
deutlich verbessert, da das Caching nun nicht mehr intern, sondern ĂĽber ClassValue
erfolgt.
Compiler-Parameter zum Debuggen
Ein neuer Parameter sorgt dafür, dass der Compiler auf bestimmte Optimierungen verzichtet, damit sich der Code besser debuggen lässt. Im ersten Schritt deaktiviert -Xdebug
lediglich das sogenannte "Was Optimized Out"-Feature fĂĽr Koroutinen, das Variablen im Zusammenspiel mit potenziell blockierenden Funktionen (suspend
Functions) optimiert.
Derzeit noch als experimentell gekennzeichnet sind das rekursive Löschen und Kopieren von Verzeichnissen über deleteRecursively()
beziehungsweise copyToRecursively()
als Extension-Funktionen fĂĽr java.nio.file.Path
. Details zum Aktivieren der experimentellen Funktion und zum Error-Handling finden sich in der Kotlin-Dokumentation.
Zusammenspiel mit Apple-Sprachen
Kotlin/Native für Anwendungen ohne JVM bringt ein paar Ergänzungen, die vor allem auf die Anbindung an Swift und Objective-C zielen. Die neu eingeführte Annotation @ObjCName
erlaubt das Festlegen eines eigenen Namens fĂĽr Swift beziehungsweise Objective-C jenseits des Kotlin-Namens unter anderem fĂĽr Funktionen und Methoden, wie folgendes Beispiel aus der Kotlin-Dokumentation zeigt:
@ObjCName(swiftName = "MySwiftArray")
class MyKotlinArray {
@ObjCName("index")
fun indexOf(@ObjCName("of") element: String): Int = TODO()
}
// Usage with the ObjCName annotations
let array = MySwiftArray()
let index = array.index(of: "element")
Die ebenfalls neue Annotation @HiddenFromObjC
versteckt eine Kotlin-Deklaration vollständig vor der Objective-C-API. Schließlich orientiert sich @ShouldRefineInSwift
an Apples Makro NS_REFINED_FOR_SWIFT
fĂĽr Funktionen, in der ein Wrapper in Swift die ursprĂĽngliche Deklaration ersetzen soll. Die Kotlin-Annotation sorgt dafĂĽr, dass eine Funktion als swift_private
gekennzeichnet wird.
JetBrains hat die Programmiersprache Kotlin ursprünglich für die Java Virtual Machine (JVM) entwickelt. 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. Im März 2022 hatte JetBrains als Reaktion auf den russischen Angriffskrieg auf die Ukraine alle russischen Niederlassungen geschlossen und die Mitarbeiterinnen und Mitarbeiter in andere Länder umgezogen.
2020 hat JetBrains einen einheitlichen Releasezyklus für Kotlin gestartet: Das Unternehmen veröffentlicht planmäßig alle sechs Monate ein Feature-Release mit der Versionierung 1.x. Inkrementelle Releases mit der Versionsnummer 1.x.y0 (1.8.10, 1.8.20, ...) sollen alle zwei bis drei Monate erscheinen, und Bugfix-Releases folgen nach Bedarf mit der Versionierung 1.x.yz (1.8.21, 1.8.22, ...).
Weitere Neuerungen in Kotlin 1.8 lassen sich dem Kotlin-Blog entnehmen. Die vollständige Liste der Änderungen findet sich im GitHub-Repository.
(rme)