Programmiersprache: Kotlin/Native v0.7 verbessert das Zusammenspiel mit Swift

Auf der Liste der Neuerungen für das aktuelle Release von JetBrains Programmiersprache steht außer der Interoperabilität unter iOS ein Konzept für geteilte unveränderliche Daten.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Programmiersprache: Kotlin/Native v0.7 verbessert das Zusammenspiel mit Swift
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Der Toolhersteller JetBrains hat Kotlin/Native v0.7 veröffentlicht und sich dabei vor allem auf die Integration mit Swift- und Objective-C-Code konzentriert. Außerdem bietet die Sprache nun das Konzept des Einfrierens von Objekten, damit mehrere Threads dieselben Daten auf einfache Weise verwenden können.

Unter iOS arbeitet Kotlin/Native nun eleganter mit Apples Programmiersprachen zusammen. Entwickler können neuerdings unter anderem Objecitve-C-APIs mit Objekten aus Swift aufrufen. Außerdem lassen sich Objekte transparent zwischen den iOS-Programmiersprachen und Kotlin umwandeln, wie folgende Beispiele aus dem Kotlin-Blog zeigen:

val string = "Kotlin" as NSString
val list = listOf(1, "Konan") as NSArray
val map = mapOf(1 to "one", 2 to "two") as NSDictionary

Das Umwandeln funktioniert in beide Richtungen. Neuerdings lassen sich zudem Checked Exceptions, aus Kotlin-Methoden mit einer @Throws-Annotationen in Swift und Objective-C verarbeiten.

Die Macher haben zudem ein Konzept eingeführt, unveränderliche (immutable) Daten zwischen mehreren Threads beziehungsweise Workern zu teilen. Wie der Blogbeitrag erklärt, widerspricht das Vorgehen eigentlich dem grundlegenden Konzept von Kotlin/Native, das geteilte Daten weitestgehend vermeidet. Sinnvoll ist es jedoch in bestimmten Szenarien wie bei der Verwaltung von Konfigurationsdaten, die ein Programm beim Start einliest und anschließend global zur Verfügung stellt.

Mit freeze() lassen sich Objekte neuerdings sozusagen einfrieren, sodass sie unveränderlich sind. Das System verwaltet dabei einen Referenzzähler, der auf die nebenläufige Programme ausgelegt ist. Es kann das eingefrorene Objekte freigeben, wenn kein Thread oder Worker mehr darauf zugreift. Der Versuch, eingefrorene und damit immutable Objekte zu verändern, löst eine Runtime Exception aus.

Der besseren Speicherverwaltung dient auch das in Kotlin/Native neu eingeführte Konzept der schwachen Referenzen (weak references), die sich auch auf Objective-C-Objekte beziehen können. Der Speichermanager räumt solche Objekte auf, sobald sie nicht mehr benötigt werden.

Kotlin/Native ist eine native Implementierung der ursprünglich für die JVM entwickelten Programmiersprache. Anders als beispielsweise bei Java-Code spielt für die native Umsetzung nicht die Performance die wichtigste Rolle, sondern ausgerechnet die Cross-Platform-Unterstützung, die sonst das Argument für Bytecode und gegen native Binaries ist.

Die JVM ist jedoch nicht auf allen Plattformen von Haus aus vorhanden. Hinsichtlich der Zielplattformen für Kotlin/Native hob JetBrains bei der ersten Vorstellung auf der KotlinConf 2017 iOS hervor. Während der Weg zu Android, wo Kotlin seit einem knappen Jahr als offizielle Sprache neben Java gilt, üblicherweise über die ohnehin vorhandene JVM geht, können Entwickler auf Apples Mobilplattform keine JVM voraussetzen.

Weitere Details zu Kotlin/Native v0.7 wie die Devirtualization-Analyse zum Verbessern der Performance lassen sich dem Blogbeitrag entnehmen. Der Sourcecode ist auf GitHub zu finden. Darüber hinaus haben die Macher die Plug-ins für CLion und AppCode aktualisiert. (rme)