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.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
Kotlin

(Bild: Shutterstock)

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

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.

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.

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.

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.

Kotlin – die Sprache mit und ohne JVM

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)