{"id":34219,"date":"2020-01-24T16:32:51","date_gmt":"2020-01-24T15:32:51","guid":{"rendered":"https:\/\/blog.jetbrains.com\/fr\/?p=501"},"modified":"2020-01-24T16:50:38","modified_gmt":"2020-01-24T15:50:38","slug":"feuille-de-route-de-la-plateforme-intellij-pour-2020","status":"publish","type":"post","link":"https:\/\/blog.jetbrains.com\/fr\/2020\/01\/24\/feuille-de-route-de-la-plateforme-intellij-pour-2020\/","title":{"rendered":"Feuille de route de la plateforme IntelliJ pour 2020"},"content":{"rendered":"Nous souhaitons vous pr\u00e9senter quelques uns de nos travaux actuels pour l\u2019am\u00e9lioration d'IntelliJ IDEA et des autres EDI bas\u00e9s sur la plateforme IntelliJ. Les r\u00e9sultats de ces travaux seront disponibles cette ann\u00e9e, pour certains d'entre eux d\u00e8s la version 2020.1 qui sortira au printemps. Ils sont centr\u00e9s sur deux objectifs principaux : les performances et la prise en charge des workflows de d\u00e9veloppement modernes.\r\nPerformances\r\nPerformances de l'indexation\r\nDeux des principaux probl\u00e8mes de performances de nos EDI concernent le d\u00e9marrage (un outil qui prend beaucoup de temps pour d\u00e9marrer est per\u00e7u comme lourd) et la vitesse d'indexation. Nous avons d\u00e9j\u00e0 beaucoup fait pour acc\u00e9l\u00e9rer le d\u00e9marrage l\u2019ann\u00e9e derni\u00e8re, aussi cette ann\u00e9e nous pr\u00e9voyons de travailler plus sur les performances d'indexation.\r\n\r\nPour traiter ce probl\u00e8me, nous avons adopt\u00e9 une approche pluridimensionnelle. Tout d'abord, nous permettons d'utiliser des segments d'index pr\u00e9construits afin que chaque instance IntelliJ n'ait pas \u00e0 faire le m\u00eame travail d'indexation de la classe java.lang.String. Nous pr\u00e9voyons de d\u00e9ployer la prise en charge progressivement au cours de l'ann\u00e9e, en commen\u00e7ant par le JDK, puis en couvrant les biblioth\u00e8ques de Maven Central, ainsi que les interpr\u00e9teurs et les paquets dans d'autres EDI. Nous \u00e9tudions \u00e9galement les moyens de prendre en charge le partage de blocs d'index pour le code source du projet au sein d'une \u00e9quipe ou d'une entreprise, mais nous n'avons pas de plans sp\u00e9cifiques \u00e0 ce stade.\r\n\r\nDeuxi\u00e8mement, nous pr\u00e9voyons de r\u00e9duire les perturbations de l'indexation en rendant beaucoup plus d'actions de l'EDI disponibles pendant cette op\u00e9ration.\r\n\r\nTroisi\u00e8mement, nous allons d\u00e9tecter les anomalies d'indexation, notamment les fichiers trop longs \u00e0 indexer, les fichiers r\u00e9index\u00e9s trop fr\u00e9quemment et les reconstructions d'index provoqu\u00e9es par des exceptions, et vous en informer. Notre objectif est de fournir des \u00e9tapes claires pour r\u00e9soudre ces probl\u00e8mes et d'am\u00e9liorer les performances de nos EDI pour vos projets.\r\n\r\nEt bien s\u00fbr, nous pr\u00e9voyons d'investir dans de bonnes vieilles optimisations de performances pour nous assurer que le syst\u00e8me d'indexation ne fait aucun travail inutile et ne consomme pas plus que n\u00e9cessaire.\r\nRemaniement du verrouillage en lecture\/\u00e9criture du mod\u00e8le de threading\r\nUn autre probl\u00e8me majeur pour nos utilisateurs est le blocage de l'interface utilisateur. L'an dernier, nous avons construit une infrastructure permettant de signaler de tels blocages et apport\u00e9 des modifications architecturales pour en corriger un grand nombre (par exemple, des \u00e9couteurs asynchrones pour les \u00e9v\u00e9nements du syst\u00e8me de fichiers). Au cours de cette ann\u00e9e et des suivantes, nous pr\u00e9voyons d'aller plus loin et de d\u00e9placer les actions n\u00e9cessitant un verrouillage en \u00e9criture hors du thread de l'interface utilisateur.\r\n\r\nAu tout d\u00e9but d'IntelliJ IDEA, une d\u00e9cision architecturale a \u00e9t\u00e9 prise qui n\u00e9cessitait que la plupart des op\u00e9rations qui modifient les structures de donn\u00e9es internes de l'EDI s'ex\u00e9cutent sur le thread de l'interface utilisateur. Cela concerne les actions de base (insertion d'un caract\u00e8re dans un document) comme les op\u00e9rations \u00e0 grande \u00e9chelle (changement de nom d'une m\u00e9thode ayant des milliers utilisations). Cette architecture a l'avantage de simplifier le mod\u00e8le de programmation, mais l'inconv\u00e9nient \u00e9vident est que la r\u00e9activit\u00e9 de l'interface utilisateur en souffre dans de nombreux sc\u00e9narios.\r\n\r\nAu fil des ann\u00e9es, nous avons trouv\u00e9 des moyens de contourner les limites de cette architecture, principalement en divisant les op\u00e9rations de grande taille en plusieurs parties qui s'ex\u00e9cutent en arri\u00e8re-plan et qui sont appliqu\u00e9es dans le thread de l'interface utilisateur. Une solution plus fondamentale consisterait \u00e0 se d\u00e9barrasser enti\u00e8rement de l'exigence du thread de l'interface utilisateur, mais jusqu'\u00e0 r\u00e9cemment, nous ne savions pas comment le faire sans une r\u00e9\u00e9criture majeure de notre propre code et des plugins tiers. Nous avons d\u00e9sormais une solution architecturale qui permet une migration \u00e9tape par \u00e9tape, et nous avons commenc\u00e9 le travail d'impl\u00e9mentation.\r\n\r\nCette ann\u00e9e nous allons refactoriser les composants essentiels de l'interface utilisateur et les API de la plateforme IntelliJ pour utiliser le nouveau mod\u00e8le de threads. Lorsque le nouveau mod\u00e8le sera stable et que l\u2019am\u00e9lioration sera perceptible, nous passerons au nouveau mod\u00e8le dans tous les EDI pour rendre l'interface utilisateur plus r\u00e9active.\r\nChargement et d\u00e9chargement des plugins sans red\u00e9marrage\r\nVous avez d\u00e9j\u00e0 eu un aper\u00e7u de cette fonctionnalit\u00e9 dans IntelliJ IDEA 2019.3, avec la possibilit\u00e9 d'installer des plugins de th\u00e8mes et des configurations clavier sans red\u00e9marrage. Dans la version 2020.1, nous pr\u00e9voyons d'\u00e9tendre cette prise en charge \u00e0 tous les types de plugins. Nous prendrons en charge le chargement et le d\u00e9chargement sans red\u00e9marrage pour un grand nombre de plugins group\u00e9s et nous fournirons\u00a0des instructions de prise en charge aux d\u00e9veloppeurs de plugins tiers. \u00c0 ce stade, l'avantage le plus important pour l'utilisateur consistera \u00e0 pouvoir mettre \u00e0 niveau les plugins en toute fluidit\u00e9, sans avoir \u00e0 red\u00e9marrer l'EDI.\r\n\r\nL'objectif final de ce travail (pour les versions post\u00e9rieures \u00e0 2020.1) est d'obtenir un EDI qui s'adapte \u00e0 chaque projet que vous ouvrez. Le plugin Spring sera charg\u00e9 uniquement pour les projets qui utilisent Spring, le plugin Angular uniquement pour les projets Angular, etc. Si vous n'utilisez pas une technologie, vous n'en verrez aucun \u00e9l\u00e9ment dans l'interface utilisateur et ne subirez aucun impact sur les performances ou l'utilisation de la m\u00e9moire par le plugin prenant en charge cette technologie.\r\nPrise en charge des workflows\r\n\u00c9dition collaborative\r\nL'\u00e9dition collaborative est la fonctionnalit\u00e9 la plus demand\u00e9e dans notre outil de suivi des tickets et nous sommes ravis d'annoncer que nous y travaillons. Dans l'approche que nous avons actuellement, il y aura un EDI principal, fonctionnant sur la machine o\u00f9 se trouve le code source, et les autres utilisateurs pourront connecter leurs EDI au principal en tant que \"clients l\u00e9gers\", sans avoir besoin d'un acc\u00e8s direct au code source. Chaque utilisateur connect\u00e9 aura son propre \u00e9tat (ensemble de fichiers ouverts, position du curseur, liste des variantes de saisie automatique, etc.), avec l'option de \"suivre\" un autre utilisateur s'il le souhaite.\r\n\r\nLes utilisateurs du \"client l\u00e9ger\" auront acc\u00e8s aux principales fonctionnalit\u00e9s de l'EDI telles que la navigation, la saisie automatique et le d\u00e9bogage, mais pas \u00e0 l'ensemble des fonctionnalit\u00e9s. (Par exemple, dans la version initiale, les clients l\u00e9gers peuvent ne pas \u00eatre en mesure d'effectuer des op\u00e9rations de contr\u00f4le des versions.) Notez que l'ensemble des fonctionnalit\u00e9s pour les clients l\u00e9gers n'est pas finalis\u00e9 et nous ne pouvons donc pas encore dire si une fonctionnalit\u00e9 sp\u00e9cifique sera prise en charge ni \u00e0 quel moment.\r\n\r\nLa prise en charge de l'\u00e9dition collaborative s'appuie sur le protocole de Rider, il est donc tr\u00e8s probable qu'elle sera initialement publi\u00e9e dans Rider puis \u00e9tendue \u00e0 d'autres EDI. Dans tous les cas, ne vous attendez pas \u00e0 en voir les r\u00e9sultats d\u00e8s la version 2020.1 d'IntelliJ IDEA. Il s'agit d'un travail de plus longue haleine.\r\n\r\nNotez \u00e9galement que notre approche actuelle de l'\u00e9dition collaborative repose sur notre propre protocole et ne prend pas en charge l'interop\u00e9rabilit\u00e9 avec des EDI ext\u00e9rieurs \u00e0 JetBrains.\r\n\r\nNous envisageons la possibilit\u00e9 d'\u00e9tendre l'approche du \"client l\u00e9ger\" \u00e0 d'autres sc\u00e9narios au-del\u00e0 de l'\u00e9dition collaborative, comme l'ex\u00e9cution du backend de l'EDI dans le cloud, mais nous n'avons pas encore de plans sp\u00e9cifiques dans ce domaine.\r\nPrise en charge de l'ex\u00e9cution dans le cloud\r\nDepuis un certain temps, de nombreux produits JetBrains prennent en charge l'ex\u00e9cution et le d\u00e9bogage de votre code sur des machines autres que la v\u00f4tre ou \u00e0 l'int\u00e9rieur de conteneurs. Toutefois, peu d'\u00e9l\u00e9ments \u00e9taient partag\u00e9s entre les impl\u00e9mentations de ces fonctionnalit\u00e9s dans diff\u00e9rents produits, et m\u00eame les fonctionnalit\u00e9s de base telles que la prise en charge de Docker manquent de coh\u00e9rence dans leur interface utilisateur.\r\n\r\nNous pr\u00e9sentons maintenant un concept g\u00e9n\u00e9ral d'environnement cible, qui fournit un moyen de copier des fichiers depuis ou vers celui-ci, et d'y d\u00e9marrer des processus. Dans IntelliJ IDEA 2020.1, les environnements pris en charge inclueront votre machine locale, un conteneur Docker ou une machine connect\u00e9e via ssh. Le choix de l'environnement cible sera initialement disponible pour les configurations d'ex\u00e9cution Java et Go.\r\n\r\nDans les versions ult\u00e9rieures, nous pr\u00e9voyons d'unifier notre prise en charge existante de Docker et des interpr\u00e9teurs \u00e0 distance autour de la nouvelle architecture. En plus de cela, nous fournirons une int\u00e9gration approfondie avec le cloud, afin que vous puissiez indiquer que le processus doit s'ex\u00e9cuter sur une nouvelle machine virtuelle dans le cloud, sans pr\u00e9ciser en d\u00e9tail \u00e0 quelle machine se connecter.\r\nRefonte du mod\u00e8le de projet\r\nLe mod\u00e8le de projet est la facon dont l'EDI repr\u00e9sente la structure de votre projet : quels fichiers appartiennent au projet, comment ils d\u00e9pendent les uns des autres, quelles biblioth\u00e8ques sont utilis\u00e9es, etc. Le mod\u00e8le de projet d\u2019IntelliJ IDEA a bien servi au fil des ans, mais il comporte certaines limites. Tout d'abord, il ne prend pas en charge une combinaison arbitraire de projets de diff\u00e9rents 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\u00eame cadre d'EDI. Deuxi\u00e8mement, le mod\u00e8le de projet fonctionne au niveau des r\u00e9pertoires, pas des fichiers, et il ne peut pas repr\u00e9senter diff\u00e9rents fichiers du m\u00eame r\u00e9pertoire qui auraient des d\u00e9pendances diff\u00e9rentes. Cela rend difficile l'int\u00e9gration de syst\u00e8mes de construction tels que Bazel dans l'EDI et reste probl\u00e9matique dans d'autres sc\u00e9narios.\r\n\r\nLe mod\u00e8le de projet remani\u00e9, que nous appelons en interne \"mod\u00e8le d'espace de travail\", supprimera ces limitations. Il apporte \u00e9galement des avantages suppl\u00e9mentaires avec une ouverture de projet acc\u00e9l\u00e9r\u00e9e, une synchronisation plus fluide avec Maven et Gradle et un mod\u00e8le de programmation plus convivial. Nous allons commencer par basculer l'impl\u00e9mentation interne vers le mod\u00e8le d'espace de travail. Une fois cette phase stabilis\u00e9e, nous proc\u00e9derons \u00e0 l'ajout de fonctionnalit\u00e9s visibles par l'utilisateur comme la combinaison de projets de types arbitraires dans le m\u00eame cadre d'EDI.\r\nR\u00e9sum\u00e9\r\nLes projets d\u00e9crits dans cet article ne repr\u00e9sentent qu'une petite partie de ce sur quoi a travaill\u00e9 notre \u00e9quipe, et nous pr\u00e9voyons de communiquer plus avant sur notre programme ult\u00e9rieurement. Toutes ces informations peuvent \u00eatre sujettes \u00e0 modification et il est possible que certains des projets d\u00e9crits ci-dessus n'aboutissent pas, mais nous avons encore d'autres id\u00e9es int\u00e9ressantes \u00e0 proposer.\r\n\r\nN'h\u00e9sitez pas \u00e0 nous faire part de vos r\u00e9actions dans les commentaires ci-dessous. Nous vous informerons de la disponibilit\u00e9 de ces diff\u00e9rents projets pour que vous puissiez les tester dans les prochaines annonces concernant le programme d'acc\u00e8s anticip\u00e9.\r\n\r\nBon d\u00e9veloppement\u00a0!\r\n\r\nAuteur de l'article original en anglais :\u00a0Dmitry Jemerov","protected":false},"excerpt":{"rendered":"Nous souhaitons vous pr\u00e9senter quelques uns de nos travaux actuels pour l\u2019am\u00e9lioration d'IntelliJ IDEA et des autres EDI bas\u00e9s sur la plateforme IntelliJ. Les r\u00e9sultats de ces travaux seront disponibl","protected":false},"author":{"name":"Delphine Massenhove","link":"https:\/\/blog.jetbrains.com\/fr\/author\/delphine-massenhovejetbrains-com"},"featured_media":34220,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"cross-post-tag":[],"acf":[],"featured_image":"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/01\/fr-IntelliJ-IDEA-2020-roadmap.jpg","_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/posts\/34219"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"},{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=34219"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/posts\/34219\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/34220"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=34219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=34219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=34219"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=34219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}