Programmiersprache Kotlin 2.10 erweitert Anbindung an iOS und WebAssembly

(Bild: iX)
Neben kleineren syntaktischen Ergänzungen bringt Kotlin 2.10 Neuerungen beim K2-Compiler, bei der WebAssembly-Toolchain und für das Zusammenspiel mit Swift.
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 [1] und in Kotlin 2.0 als stabil gekennzeichnete [2] K2-Compiler erhält zudem im aktuellen Release zusätzliche Compiler-Checks [3]. 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 [4] über continue
und break
erlaubt [5]. 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 [6] 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 [7], 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 [8].
Weitere Neuerungen, unter anderem zum Zusammenspiel mit Gradle, lassen sich dem Kotlin-Blog [9] entnehmen.
(rme [10])
URL dieses Artikels:
https://www.heise.de/-10179597
Links in diesem Artikel:
[1] https://www.heise.de/news/Kotlin-macht-Ernst-mit-der-plattformuebergreifenden-Programmierung-9352485.html
[2] https://www.heise.de/news/Kotlin-2-0-ist-mit-K2-Compiler-auf-Multiplattform-Entwicklung-ausgelegt-9730953.html
[3] https://kotlinlang.org/docs/whatsnew21.html#extra-compiler-checks
[4] https://kotlinlang.org/docs/inline-functions.html#non-local-jump-expressions
[5] https://kotlinlang.org/docs/whatsnew21.html#non-local-break-and-continue
[6] https://www.heise.de/news/Kotlin-fuer-Multiplattformprojekte-Bessere-iOS-Anbindung-fuer-2024-geplant-9531485.html
[7] https://kotlinlang.org/docs/whatsnew21.html#basic-support-for-swift-export
[8] https://kotlinlang.org/docs/native-target-support.html
[9] https://blog.jetbrains.com/kotlin/2024/11/kotlin-2-1-0-released/
[10] mailto:rme@ix.de
Copyright © 2024 Heise Medien