Programmiersprache: Kotlin 1.5.20 arbeitet mit Project Lombok zusammen

Im Zusammenspiel mit Java verarbeitetet Kotlin neuerdings die Annotationen von Project Lombok und die Nullability-Informationen von JSpecify.

In Pocket speichern vorlesen Druckansicht 7 Kommentare lesen
Luftbild einer Insel

Die Programmiersprache Kotlin ist nach der gleichnamigen russischen Insel benannt.

(Bild: news.ifmo.ru)

Lesezeit: 4 Min.

Gut einen Monat nach der letzten größeren Kotlin-Version 1.5 ist nun Kotlin 1.5.20 erschienen. Das Release stabilisiert im Zusammenspiel mit Java die dynamischen Methodenaufrufe beim Verketten von Zeichenketten. Außerdem bringt es eine Anbindung an die Java-Projekte Lombok und JSpecify. Der Kotlin/Native-Compiler kann derweil KDoc-Kommentare für Objective-C-Frameworks exportieren.

Das aktuelle Release erweitert den Einsatz dynamischer Methodenaufrufe über die in Java 7 eingeführte Anweisung invokeddynamic im Bytecode. Das Vorgehen soll zum einen schneller sein und zum anderen Raum für künftige Optimierungen ohne Änderungen am Bytecode schaffen. Die in Version 1.4.20 eingeführte Verkettung von Strings über invokeddynamic, die bisher als experimentell gekennzeichnet war, gilt nun als stabil. Zudem verwendet der Compiler sie nun standardmäßig, womit die explizite Angabe der Compiler-Option Xstring-concat entfällt.

Neu im Zusammenspiel mit Java ist die Anbindung von Project Lombok, das sich um das Generieren von Boilerplate-Code direkt auf Bytecode-Ebene kümmert: Durch die Annotation @Data erstellt Lombok neben Getter, Setter, Equals, Hashcode und die Umwandlung in einen String unter der Haube. Dadurch blähen die Methoden den Sourcecode nicht auf, stehen aber sowohl bei der Ausführung als auch in der Entwicklungsumgebung zur Verfügung. Kotlin 1.5.20 ermöglicht den Aufruf solcher Funktionen in gemischtem Java/Kotlin-Code mit zwei Einschränkungen: Sie müssen im selben Modul sein, und die Annotationen funktionieren nur im Java-, aber nicht im Kotlin-Sourcecode.

Ebenfalls neu ist die Anbindung an das JSpecify-Projekt, das Annotationen unter anderem für die Null-Safety bietet. Kotlin kennt seit Anbeginn die Unterscheidung, ob eine Variable den Wert null haben kann und kennzeichnet diese sogenannte Nullability über ein ? bei der Deklaration. Da Java die Unterscheidung von Haus aus nicht mitbringt, führt JSpecify Annotationen wie @Nullable ein. Diese wertet Kotlin 1.52 nun in gemischtem Code aus und warnt, wenn die Nullability nicht zusammenpasst, wie folgendes Beispiel aus dem Kotlin-Blog zeigt:

// JavaClass.java
import org.jspecify.nullness.*;

@NullMarked
public class JavaClass {
    public String notNullableString() { return ""; }
    public @Nullable String nullableString() { return ""; }
}

// Test.kt
fun kotlinFun() = with(JavaClass()) {
  notNullableString().length // OK
  nullableString().length // Warning: receiver nullability mismatch
}

Sowohl die Anbindung an Project Lombok als auch die an JSpecify sind im aktuellen Release als experimentell gekennzeichnet.

Für Kotlin/Native kann der Compiler neuerdings KDoc-Dokumentationskommentare exportieren, um sie in Objective-C-Frameworks zu verwenden. Sie sollten sich darauf auch mit Swift verwenden lassen. Daneben hat das Team die Performance von Array.copyInto() in Kotlin/Native wohl deutlich verbessert – der Blogbeitrag spricht von einer Beschleunigung um den Faktor 20.

Anpassungen in der Standard-Library von Kotlin sorgen dafür, dass die Funktion digitToInt() nun über Kotlin/JVM (Java Virtual Machine), Kotlin/Native und Kotlin/JS (JavaScript) dieselbe Unicode-Unterstützung mitbringt. Zudem ergeben die Prüffunktionen isLowerCase() und isUpperCase() auf allen Plattformen dasselbe Ergebnis.

Nennenswert ist zudem, dass das Build-Werkzeug Gradle nun das Parallelisieren von Kotlin-Build-Tasks steuert. Für Kotlin/JS schreiten die Arbeiten an der Stabilisierung des IR-Backends (Intermediate Representation) zwar wohl weiter voran, sind aber noch nicht abgeschlossen. Kotlin 1.5 hatte bereits das in Version 1.4 eingeführte Backend für die JVM stabilisiert.

Kotlin: Von der JVM zur Multiplattformsprache

Ursprünglich hatte JetBrains die Programmiersprache als Alternative zu Java ins Rennen geschickt. In den Anfängen war die Sprache auch auf die JVM begrenzt. Besonders auf Android hat sie einen Siegeszug angetreten, seit Google sie 2017 offiziell als Alternative zu Java auch in Android Studio aufgenommen 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 die Sprache anfänglich maßgeblich entwickelt.

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

(rme)