JetBrains dévoile la feuille de route de sa plateforme IntelliJ pour 2020
sont prévus de grosses améliorations de performance et le support de workflows de développement modernes

JetBrains vient de dévoiler certains de ses efforts actuels pour améliorer son EDI Java IntelliJ IDEA et les autres environnements de développement basés sur la plateforme IntelliJ. Les résultats de ces efforts seront publiés au cours de la prochaine année, avec certains dès la version 2020.1 prévue au printemps. Ces efforts portent principalement sur deux thèmes : la performance et le support des workflows de développement modernes.

Performance

Performances d'indexation

Deux des principaux problèmes liés aux performances des EDI de JetBrains sont les performances de démarrage (un outil qui prend beaucoup de temps pour démarrer est perçu comme lourd) et la vitesse d'indexation. JetBrains a déjà fait beaucoup d'efforts pour accélérer le démarrage de ses EDI au cours de cette année. Ainsi, pour l'année 2020, l'entreprise va tourner son attention vers les performances d'indexation.

JetBrains adopte une approche à plusieurs volets pour résoudre ce problème. Tout d'abord, l'éditeur de logiciels permet d'utiliser des segments (chuncks) d'index préconstruits, afin que chaque instance IntelliJ n'ait pas à faire le même travail d'indexation de la classe java.lang.String. JetBrains prévoit de déployer le support progressivement au cours de l'année, en commençant par le JDK, puis en couvrant les bibliothèques de Maven Central, ainsi que les interprètes et les packages dans d'autres EDI. Ils étudient également la possibilité de prendre en charge le partage de chuncks d'index pour le code source d'un projet au sein d'une équipe ou d'une entreprise.

JetBrains prévoit aussi de rendre l'indexation moins perturbatrice en rendant beaucoup plus d'actions d'EDI disponibles pendant l'indexation. En outre, les EDI basés sur IntelliJ vont détecter et vous informer des anomalies d'indexation, y compris les fichiers trop longs à indexer, les fichiers qui sont réindexés trop fréquemment et les reconstructions d'index provoquées par des exceptions. L'objectif de JetBrains est de fournir des étapes claires pour résoudre ces problèmes et améliorer les performances de ses EDI sur vos projets. Et bien sûr, l'entreprise prévoit d'investir dans de bonnes anciennes optimisations de performances pour s'assurer que le système d'indexation ne fait aucun travail inutile.

Refonte du modèle de threading

Un autre problème majeur pour les utilisateurs est le blocage de l'interface utilisateur. Cette année, JetBrains a construit une infrastructure pour signaler de tels blocages et apporté des modifications architecturales pour en corriger un grand nombre (par exemple, des listeners asynchrones pour les événements du système de fichiers). Au cours de la prochaine année et au-delà, JetBrains envisage de franchir une étape encore plus grande et de déplacer les actions nécessitant un verrouillage en écriture hors du thread d'interface utilisateur.

Au tout début d'IntelliJ IDEA, une décision architecturale a été prise : elle nécessitait que la plupart des opérations qui modifient les structures de données internes de l'EDI s'exécutent sur le thread d'interface utilisateur. Cela concerne à la fois des actions de base (insertion d'un caractère dans un document) et des opérations à grande échelle (changement de nom d'une méthode ayant un millier usages). L'avantage de cette architecture est un modèle de programmation simple, mais l'inconvénient évident est que la réactivité de l'interface utilisateur souffre dans de nombreux scénarios.

Au fil des ans, JetBrains a donc trouvé des moyens de contourner les limites de cette architecture, principalement en divisant les opérations importantes en parties qui s'exécutent en arrière-plan et qui sont appliquées dans le thread d'interface utilisateur. Une solution plus fondamentale serait de se débarrasser complètement de l'exigence de thread d'interface utilisateur, mais jusqu'à récemment, JetBrains ne savait pas comment le faire sans réécriture majeure de son propre code et des plugins tiers. La bonne nouvelle est que l'éditeur de logiciels a maintenant une solution architecturale qui permet une migration étape par étape et a commencé le travail d'implémentation.

