Programmiersprache: Kotlin 1.4.20 gibt sich dynamisch und fehlertolerant

Das Verketten von Strings geschieht in der JVM weitgehend über Dynamic Method Invocation, und für JavaScript-Code kann der Compiler Fehler ignorieren.

In Pocket speichern vorlesen Druckansicht 9 Kommentare lesen
Luftbild einer Insel

Die Insel Kotlin bei St. Petersburg

(Bild: news.ifmo.ru)

Lesezeit: 4 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

JetBrains hat Version 1.4.20 der Programmiersprache Kotlin veröffentlicht. Das Release bringt zahlreiche Änderungen unter der Haube mit, die sich vor allem auf die Varianten für JavaScript und die Java Virtual Machine (JVM) beziehen.

Im Vergleich zu der im August veröffentlichten Version 1.4 gibt es erwartungsgemäß keine syntaktischen Neuerungen. Kotlin unterscheidet zwischen Feature Releases nach dem Schema 1.x mit größeren Änderungen an der Programmiersprache und inkrementellen Releases 1.x.y, die Neuerungen in der Toolchain, hinsichtlich der Performance oder der internen Umsetzung mitbringen. Der Wert für y steigt regulär in Zehnerschritten, eine Einerstelle als 1.x.yz markiert ein reines Bugfix-Release.

Im Zusammenspiel mit der JVM setzt Kotlin beim Verketten von Zeichenketten nun ebenso wie Java 9 auf dynamische Methodenaufrufe (Dynamic Method Invocation) über die in Java 7 eingeführte invokedynamic-Anweisung im Bytecode. Das Vorgehen soll zum einen schneller sein und zum anderen Raum für künftige Optimierungen ohne Änderungen am Bytecode schaffen.

In Kotlin 1.4.20 ist die Funktionsweise als experimentell gekennzeichnet. Entwicklerinnen und Entwickler müssen sie explizit über die Compiler-Option -Xstring-concat aktivieren. Sie funktioniert ebenso für Verkettungen über den Plus-Operator a + b als auch für Verbindung über den expliziten Methodenaufruf a.plus(b) beziehungsweise die Referenzierung mit (a::plus)(b). Daneben gilt sie für die Methode toString im Zusammenspiel mit Inline- und Datenklassen sowie für die meisten String Templates.

Für die Anbindung an JavaScript über Kotlin/JS hat das aktuelle Release zahlreiche Neuerungen an Bord. Die interessante dürfte eine neue Option sein, mit der die Toolchain Fehler beim Kompilieren ignoriert, um den restlichen Code trotzdem auszuprobieren. Als Anwendungsszenarien nennt die Dokumentation unter anderem das Refactoring des Codes, bei dem die Fehlermeldungen einen Teil des Programms betreffen, das mit dem aktuell bearbeiteten nicht zusammenhängt.

Der Compiler kann wahlweise alle Fehler oder nur semantische ignorieren. Für Letztere scheitert das Kompilieren nach wie vor bei Syntaxfehlern, aber der Compiler winkt semantisch falsche Konstrukte wie die fehlerhafte Typzuordnung in val x: String = 3 durch.

Zum Aktivieren der Fehlertoleranz dient die Compiler-Option -Xerror-tolerance-policy={SEMANTIC|SYNTAX}, die sich direkt in das Gradle-Skript einbinden lässt. Die Option SEMANTIC ignoriert nur semantische Fehler, während das Kompilieren mit der SYNTAX-Option auch bei Syntaxfehlern weiter läuft.

kotlin {
  js(IR) {
    compilations.all {
      compileKotlinTask.kotlinOptions.freeCompilerArgs 
        += listOf("-Xerror-tolerance-policy=SYNTAX")
    }
  }
}

Das Ignorieren der Fehler durch den Compiler ist ebenso als experimentell gekennzeichnet wie einige weitere Ergänzungen zu Kotlin/JS, darunter die Möglichkeit, individuelle Einträge für das Erstellen von package.json im Gradle-Skript einzutragen. Entwicklerinnen und Entwickler können dazu die customField-Funktion im packageJson-Block nutzen.

Kotlin 1.4.20 bringt zudem drei Vorlagen für Kotlin/JS mit, die Grundlagen für unterschiedliche JavaScript-Zielplattformen vorgeben: Browser Application zielt auf herkömmliche JavaScript-Anwendungen, die im Browser laufen, React Application enthält die notwendigen Bausteine inklusive Kotlin-Wrappers zum Erstellen einer React-Anwendung, und Node.js Application dient als Basis für das Zusammenspiel mit Node.js.

Kotlin: von der JVM zur Multiplattform

(Bild: JetBrains)

Ursprünglich hatte JetBrains die Programmiersprache als Alternative zu Java ins Rennen geschickt. In den Anfängen war die Sprache auch auf die JVM begrenzt. Besonders auf Android hat sie einen Siegeszug angetreten, seit Google sie 2017 offiziell als Alternative zu Java auch in Android Studio aufgenommen hat. Inzwischen ist die Programmiersprache aber auf diverse Plattformen ausgelegt: Kotlin/Native ermöglicht die Ausführung ohne virtuelle Maschine, vor allem um Plattformen wie iOS abzudecken, die von Haus aus keine JVM an Bord haben.

Mit Kotlin/JS ist zudem eine Anbindung an JavaScript verfügbar, und seit Kotlin 1.2 lassen sich Multiplattformprojekte erstellen, die mit einer Codebasis JVM und JavaScript abdecken. Den Namen, der hierzulande gerne Trolle in Foren anzieht, verdankt die Sprache einer Insel vor St. Petersburg. Das dortige JetBrains-Team hat die Sprache anfänglich maßgeblich entwickelt.

Weitere Neuerungen in Version 1.4.20 der Programmiersprache wie das optionale Verpacken von Objective-C Exceptions in Kotlin Exceptions für Kotlin/Native im Zusammenspiel mit iOS-Anwendungen lassen sich dem Kotlin-Blog entnehmen. Das aktuelle Release lässt sich direkt aus den Entwicklungsumgebungen IntelliJ IDEA und Android Studio installieren. Außerdem ist es über das GitHub-Repository von Kotlin verfügbar, das auch die vollständige Liste der Änderungen im Changelog aufzeigt.

(rme)