Programmiersprache Kotlin 2.0 legt den Fokus auf Multiplattform-Entwicklung

Der K2-Compiler mit Fokus auf Multiplattform ist nun stabil. Er erhöht die Performance und erlaubt künftig eine schnellere Feature-Entwicklung.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
Personen setzen eine GUI zusammen

(Bild: iX)

Lesezeit: 4 Min.

Das Softwareunternehmen JetBrains hat seine Programmiersprache Kotlin in Version 2.0 veröffentlicht. Das Major Release bringt die stabile Version des neuen K2-Compilers mit, der von Grund auf mit Blick auf die Multiplattform-Entwicklung erstellt wurde und zweimal schneller kompilieren soll. Weitere Highlights sind das standardmäßige Generieren von Lambda-Funktionen per invokedynamic und die Stabilisierung der Library kotlinx-metadata-jvm.

Besonderes Augenmerk hat JetBrains auf den neuen Kotlin- und JVM-Compiler K2 gelegt. Die Arbeiten daran begannen bereits 2021, bevor er in Kotlin 1.9.20 Ende des vergangenen Jahres zunächst den Beta-Status für alle Plattformen erreichte und nun in Kotlin 2.0 wie geplant als stabiles Feature vorliegt.

Der K2-Compiler ist auf Multiplattform-Entwicklung ausgerichtet, indem er alle Plattformen vereinigt, mit denen Kotlin umgehen kann. Dadurch kann das Kotlin-Team die meisten Features, Änderungen und Bugfixes mit einem Mal für alle Plattformen anbringen. Das soll das Entwickeln neuer Sprachfeatures stark beschleunigen.

Der neue K2-Compiler in Kotlin 2.0

(Bild: JetBrains)

Zudem soll K2 deutliche Performance-Vorteile bringen: Der neue Compiler soll im Vergleich zu früheren Kotlin-Versionen ein doppelt so schnelles Kompilieren ermöglichen. Wie Entwicklerinnen und Entwickler die Kompilierungsgeschwindigkeit ihrer Projekte selbst messen können, zeigt ein Blogeintrag. Die neue Architektur soll zudem weitere Verbesserungen der Kompilierungszeit für Multiplattform-Projekte vereinfachen.

Darüber hinaus ebnet der K2-Compiler den Weg für Neuerungen, die über die Kompilierung hinausgehen. So arbeitet das Entwicklungsteam bereits an der nächsten Generation des Formats für die KMP-Libraries-Distribution. Sie soll unter anderem das Entwickeln und Veröffentlichen von KMP-Bibliotheken von einem beliebigen Host und universellen Kotlin-Bibliotheken ermöglichen. Bei KMP handelt es sich um Kotlin Multiplatform, JetBrains' aktuelles Steckenpferd zum Entwickeln für Android, iOS, Desktop und das Web mit Kotlin – als Konkurrenz zu etablierten Frameworks wie Flutter oder React Native.

Ein weiteres stabilisiertes Feature ist die Bibliothek kotlinx-metadata-jvm. Sie ist zum kotlin-Paket umgezogen und nun (ohne "x") unter kotlin-metadata-jvm zu finden. Die Bibliothek stellt eine API bereit, um Metadaten von Binärdateien, die der Kotlin/JVM-Compiler generiert hat, zu lesen und zu bearbeiten. Bisher verfolgte die Bibliothek ihr eigenes Veröffentlichungsschema und ihre eigene Nummerierung. Nun ist sie Teil des Kotlin-Releasezyklus und bietet die gleiche Garantie der Abwärtskompatibilität wie die Kotlin Standard Library.

Der Umgang mit Lambda-Funktionen hat sich in Kotlin 2.0 ebenfalls verändert: Sie werden jetzt standardmäßig per invokedynamic generiert, was optional bereits seit Kotlin 1.5 durch die Compiler-Option -Xlambdas=indy möglich war. Das soll die Binärgrößen von Anwendungen im Vergleich zur traditionellen, anonymen Klassengeneration verkleinern.

Verglichen mit der herkömmlichen Lambda-Kompilierung hat die neue Vorgehensweise allerdings drei Einschränkungen:

  • Ein in invokedynamic kompiliertes Lambda ist nicht serialisierbar.
  • Die experimentelle reflect()-API kann nicht mit Lambdas umgehen, die durch invokedynamic erstellt wurden.
  • Der Aufruf von .toString() auf ein solches Lambda führt zu einer schlechter lesbaren String-Repräsentation.

Um das Legacy-Verhalten wiederherzustellen, lassen sich entweder spezifische Lambdas mit @JvmSerializableLambda annotieren oder die Compiler-Option -Xlambdas=class verwenden, um das Verhalten auf alle Lambdas in einem Modul anzuwenden.

Alle weiteren Details zu Kotlin 2.0 finden Interessierte im JetBrains-Blog und auf der "What's new"-Webseite.

(mai)