L'année prochaine, JetBrains va refactoriser les composants essentiels d'interface utilisateur et API de la plateforme IntelliJ pour utiliser le nouveau modèle de threading. Une fois que le nouveau modèle est stable et qu'on notera une nette amélioration, JetBrains passera au nouveau modèle dans tous ses EDI, ce qui rendra l'interface utilisateur plus réactive.

Chargement et déchargement des plugins sans redémarrage

Une préversion de cette fonctionnalité était déjà disponible dans IntelliJ IDEA 2019.3 : vous pouvez installer des plugins de thème et de clavier sans redémarrer l'EDI. Dans la version 2020.1 de l'EDI, JetBrains prévoit d'étendre ce support à tout type de plugins. Le chargement et le déchargement sans redémarrage seront pris en charge pour un grand pourcentage de plugins groupés, et des instructions de support sont fournies aux développeurs de plugins tiers.

À ce stade, l'avantage le plus important pour l'utilisateur sera la mise à niveau transparente des plugins, ne nécessitant pas de redémarrage de l'EDI. Mais l'objectif final de cet effort (pour les versions au-delà de 2020.1) est d'avoir un EDI qui s'adapte à chaque projet que vous ouvrez. Le plugin Spring sera chargé uniquement pour les projets qui utilisent Spring, le plugin Angular sera chargé uniquement pour les projets Angular, etc. Et si vous n'utilisez pas une technologie, vous ne verrez aucun élément d'interface utilisateur lié à celle-ci, et vous ne verrez aucun impact sur les performances ou l'utilisation de la mémoire du plugin prenant en charge cette technologie.


Support des workflows de développement modernes

Édition collaborative

L'édition collaborative est la fonctionnalité la plus votée dans l'outil de suivi des problèmes de JetBrains et l'entreprise dit être en train d'y travailler. Dans l'approche qu'elle suit actuellement, il y aura un EDI principal, qui sera l'EDI fonctionnant sur la machine où se trouve le code source, et les autres utilisateurs pourront connecter leurs EDI au principal en tant que « clients légers », ne nécessitant pas d'accès direct au code source. Chaque utilisateur connecté aura son propre état (ensemble de fichiers ouverts, position du curseur, liste des variantes de complétion, etc.), avec l'option pour « suivre » un autre utilisateur s'il le désire.

Les utilisateurs du « client léger » auront accès aux principales fonctionnalités de l'EDI telles que la navigation, l'autocomplétion et le débogage, mais pas l'ensemble complet des fonctionnalités. (Par exemple, dans la version initiale, les clients légers peuvent ne pas être en mesure d'effectuer des opérations de contrôle de version.) Notez que l'ensemble des fonctionnalités pour les clients légers n'a pas encore été décidé, et JetBrains ne pourra pas répondre aux questions sur le moment ou si une fonctionnalité spécifique sera prise en charge.

La prise en charge de l'édition collaborative est basée sur le protocole Rider, il est donc très probable qu'il sera initialement publié dans Rider, puis étendu à d'autres EDI. Dans tous les cas, ne vous attendez pas à ce que des travaux dans ce sens soient publiés dans IntelliJ IDEA 2020.1 - il s'agit d'un effort à plus long terme. Notez surtout que l'approche actuelle de JetBrains pour l'édition collaborative est basée sur son propre protocole et ne prend pas en charge l'interopérabilité avec les EDI non développés par l'éditeur de logiciels.

JetBrains envisage aussi la possibilité d'étendre l'approche « client léger » à d'autres scénarios au-delà de l'édition collaborative, tels que l'exécution du backend de l'EDI dans le cloud, mais l'entreprise dit ne pas être prête à annoncer des plans spécifiques dans ce domaine.

Exécution dans le cloud

Depuis un certain temps, de nombreux produits JetBrains prennent en charge l'exécution et le débogage de votre code sur des machines autres que la vôtre ou à l'intérieur de conteneurs. Cependant, peu de choses étaient partagées entre les implémentations de ces fonctionnalités dans différents produits, et même les fonctionnalités de base telles que la prise en charge de Docker ont une interface utilisateur incohérente.

