News

Le Compilateur K2 sera stable dans Kotlin 2.0

Read this post in other languages:

Nous travaillons depuis un certain temps sur un nouveau frontend pour le compilateur Kotlin (nom de code « K2 »). Le frontend du compilateur est responsable de l’analyse du code, de la sémantique et du flux de données, ainsi que de la résolution des appels et de l’inférence de type. Il s’agit de la partie du compilateur avec laquelle les développeurs interagissent le plus. Elle s’exécute en continu dans votre IDE, signale tous les messages d’erreur et d’avertissement et vous aide avec la saisie semi-automatique, les inspections sémantiques, les intentions et les refactorisations. Le nouveau frontend est déjà disponible en préversion. Nous continuons à le perfectionner et à le stabiliser et prévoyons d’en faire le frontend du compilateur par défaut dans une future version de Kotlin, que nous appellerons Kotlin 2.0. Poursuivez votre lecture pour en savoir plus sur la feuille de route de Kotlin 2.0 et sur nos objectifs pour cette version.

Quelle est la feuille de route pour la version 2.0 de Kotlin ?

Nous prévoyons de publier une version 1.9 de Kotlin, qui inclura les mises à jour du développement du frontend du compilateur K2 lorsqu’il sera proche de la stabilisation. Il n’y aura pas de Kotlin 1.10. Après Kotlin 1.9, la prochaine version majeure sera Kotlin 2.0.

Pourquoi Kotlin 2.0 ?

Le frontend est une partie essentielle du compilateur, et le frontend du compilateur K2 n’est pas seulement une refactorisation de l’ancien frontend, mais une réécriture complète basée sur la nouvelle architecture. Nous avons partagé des détails techniques sur les différences entre l’ancien et le nouveau frontend dans plusieurs articles de blog et vidéos et lors de conférences. Nous vous invitons à lire l’article The Road to the K2 Compiler, qui synthétise ces informations. La nouvelle architecture est plus rapide et extensible par sa conception, corrige la dette technique de l’ancien frontend du compilateur, résout les bugs et les cas critiques à divers emplacements, et ouvre la voie aux futures extensions du langage.

La version majeure d’un langage de programmation est souvent incrémentée lorsque de nouvelles fonctionnalités ou des changements importants sont introduits. Cependant, pour les programmes logiciels, une version majeure peut être incrémentée chaque fois qu’un élément est réécrit de manière substantielle pour signaler un remaniement crucial, même si l’ensemble des fonctionnalités reste quasiment le même. Bien que Kotlin soit un langage, nous avons décidé d’utiliser cette approche. En effet, le compilateur de Kotlin est avant tout un outil logiciel et la version du langage Kotlin est définie par la version de son compilateur. Nous fournissons des spécifications Kotlin en tant que référence, mais elles ne constituent pas la définition du langage.

Cela va-t-il affecter mon code ?

Kotlin évolue à chaque mise à jour de la version du langage. De nouvelles fonctionnalités sont introduites et des bugs sont corrigés. Nous faisons toujours en sorte de minimiser le nombre et l’impact des changements importants et de suivre le processus d’évolution du langage Kotlin et cela sera encore le cas pour la publication de Kotlin 2.0.

Nous avons décidé de ne pas apporter de nouvelles fonctionnalités dans Kotlin 2.0 car la réécriture du frontend du compilateur Kotlin constitue déjà une évolution considérable et introduira un certain nombre d’améliorations à elle seule. Le nouvel algorithme d’analyse du flux de données est plus précis et permettra d’obtenir des casts intelligents de bien meilleure qualité qu’auparavant. Vous pouvez consulter ces tickets pour voir des exemples concrets. Cela transforme le code rouge, non compilé en Kotlin 1.9 sur l’ancien frontend, en code vert compilé en Kotlin 2.0. Il s’agit d’un effet secondaire de la nouvelle architecture de compilateur.

Par ailleurs, une multitude de bugs de longue date ayant été corrigés, il est inévitable que certains correctifs affectent le code qui reposait sur un comportement incorrect du compilateur. Nous étudions attentivement l’impact potentiel de tous les changements de comportement entre l’ancien et le nouveau frontend K2. Si il s’avère que ces changements risqueraient d’affecter un trop grand nombre d’utilisateurs, nous essaierons dans la mesure du possible de reproduire l’ancien comportement, même s’il ne nous satisfait pas

Nous ferons tout ce qui est possible pour minimiser l’impact de la migration de votre code de Kotlin 1.9 à Kotlin 2.0. Nous vous tiendrons au courant du processus de passage à la version stable de Kotlin 2.0 et vous permettrons de tester Kotlin 2.0 à l’avance sur vos projets afin que vous puissiez nous signaler toute régression que nous aurions manquée lors de nos tests. Actuellement, nous travaillons principalement sur une version bêta du frontend du compilateur K2 axée sur la qualité, que nous prévoyons de publier plus tard dans l’année. Vous pouvez suivre ce travail dans ce ticket.

Qu’en est-il de la prise en charge des IDE pour Kotlin 2.0 ?

Le plugin Kotlin IDE est intégré dans les mises à jour d’IntelliJ IDEA et d’Android Studio. Il inclut une copie du frontend du compilateur Kotlin pour l’analyse sémantique du code, mais il ne s’agit pas de la version du compilateur Kotlin utilisée pour compiler le code. La version réelle du compilateur est déterminée par les paramètres de vos fichiers de build. Ainsi, lorsque vous compilerez votre code avec la version 2.0 de Kotlin, vous utiliserez le nouveau frontend du compilateur et vous bénéficierez de tous les avantages de la nouvelle architecture du compilateur en termes de performances. Il est toutefois possible que l’IDE utilise encore l’ancien frontend pour inspecter votre code.

Afin de vous permettre de bénéficier des avantages du nouveau frontend du compilateur dans votre IDE, nous développons une toute nouvelle version du plugin Kotlin IDE, basée sur le frontend du compilateur K2. Nous travaillons actuellement à la préversion publique de ce nouveau plugin. Vous pouvez suivre la progression de notre travail dans ce ticket.

À quoi faut-il s’attendre après Kotlin 2.0 ?

La nouvelle architecture du frontend du compilateur Kotlin 2.0 permet une implémentation optimale de nombreuses nouvelles fonctionnalités intéressantes. Certaines de ces fonctionnalités, comme les récepteurs de contexte KT-10468 sont déjà disponibles dans la préversion de l’ancien frontend du compilateur, mais elles ne seront pas activées par défaut dans Kotlin 2.0. La stabilisation des nouvelles fonctionnalités, ainsi que l’implémentation d’autres nouveautés figurant dans notre pipeline, sont prévues pour de futures versions 2.x de Kotlin. Comme d’habitude, nous vous ferons régulièrement part des avancées de nos projets en mettant à jour la feuille de route.

Quand Kotlin 3.0 sera-t-il disponible ?

Nous ne le savons pas encore. Nous envisageons d’apporter de nombreux changements importants au langage à l’avenir, y compris les demandes les plus populaires des utilisateurs collectées dans le cadre de notre Enquête sur les Fonctionnalités de Kotlin. Il est fort possible que certains de ces changements soient suffisamment importants pour justifier la publication d’une nouvelle version majeure de Kotlin.

Comment pouvez-vous nous aider ?

Essayez le nouveau frontend du compilateur et donnez-nous votre avis ! À partir de la version 1.8.20 de Kotlin, vous pouvez activer la préversion de Kotlin 2.0 via l’indicateur de version du langage.

Activer le compilateur Kotlin K2

En savoir plus

Article original en anglais de :

Delphine Massenhove

Roman Elizarov

Discover more