Kotlin 1.5.20 est disponible avec un bon lot de nouveautés et améliorations. Il s'agit notamment de :
- Améliorations de Kotlin/JVM, y compris la concaténation de chaînes via invokedynamic. On note aussi la prise en charge expérimentale de l'appel des méthodes Java générées par Lombok et des annotations de nullité JSpecify.
- Améliorations Kotlin/Native, y compris l'exportation expérimentale des commentaires KDoc vers les en-têtes Objective-C.
- Guide de migration du backend Kotlin/JS IR .
- Améliorations de Gradle, y compris l'exécution parallèle de tâches Kotlin.
- Améliorations de la bibliothèque standard pour aligner le comportement des conversions de caractères sur toutes les plateformes.
Kotlin/JVM
Pour bénéficier des dernières fonctionnalités JVM, Kotlin a étendu l'utilisation des invocations dynamiques (invokedynamic). Kotlin 1.5.0 a apporté le support par défaut pour la compilation des adaptateurs SAM, tout en laissant des fonctionnalités similaires pour la concaténation de chaînes et les lambdas en phase expérimentale. Dans Kotlin 1.5.20, la concaténation des chaînes de compilation aux appels dynamiques est désormais supportée par défaut.
Pour maintenir la meilleure interopérabilité avec Java, Kotlin 1.5.20 apporte un support expérimental pour :
- L'appel de méthodes générées par Lombok dans le même module. Le plugin de compilateur Lombok expérimental permet d'utiliser les déclarations Java générées par Lombok dans des sources mixtes Kotlin/Java. Les annotations Lombok ne fonctionnent que dans les sources Java et sont ignorées si vous les utilisez dans le code Kotlin. Les annotations prises en charge comprennent @With, @Data, @Getter, @Setter, @NoArgsConstructor, @RequiredArgsConstructor et @AllArgsConstructor.
- Le projet JSecify, qui inclut un ensemble unifié standard d'annotations de nullité Java. Cela vous permet de fournir des informations de nullité plus détaillées pour aider Kotlin à maintenir la sécurité de type null lors de l'interopérabilité avec Java. Vous pouvez définir la nullabilité par défaut pour la déclaration, le package ou la portée du module, spécifier la nullabilité paramétrique, etc. Veuillez toutefois noter que le projet JSpecify est en cours de développement. Son API et son implémentation peuvent donc changer considérablement à tout moment. Voici un exemple de la façon dont Kotlin peut gérer les annotations JSpecify :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | // JavaClass.java import org.jspecify.nullness.*; @NullMarked public class JavaClass { public String notNullableString() { return ""; } public @Nullable String nullableString() { return ""; } } |
Code : | Sélectionner tout |
1 2 3 4 5 6 | // Test.kt fun kotlinFun() = with(JavaClass()) { notNullableString().length // OK nullableString().length // Warning: receiver nullability mismatch } |
Kotlin/Native
Le compilateur Kotlin/Native peut désormais exporter les commentaires de documentation (KDoc) du code Kotlin vers les frameworks Objective-C. Cela rendra ces commentaires visibles pour les utilisateurs du framework. Ce support fonctionne également pour Swift, et il est expérimental.
Une autre amélioration concerne le fonctionnement de Array.copyInto() à l'intérieur d'un tableau. Il est désormais jusqu'à 20 fois plus rapide (selon le nombre d'objets copiés) grâce à l'optimisation de la gestion de la mémoire pour ce cas.
Kotlin/JS
Kotlin 1.5.0 a déjà livré le nouveau backend JVM IR stable. La seule pièce manquante du nouveau backend Kotlin IR est donc la partie stable JS. Un nouveau guide de migration vous permettra de migrer facilement vers le nouveau backend JS. Le guide décrit les modifications que vous devrez apporter à votre code Kotlin/JS pour le faire fonctionner avec le nouveau compilateur IR. JetBrains poursuit son travail pour rendre le backend Kotlin/JS IR stable et vos retours seront donc les bienvenus.
Gradle
Kotlin 1.5.20 apporte quelques améliorations d'outils :
- L'exécution parallèle des tâches Kotlin est désormais entièrement contrôlée par le mécanisme d'exécution parallèle de Gradle. La propriété kotlin.parallel.tasks.in.project a été dépréciée.
- JetBrains a implémenté la mise en cache expérimentale des classloaders de processeurs d'annotation dans kapt (Kotlin Annotation processing tool), ce qui rend l'outil plus rapide pour des exécutions consécutives de Gradle dans certains cas.
Bibliothèque standard
Kotlin 1.5.20 continue de fournir une expérience similaire sur toutes les plateformes pour les fonctionnalités Char de la bibliothèque standard :
- isLowerCase()/isUpperCase() fournit désormais le même résultat sur toutes les plateformes en vérifiant tous les caractères, pas seulement les lettres.
- digitToInt() prend désormais en charge tous les caractères numériques Unicode pour toutes les plateformes – Kotlin/JVM, Kotlin/Native et Kotlin/JS. Auparavant, il ne fournissait un support complet que pour Kotlin/JVM.
Mise à jour automatique vers Kotlin 1.5.20
Si vous utilisez IntelliJ IDEA ou Android Studio, votre EDI vous donnera la possibilité de passer automatiquement à la nouvelle version de Kotlin dès qu'elle sera disponible. Vous pouvez toujours télécharger les dernières versions de ces EDI pour obtenir une prise en charge étendue de Kotlin :
- IntelliJ IDEA pour développer des applications Kotlin pour différentes plateformes.
- Android Studio pour le développement d'applications mobiles Android et multiplateformes.
Assurez-vous d'avoir également mis à jour les bibliothèques kotlinx vers des versions compatibles et spécifié la version 1.5.20 de Kotlin dans les scripts de construction de vos projets existants.
Nouveautés dans Kotlin 1.5.20
Consulter la feuille de route de Kotlin