JetBrains a sorti Kotlin 1.4.30 avec de nouvelles fonctionnalités expérimentales qui devraient être stables pour Kotlin 1.5. Cette dernière est actuellement une version majeure dont la sortie est prévue pour la fin du premier semestre 2021. Ces fonctionnalités, considérées lors des dernières versions de Kotlin 1.4.x, incluent : un nouveau backend IR de la JVM (JMV internal representation compiler backend), un support pour les Java Records et les interfaces scellées, ainsi qu’un support pour la mise en cache de configuration pour le plugin Kotlin Gradle. JetBrains encourage la communauté Kotlin à tester ces nouvelles fonctionnalités, en particulier le nouveau backend IR de la JVM, dans leurs applications utilisant Kotlin 1.4.30 et à remonter tout bug via leur traqueur d’incidents YouTrack.
En complément du compilateur frontend qui est responsable de l’analyse du code source, le nouveau backend IR de la JVM, actuellement en version bêta, sera le compilateur par défaut pour Kotlin 1.5. Il est composé de trois backends distincts : Kotlin/JVM, Kotlin/JS et Kotlin/Native. Les deux premiers, ayant été développés indépendamment, seront intégrés dans la nouvelle infrastructure du IR de la JVM dans Kotlin/Native.
Les changements prévus avec ce nouveau backend incluent : un certain nombre de corrections de bugs qui étaient présents dans l’ancien backend et le développement de nouvelles fonctionnalités spécifiques au langage pour améliorer la performance. La nouvelle boîte à outils d’Android pour la création d’UIs, Jetpack Compose, ne fonctionnera qu’avec ce nouveau backend.
Alina Grebenkina, responsable marketing chez JetBrains, au sujet de l’intérêt de consolider les trois backends, écrit :
Nous partagerons beaucoup de logique backend et nous aurons un pipeline unifié afin que les fonctionnalités, optimisations et corrections de bugs puissent n’être faites qu’une seule fois par cible.
Le fait d’avoir une infrastructure commune ouvre la voie vers plus d’extensions de compilateur multiplateformes. Il deviendrait possible de se connecter au pipeline pour y ajouter un processus personnalisé et/ou des transformations qui seront automatiquement fonctionnels sur l’ensemble des cibles.
Avec la sortie de Java 16, Kotlin fournit un support pour le nouveau type de données Record
afin de conserver l’interopérabilité entre Kotlin et Java. Une données de type Java Record
pourra être déclarée via la nouvelle annotation @JvmRecord
de la façon suivante :
@JvmRecord
data class User(val name: String, val age: Int)
Les options du compilateur -Xjvm-enable-preview
et -language-version 1.5
sont nécessaires pour utiliser cette nouvelle fonctionnalité.
Les interfaces scellées ont été conçues en complément des classes scellées afin que la hiérarchie des classes scellées soit plus flexible. Une classe fille peut ainsi hériter de plus d’une interface scellée :
sealed interface Fillable {
fun fill()
}
sealed interface Polygon {
val vertices: List<Point>
}
class Rectangle(override val vertices: List<Point>): Fillable, Polygon {
override fun fill() {
/*...*/
}
}
Pour améliorer les performances de build, le plugin Kotlin Gradle est à présent compatible avec la fonctionnalité de mise en cache de la configuration de Gradle. Il s’agit d’une fonctionnalité en incubation chez Gradle qui améliore le temps de build en mettant en cache le résultat de la phase de configuration afin de le réutiliser pour les builds suivants. Considérez cet exemple :
$ gradle --configuration-cache help
Calculating task graph as no configuration cache is available for tasks: help
...
BUILD SUCCESSFUL in 4s
1 actionable task: 1 executed
Configuration cache entry stored.
Puis, exécutez la même commande une seconde fois :
$ gradle --configuration-cache help
Reusing configuration cache.
...
BUILD SUCCESSFUL in 500ms
1 actionable task: 1 executed
Configuration cache entry reused.
Notez la différence entre les temps de build. Le plugin fonctionne avec Gradle 5.4+. Vous trouverez plus de détails sur l’utilisation de cette fonctionnalité dans la documentation de Gradle.
L’automne dernier, JetBrains a annoncé qu’ils suivront à présent une nouvelle cadence de release pour sortir une nouvelle version de Kotlin tous les six mois.
La section « what's new » de la documentation de Kotlin fournit plus de détails sur la dernière sortie.