zurück zum Artikel

Programmiersprache Kotlin 2.10 erweitert Anbindung an iOS und WebAssembly

Rainald Menge-Sonnentag
Aufmacher Kotlin

(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.

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"
  }
  """

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