Dev News Daily ENDE

Kotlin Multiplatform bekommt optionale getrennte Kompilierung wie in der IDE

JetBrains hat einen neuen, optionalen Weg beschrieben, Kotlin-Multiplatform-Module zu kompilieren. Eingeführt wurde er mit Kotlin 2.5.0-Beta1 als experimentelle Funktion, standardmäßig abgeschaltet. Das Unternehmen nennt ihn getrennte Kompilierung, und er zielt auf zwei Probleme, auf die Multiplatform-Entwickler heute stoßen.

Das erste: IDE und Compiler können uneins sein. IntelliJ IDEA analysiert Code in einem gemeinsamen Source Set wie commonMain gegen das, was eine Abhängigkeit in ihrem eigenen gemeinsamen Code anbietet. Der Compiler dagegen kompiliert beim Bau eines Plattformziels wie der JVM commonMain zusammen mit dem Plattform-Source-Set gegen die Plattformartefakte der Abhängigkeit. Gemeinsamer Code kann so stillschweigend auf eine nur für die JVM vorhandene Deklaration einer Bibliothek zugreifen: Der Compiler akzeptiert es, die IDE meldet eine unaufgelöste Referenz, oder Überladung und Typinferenz fallen in beiden unterschiedlich aus.

Das zweite: Code in commonTest kann unerwartet etwas aufrufen, das nur in einem Plattform-Source-Set existiert, und damit die Annahme brechen, dass gemeinsamer Code wirklich gemeinsam ist. Im neuen Verfahren werden gemeinsame Source Sets gegen die gemeinsamen Deklarationen ihrer Abhängigkeiten kompiliert, also mit derselben Sicht, die die IDE schon hat. Problematische Aufrufe aus gemeinsamem Code in plattformspezifischen Bibliothekscode werden so einheitlich gemeldet. Laut JetBrains ermöglicht der Ansatz zudem inkrementelle Kompilierung gemeinsamer Source Sets.

Aktiviert wird die Funktion über eine Compiler-Option in gradle.properties; der Beitrag nennt bekannte Probleme.

Kotlin Multiplatform bekommt optionale getrennte Kompilierung wie in der IDE
Kotlin Multiplatform bekommt optionale getrennte Kompilierung wie in der IDE — Dev News Daily

Was das bedeutet

Für Teams, die gelernt haben, dem Compiler mehr zu trauen als der roten Unterstreichung, kehrt sich der Normalfall um: Die strengere Sicht der IDE wird zur Regel. Wer die Option in einem bestehenden Projekt einschaltet, wird vermutlich Aufrufe finden, die bisher kompilierten, und genau das sind die Stellen, an denen ein zweites Plattformziel später gescheitert wäre.

Geschrieben von Victoria Shinder.