JetBrains introduit maintenant un concept général d'un environnement cible, qui fournit un moyen de copier des fichiers depuis ou vers celui-ci, et de démarrer des processus dans cet environnement. Dans IntelliJ IDEA 2020.1, les environnements pris en charge incluront votre machine locale, un conteneur Docker ou une machine connectée via ssh. Le choix de l'environnement cible sera initialement disponible pour les configurations d'exécution Java et Go.

Au cours des versions ultérieures, JetBrains prévoit d'unifier son support existant de Docker et des interprètes distants autour de la nouvelle architecture. En plus de cela, l'entreprise fournira une intégration plus avancée avec le cloud, afin que vous puissiez demander l'exécution d'un processus sur une nouvelle machine virtuelle dans le cloud sans spécifier les détails d'une machine spécifique à laquelle se connecter.

Refonte du modèle de projet

Le modèle de projet est la façon dont l'EDI représente la structure de votre projet - quels fichiers appartiennent au projet, comment ils dépendent les uns des autres, quelles bibliothèques sont utilisées, etc. Le modèle de projet d'IntelliJ IDEA a bien servi au fil des ans, mais il a certaines limites.

Premièrement, il ne prend pas en charge le mélange arbitraire de projets de différents types. Par exemple, AppCode peut ouvrir un projet Xcode et Rider peut ouvrir une solution Visual Studio, mais il n'y a aucun moyen d'ouvrir un projet Gradle et un projet Xcode dans le même cadre d'EDI. Deuxièmement, le modèle de projet fonctionne au niveau des répertoires, pas des fichiers, et il ne peut pas représenter différents fichiers dans le même répertoire ayant des dépendances différentes. Cela rend difficile l'intégration de systèmes de build tels que Bazel dans l'EDI et présente des défis dans d'autres scénarios.

Un tout nouveau modèle de projet, que JetBrains appelle en interne « modèle d'espace de travail », supprimera ces limitations. Il apporte également des avantages supplémentaires tels que de meilleures performances lors de l'ouverture du projet, une synchronisation plus fluide avec Maven et Gradle et un modèle de programmation plus agréable. JetBrains commencera par changer son implémentation interne en modèle d'espace de travail, et une fois que cela sera stable, l'entreprise procédera à l'ajout de fonctionnalités visibles par l'utilisateur telles que la combinaison de projets de types arbitraires dans le même cadre d'EDI.

Les efforts décrits ici ne sont qu'une petite partie de ce sur quoi l'équipe IntelliJ IDEA a travaillé, et JetBrains prévoit de publier plus d'informations sur ses plans après les vacances. Bien sûr, tout cela est susceptible de changer, et il est fort possible que certains des travaux décrits ci-dessus ne soient pas publiés. Mais si cela arrive, JetBrains assure que ce sera pour proposer d'autres choses plus intéressantes pour les développeurs.

Télécharger IntelliJ IDEA

Voir aussi :

Sortie de DataGrip 2019.3, l'EDI de JetBrains destiné aux administrateurs de bases de données vient avec le support de MongoDB et une première version du débogueur PL/SQL
RubyMine 2019.3 est disponible avec la possibilité de configurer le mappage pour RuboCop, apporte un meilleur aperçu du code et améliore le débogueur
IntelliJ IDEA 2019.3 est disponible avec une amélioration notable des performances et de la qualité, ainsi que de nombreuses corrections de bugs
WebStorm 2019.3 est disponible avec un démarrage plus rapide, une prise en charge plus avancée de Vue.js et une complétion de code plus intelligente pour JavaScript
PhpStorm 2019.3 est disponible et intègre un support complet de PHP 7.4, le style de code PSR-12, le support de MongoDB, le Windows Subsystem for Linux (WSL), et autres
Sortie de CLion 2019.3, la dernière version majeure de l'année 2019 pour l'EDI C/C++ de Jetbrains