Ein halbes Jahr nach Kotlin 2.0 ist nun Kotlin 2.10 als erstes Minor Release erschienen, das unter anderem den K2-Compiler ausbaut. Außerdem gibt es eine direkte Anbindung an Apples Swift, und die Toolchain für WebAssembly kann inkrementell kompilieren.
Der in Kotlin 1.9.20 als Beta eingeführte und in Kotlin 2.0 als stabil gekennzeichnete K2-Compiler erhält zudem im aktuellen Release zusätzliche Compiler-Checks. Außerdem hat JetBrains einige Verbesserungen am kapt-Plug-in (Kotlin Annotation Processing Tool) für K2 vorgenommen, das aber weiterhin Alpha-Status hat.
Mehr wenn, mehr $$ und flexibler Inline-Ausstieg
Kotlin 2.10 führt drei syntaktische Änderungen ein, die alle als Preview gekennzeichnet sind und eine explizite Aktivierung über Compiler-Flags erfordern. Mit Guarding Conditions lassen sich when-Blöcke um zusätzliche mit if zugefügte Bedingungen für die einzelnen Zweige erweitern. Die Blöcke können Branches mit und ohne Guarding Conditions mischen. Ein Beispiel findet sich in der Kotlin-Dokumentation:
sealed interface Animal { data class Cat(val mouseHunter: Boolean) : Animal { fun feedCat() {} } data class Dog(val breed: String) : Animal { fun feedDog() {} } } fun feedAnimal(animal: Animal) { when (animal) { // Branch with only the primary condition. // Returns `feedDog()` when `Animal` is `Dog` is Animal.Dog -> animal.feedDog() // Branch with both primary and guard conditions. // Returns `feedCat()` when `Animal` is `Cat` and is not `mouseHunter` is Animal.Cat if !animal.mouseHunter -> animal.feedCat() // Returns "Unknown animal" if none of the above conditions match else -> println("Unknown animal") } }Für Inline-Funktionen gibt es ebenfalls eine Ergänzung. Dort ist nun auch der nicht lokale Ausstieg über continue und break erlaubt. Bisher war der Ausstieg aus einer Lambda außerhalb der einbettenden Funktion nur über return erlaubt.
Eine kleine Komfortverbesserung gibt es beim Umgang mit dem $-Zeichen in String-Literalen. Da es die String-Interpolation anzeigt, musste die Verwendung des Dollarzeichens innerhalb des Literals über das Konstrukt ${'$'} erfolgen. Kotlin 2.10 führt nun Multi-String-Interpolation ein: Die Zahl der Dollarzeichen vor einem interpolierten String zeigt an, wie viele Zeichen eine String-Interpolation auslösen. Folgendes Beispiel zeigt das Vorgehen anhand eines JSON-Schemas:
val KClass<*>.jsonSchema : String get() = $$""" { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://example.com/product.schema.json", "$dynamicAnchor": "meta" "title": "$${simpleName ?: qualifiedName ?: "unknown"}", "type": "object" } """WebAssembly und Swift
Beim Erstellen von WebAssembly-Anwendungen bietet die Kotlin/wasm-Toolchain neuerdings inkrementelle Kompilierung an, um nicht für jede Änderung den kompletten Code neu kompilieren zu müssen.
In der Ende 2023 veröffentlichten Roadmap für die plattformübergreifende Entwicklung hatte JetBrains die bessere iOS-Anbindung ganz oben auf der Liste, und Kotlin 2.10 geht an zwei Stellen einen großen Schritt voran.
Anwendungen, die Kotlin und Swift kombinieren, beispielsweise bei der Cross-Plattform-Entwicklung mit integriertem nativen Code in Swift, erforderten bisher den Umweg über Objective-C. JetBrains führt mit dem aktuellen Release einen Swift-Export ein, der aber noch als experimentell gekennzeichnet ist.
Auch an anderer Stelle gibt es eine Verbesserung im Zusammenspiel mit Apples Ökosystem: Die Plattform iosArm64 findet sich nun in der obersten Kategorie (Tier 1) der Kotlin/Native-Ziele.
Weitere Neuerungen, unter anderem zum Zusammenspiel mit Gradle, lassen sich dem Kotlin-Blog entnehmen.
(rme)