{"id":32464,"date":"2019-10-31T21:47:12","date_gmt":"2019-10-31T18:47:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\/"},"modified":"2019-10-31T21:47:12","modified_gmt":"2019-10-31T18:47:12","slug":"eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Probablement, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> n'a certainement plus besoin d'\u00eatre pr\u00e9sent\u00e9. Beaucoup connaissent Eclipse gr\u00e2ce aux outils de d\u00e9veloppement Java Eclipse (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Cette populaire IDE open-source est associ\u00e9e pour la plupart des d\u00e9veloppeurs au mot \u00ab Eclipse \u00bb. Cependant, Eclipse est \u00e9galement une plateforme extensible pour l'int\u00e9gration d'outils de d\u00e9veloppement (Eclipse Platform) et une s\u00e9rie d'IDE construites sur sa base, y compris JDT. Eclipse est \u00e9galement le Projet Eclipse, un projet de haut niveau qui coordonne le d\u00e9veloppement d'Eclipse Platform et JDT, ainsi que l'Eclipse SDK \u2013 le r\u00e9sultat fourni de ce d\u00e9veloppement. Enfin, Eclipse est une fondation open-source avec une immense communaut\u00e9 de projets, dont beaucoup ne sont pas \u00e9crits en Java ni li\u00e9s aux outils de d\u00e9veloppement (par exemple, les projets <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). Le monde d'Eclipse est tr\u00e8s vari\u00e9.<\/p>\n<p>Dans cet article, qui est de nature g\u00e9n\u00e9rale, nous allons essayer d'examiner quelques bases de l'architecture d'Eclipse en tant que plateforme de d\u00e9veloppement d'outils int\u00e9gr\u00e9s et donner une premi\u00e8re impression des composants d'Eclipse qui forment les bases de la plateforme technologique pour le \u00ab nouveau configurateur \u00bb 1C: Enterprise, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">Outils de d\u00e9veloppement 1C:Entreprise<\/a><\/noindex>. Il va de soi qu'un tel examen sera in\u00e9vitablement quelque peu superficiel et plut\u00f4t limit\u00e9, notamment parce que nous nous orientons non seulement vers les d\u00e9veloppeurs d'Eclipse comme public cible. Toutefois, nous esp\u00e9rons que m\u00eame les d\u00e9veloppeurs d'Eclipse exp\u00e9riment\u00e9s pourront trouver des informations int\u00e9ressantes dans cet article. Par exemple, nous parlerons d'un des \u00ab secrets d'Eclipse \u00bb, un projet relativement nouveau et encore peu connu <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, fond\u00e9 et soutenu par la soci\u00e9t\u00e9 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/eb399a50bf86b6acce1df9e3d40848d4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Introduction \u00e0 l'architecture d'Eclipse<\/h2>\n<p>\nExaminons d'abord certains aspects g\u00e9n\u00e9raux de l'architecture d'Eclipse \u00e0 travers l'exemple de <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java development tools<\/a><\/noindex> (JDT). Le choix de JDT comme exemple n'est pas fortuit. C'est le premier environnement de d\u00e9veloppement int\u00e9gr\u00e9 apparu dans Eclipse. Les autres projets *DT d'Eclipse, tels que Eclipse C\/C++ Development Tooling (CDT), ont \u00e9t\u00e9 cr\u00e9\u00e9s plus tard et ont emprunt\u00e9 tant les principes architecturaux fondamentaux que des fragments de code source \u00e0 JDT. Les bases de l'architecture \u00e9tablies dans JDT sont toujours pertinentes aujourd'hui pour pratiquement toute IDE construite sur la plateforme Eclipse, y compris pour 1C:Enterprise Development Tools.<\/p>\n<p>Tout d'abord, il convient de noter qu'Eclipse se caract\u00e9rise par une architecture suffisamment claire, s\u00e9parant la fonctionnalit\u00e9 ind\u00e9pendante du langage de celle destin\u00e9e \u00e0 la prise en charge de langages de programmation sp\u00e9cifiques, ainsi que s\u00e9parant les composants \u00ab noyaux \u00bb (core) ind\u00e9pendants de l'interface utilisateur des composants associ\u00e9s \u00e0 la prise en charge de l'interface utilisateur.<\/p>\n<p>Ainsi, la plateforme Eclipse d\u00e9finit une infrastructure g\u00e9n\u00e9rale, ind\u00e9pendante du langage, tandis que les outils de d\u00e9veloppement Java ajoutent \u00e0 Eclipse un IDE Java complet. Tant la plateforme Eclipse que JDT se composent de plusieurs composants, chacun appartenant soit au \u00ab noyau \u00bb ind\u00e9pendant de l'interface utilisateur, soit \u00e0 la couche de l'interface utilisateur (voir Fig. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 1. Plateforme Eclipse et JDT<\/b><\/p>\n<p>\u00c9num\u00e9rons les principaux composants de la plateforme Eclipse :<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 D\u00e9finit l'infrastructure des plugins. Eclipse se caract\u00e9rise par une architecture modulaire. En substance, Eclipse est une collection de \u00ab points d'extension \u00bb et d'\u00ab extensions \u00bb.<\/li>\n<li><b>Workspace<\/b> \u2014 G\u00e8re un ou plusieurs projets. Un projet est compos\u00e9 de dossiers et de fichiers, qui sont directement affich\u00e9s sur le syst\u00e8me de fichiers.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Fournit des \u00e9l\u00e9ments de base de l'interface utilisateur, int\u00e9gr\u00e9s au syst\u00e8me d'exploitation.<\/li>\n<li><b>JFace<\/b> \u2014 Fournit un ensemble de frameworks UI construits sur SWT.<\/li>\n<li><b>Workbench<\/b> \u2014 D\u00e9finit la paradigme UI d'Eclipse : \u00e9diteurs, vues, perspectives.<\/li>\n<\/ul>\n<p>\nIl convient de mentionner qu'Eclipse Platform offre \u00e9galement de nombreux autres composants utiles pour la cr\u00e9ation d'outils de d\u00e9veloppement int\u00e9gr\u00e9s, parmi lesquels on peut citer Debug, Compare, Search, et Team. Il convient \u00e9galement de mentionner JFace Text \u2013 la base pour la cr\u00e9ation d'\u00ab \u00e9diteurs intelligents \u00bb de code source. Malheureusement, m\u00eame un examen rapide de ces composants, ainsi que de ceux de la couche UI, ne peut \u00eatre effectu\u00e9 dans le cadre de cet article, c'est pourquoi, dans le reste de cette section, nous nous limiterons \u00e0 un aper\u00e7u des principaux composants \u00ab noyaux \u00bb de la plateforme Eclipse et de JDT.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nL'infrastructure des plugins Eclipse repose sur <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> et est fournie par le projet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Chaque plugin Eclipse est un bundle OSGi. La sp\u00e9cification OSGi d\u00e9finit, entre autres, les m\u00e9canismes de versionnage et de r\u00e9solution des d\u00e9pendances. En plus de ces m\u00e9canismes standard, Equinox introduit le concept de <i>point d'extension<\/i>. Chaque plugin peut d\u00e9finir ses propres points d'extension et \u00e9galement apporter des fonctionnalit\u00e9s suppl\u00e9mentaires au syst\u00e8me (\u00ab extensions \u00bb), en utilisant des points d'extension d\u00e9finis par ce m\u00eame plugin ou d'autres. Une description d\u00e9taill\u00e9e des m\u00e9canismes OSGi et Equinox d\u00e9passe le cadre de cet article. Notons simplement que la modularisation dans Eclipse est de nature totale (tous les sous-syst\u00e8mes, y compris Runtime, se composent d'un ou plusieurs plugins) et pratiquement tout dans Eclipse est une extension. De plus, ces principes ont \u00e9t\u00e9 int\u00e9gr\u00e9s dans l'architecture d'Eclipse bien avant l'impl\u00e9mentation d'OSGi (\u00e0 l'\u00e9poque, une technologie propri\u00e9taire, largement similaire \u00e0 OSGi, \u00e9tait utilis\u00e9e).<\/p>\n<h4>Espace de travail principal<\/h4>\n<p>\nPratiquement tous les environnements de d\u00e9veloppement int\u00e9gr\u00e9s construits sur la base de la plateforme Eclipse fonctionnent avec l'espace de travail Eclipse. C'est pr\u00e9cis\u00e9ment l'espace de travail qui contient g\u00e9n\u00e9ralement le code source de l'application d\u00e9velopp\u00e9e dans l'IDE. L'espace de travail est directement mapp\u00e9 au syst\u00e8me de fichiers et se compose de projets qui contiennent des dossiers et des fichiers. Ces projets, dossiers et fichiers sont appel\u00e9s <i>ressources<\/i> espace de travail. La mise en \u0153uvre de l'espace de travail dans Eclipse sert en quelque sorte de cache par rapport au syst\u00e8me de fichiers, ce qui permet d'acc\u00e9l\u00e9rer consid\u00e9rablement la navigation dans l'arborescence des ressources. De plus, l'espace de travail fournit plusieurs services suppl\u00e9mentaires, y compris <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">m\u00e9canisme de notification des modifications de ressources<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">infrastructure des g\u00e9n\u00e9rateurs incr\u00e9mentaux<\/a><\/noindex>.<\/p>\n<p>La composante Core Resources (plugin org.eclipse.core.resources) est responsable du soutien de l'espace de travail et de ses ressources. En particulier, cette composante fournit un acc\u00e8s programmatique \u00e0 l'espace de travail sous la forme de <i>mod\u00e8le de ressources<\/i>. Pour travailler efficacement avec ce mod\u00e8le, les clients ont besoin d'un moyen simple de repr\u00e9senter une r\u00e9f\u00e9rence \u00e0 une ressource. Dans ce cas, il serait souhaitable de cacher l'objet qui conserve directement l'\u00e9tat de la ressource dans le mod\u00e8le de l'acc\u00e8s du client. Autrement dit, en cas de suppression d'un fichier, le client pourrait continuer \u00e0 maintenir un objet qui n'est plus dans le mod\u00e8le, entra\u00eenant ainsi des probl\u00e8mes. Eclipse r\u00e9sout ce probl\u00e8me en utilisant ce que l'on appelle un <i>handle<\/i> de ressource. Le handle agit en tant que cl\u00e9 (il conna\u00eet uniquement le chemin vers la ressource dans l'espace de travail) et contr\u00f4le totalement l'acc\u00e8s \u00e0 l'objet interne du mod\u00e8le, qui conserve directement les informations sur l'\u00e9tat de la ressource. Ce design est une variation du patron <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>La figure 2 illustre l'idiome Handle\/Body en rapport avec le mod\u00e8le de ressources. L'interface IResource repr\u00e9sente le handle d'une ressource et constitue une API, contrairement \u00e0 la classe Resource, qui impl\u00e9mente cette interface, ainsi qu'\u00e0 la classe ResourceInfo, qui repr\u00e9sente le body et ne fait pas partie de l'API. Notons que le handle ne conna\u00eet que le chemin vers la ressource par rapport \u00e0 la racine de l'espace de travail et ne contient pas de lien vers les informations de la ressource. Les objets d'information de la ressource forment ce qu'on appelle un \u00ab arbre d'\u00e9l\u00e9ments \u00bb (element tree). Cette structure de donn\u00e9es est enti\u00e8rement mat\u00e9rialis\u00e9e en m\u00e9moire. Pour trouver une instance d'information de ressource correspondant \u00e0 un certain handle, l'arbre des \u00e9l\u00e9ments est parcouru en suivant le chemin stock\u00e9 dans ce handle.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figure 2. IResource et ResourceInfo<\/b><\/p>\n<p>Comme nous le verrons plus loin, le design de base du mod\u00e8le de ressources (qu'on peut appeler bas\u00e9 sur le handle) est utilis\u00e9 dans Eclipse et pour d'autres mod\u00e8les. En attendant, \u00e9num\u00e9rons quelques propri\u00e9t\u00e9s distinctives de ce design :<\/p>\n<ul>\n<li>Le handle est un objet valeur (value object). Les objets valeur sont des objets immuables (immutable), dont l'\u00e9galit\u00e9 ne repose pas sur l'identit\u00e9. De tels objets peuvent \u00eatre utilis\u00e9s en toute s\u00e9curit\u00e9 comme cl\u00e9 dans des conteneurs hach\u00e9s. Plusieurs instances de handle peuvent faire r\u00e9f\u00e9rence \u00e0 la m\u00eame ressource. Pour les comparer, il faut utiliser la m\u00e9thode equals(Object).<\/li>\n<li>Le handle d\u00e9finit le comportement de la ressource, mais ne contient aucune information sur l'\u00e9tat de la ressource (les seules donn\u00e9es qu'il conserve sont la \u00ab cl\u00e9 \u00bb, le chemin vers la ressource).<\/li>\n<li>Le handle peut r\u00e9f\u00e9rencer une ressource inexistante (soit une ressource qui n'est pas encore cr\u00e9\u00e9e, soit une ressource qui a d\u00e9j\u00e0 \u00e9t\u00e9 supprim\u00e9e). L'existence de la ressource peut \u00eatre v\u00e9rifi\u00e9e \u00e0 l'aide de la m\u00e9thode IResource.exists().<\/li>\n<li>Certaines op\u00e9rations peuvent \u00eatre effectu\u00e9es uniquement \u00e0 partir des informations stock\u00e9es dans le handle lui-m\u00eame (appel\u00e9es op\u00e9rations handle-only). Des exemples incluent IResource.getParent(), getFullPath(), etc. Il n'est pas n\u00e9cessaire que la ressource existe pour que cette op\u00e9ration soit effectu\u00e9e avec succ\u00e8s. Les op\u00e9rations n\u00e9cessitant que la ressource existe pour s'ex\u00e9cuter avec succ\u00e8s l\u00e8veront une exception (CoreException) si la ressource n'existe pas.<\/li>\n<\/ul>\n<p>\nEclipse fournit un m\u00e9canisme efficace de notification des modifications des ressources de l'espace de travail (voir Fig. 3). Les ressources peuvent changer \u00e0 la suite d'actions effectu\u00e9es dans l'IDE Eclipse lui-m\u00eame ou en raison de la synchronisation avec le syst\u00e8me de fichiers. Dans les deux cas, les clients abonn\u00e9s aux notifications re\u00e7oivent des informations d\u00e9taill\u00e9es sur les changements sous la forme de \u00ab delta de ressource \u00bb (resource delta). Le delta d\u00e9crit les modifications entre deux \u00e9tats de l'arborescence des ressources de l'espace de travail et est en lui-m\u00eame une arborescence, chaque n\u0153ud d\u00e9crivant une modification d'une certaine ressource et contenant une liste de deltas de niveau inf\u00e9rieur, d\u00e9crivant les modifications des ressources enfants.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/8af412412ee97d205137ab70c8444a50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 3. IResourceChangeEvent et IResourceDelta<\/b><\/p>\n<p>Le m\u00e9canisme de notification bas\u00e9 sur les deltas de ressources a les caract\u00e9ristiques suivantes :<\/p>\n<ul>\n<li>Une seule modification et de multiples modifications sont d\u00e9crites \u00e0 l'aide de la m\u00eame structure, car le delta est construit selon le principe de la composition r\u00e9cursive. Les clients abonn\u00e9s peuvent traiter les notifications de changement de ressources par une descente r\u00e9cursive dans l'arborescence des deltas.<\/li>\n<li>Le delta contient toutes les informations concernant la modification de la ressource, y compris son d\u00e9placement et\/ou le changement de ses \u00ab marqueurs \u00bb associ\u00e9s (des erreurs de compilation, par exemple, sont repr\u00e9sent\u00e9es sous forme de marqueurs).<\/li>\n<li>Puisque les r\u00e9f\u00e9rences \u00e0 la ressource se font via un handle, le delta peut naturellement faire r\u00e9f\u00e9rence \u00e0 une ressource distante.<\/li>\n<\/ul>\n<p>\nComme nous le verrons bient\u00f4t, les \u00e9l\u00e9ments principaux du design du m\u00e9canisme de notification des modifications du mod\u00e8le de ressources s'appliquent \u00e9galement \u00e0 d'autres mod\u00e8les bas\u00e9s sur des handles.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nLe mod\u00e8le de ressources de l'espace de travail Eclipse est un mod\u00e8le fondamental ind\u00e9pendant du langage. Le composant JDT Core (plugin org.eclipse.jdt.core) fournit une API pour naviguer et analyser la structure de l'espace de travail du point de vue de Java, le mod\u00e8le Java dit (<i>mod\u00e8le Java<\/i>). Cette API est d\u00e9finie en termes d'\u00e9l\u00e9ments Java, contrairement \u00e0 l'API sous-jacente du mod\u00e8le de ressources, qui est d\u00e9finie en termes de dossiers et de fichiers. Les principales interfaces de l'arborescence des \u00e9l\u00e9ments Java sont pr\u00e9sent\u00e9es \u00e0 la Fig. 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 4. \u00c9l\u00e9ments du mod\u00e8le Java<\/b><\/p>\n<p>Le mod\u00e8le Java utilise la m\u00eame idiome handle\/body que le mod\u00e8le de ressources (fig. 5). IJavaElement est le handle, tandis que JavaElementInfo joue le r\u00f4le de body. L'interface IJavaElement d\u00e9finit un protocole commun \u00e0 tous les \u00e9l\u00e9ments Java. Certains de ses m\u00e9thodes sont uniquement des handles : getElementName(), getParent(), etc. L'objet JavaElementInfo stocke l'\u00e9tat de l'\u00e9l\u00e9ment correspondant : sa structure et ses attributs.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 5. IJavaElement et JavaElementInfo<\/b><\/p>\n<p>Le mod\u00e8le Java pr\u00e9sente certaines diff\u00e9rences dans la mise en \u0153uvre de la conception de base handle\/body par rapport au mod\u00e8le de ressources. Comme mentionn\u00e9 pr\u00e9c\u00e9demment, dans le mod\u00e8le de ressources, l'arbre des \u00e9l\u00e9ments, dont les n\u0153uds sont des objets resource info, est enti\u00e8rement charg\u00e9 en m\u00e9moire. Cependant, dans le mod\u00e8le Java, il peut y avoir un nombre d'\u00e9l\u00e9ments beaucoup plus \u00e9lev\u00e9 que dans l'arbre des ressources, car il inclut \u00e9galement la structure interne des fichiers .java et .class : types, champs et m\u00e9thodes.<\/p>\n<p>Pour \u00e9viter la mat\u00e9rialisation compl\u00e8te de tout l'arbre des \u00e9l\u00e9ments en m\u00e9moire, l'impl\u00e9mentation du mod\u00e8le Java utilise un cache LRU de taille limit\u00e9e pour l'element info, o\u00f9 la cl\u00e9 est le handle IJavaElement. Les objets element info sont cr\u00e9\u00e9s \u00e0 la demande au fur et \u00e0 mesure que la navigation dans l'arbre des \u00e9l\u00e9ments se poursuit. Les \u00e9l\u00e9ments les moins utilis\u00e9s sont expuls\u00e9s du cache, et la consommation de m\u00e9moire par le mod\u00e8le reste limit\u00e9e \u00e0 la taille sp\u00e9cifi\u00e9e du cache. C'est un autre avantage de la conception bas\u00e9e sur le handle, qui cache compl\u00e8tement de tels d\u00e9tails de mise en \u0153uvre du code client.<\/p>\n<p>Le m\u00e9canisme de notification de changement des \u00e9l\u00e9ments Java est en gros analogue au m\u00e9canisme de suivi des changements des ressources de l'espace de travail examin\u00e9 ci-dessus. Un client souhaitant suivre les changements dans le mod\u00e8le Java s'abonne \u00e0 des notifications, qui sont pr\u00e9sent\u00e9es sous la forme d'un objet ElementChangedEvent, contenant IJavaElementDelta (fig. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 6. ElementChangedEvent et IJavaElementDelta<\/b><\/p>\n<p>Le mod\u00e8le Java ne contient pas d'informations sur le corps des m\u00e9thodes ou la r\u00e9solution des noms, c'est pourquoi pour une analyse d\u00e9taill\u00e9e du code \u00e9crit en Java, JDT Core fournit un mod\u00e8le suppl\u00e9mentaire (non bas\u00e9 sur handle) : <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">arbre de syntaxe abstraite<\/a><\/noindex> (arbre de syntaxe abstrait, AST). L'AST repr\u00e9sente le r\u00e9sultat de l'analyse syntaxique du texte source. Les n\u0153uds de l'AST correspondent aux \u00e9l\u00e9ments de la structure du module source (d\u00e9clarations, op\u00e9rateurs, expressions, etc.) et contiennent des informations sur les coordonn\u00e9es de l'\u00e9l\u00e9ment correspondant dans le texte source, ainsi que (en option) des informations sur la r\u00e9solution des noms sous forme de liens vers ce que l'on appelle <i>bindings<\/i>. Les Bindings sont des objets repr\u00e9sentant des entit\u00e9s nomm\u00e9es telles que des types, des m\u00e9thodes et des variables connues du compilateur. Contrairement aux n\u0153uds de l'AST, qui forment un arbre, les bindings prennent en charge les r\u00e9f\u00e9rences crois\u00e9es et, en g\u00e9n\u00e9ral, forment un graphe. La classe abstraite ASTNode est la classe de base commune pour tous les n\u0153uds de l'AST. Les sous-classes d'ASTNode correspondent aux constructions syntaxiques sp\u00e9cifiques du langage Java.<\/p>\n<p>Comme les arbres syntaxiques peuvent consommer une quantit\u00e9 significative de m\u00e9moire, JDT met en cache un seul AST pour l'\u00e9diteur actif. Contrairement au mod\u00e8le Java, l'AST est g\u00e9n\u00e9ralement consid\u00e9r\u00e9 comme un mod\u00e8le \u00ab interm\u00e9diaire \u00bb, \u00ab temporaire \u00bb, dont les \u00e9l\u00e9ments ne devraient pas \u00eatre r\u00e9f\u00e9renc\u00e9s par les clients en dehors du contexte de l'op\u00e9ration ayant conduit \u00e0 la cr\u00e9ation de l'AST.<\/p>\n<p>Les trois mod\u00e8les \u00e9num\u00e9r\u00e9s (mod\u00e8le Java, AST, bindings) constituent ensemble la base de la cr\u00e9ation d'outils de d\u00e9veloppement \u00ab intelligents \u00bb dans JDT, parmi lesquels un puissant \u00e9diteur Java avec divers \u00ab assistants \u00bb, diff\u00e9rentes actions de traitement du code source (y compris l'organisation de la liste d'importation des noms et le formatage selon le style configur\u00e9), des outils de recherche et de refactoring. Dans ce contexte, le mod\u00e8le Java joue un r\u00f4le particulier, car c'est lui qui est utilis\u00e9 comme fondement pour la repr\u00e9sentation visuelle de la structure de l'application en cours de d\u00e9veloppement (par exemple, dans l'Explorateur de paquets, le Plan, la Recherche, la Hi\u00e9rarchie des appels, et la Hi\u00e9rarchie des types).<\/p>\n<h2>Composants Eclipse utilis\u00e9s dans les Outils de d\u00e9veloppement 1C:Enterprise<\/h2>\n<p>\nLa figure 7 montre les composants Eclipse qui constituent la base de la plateforme technologique pour les Outils de d\u00e9veloppement 1C:Enterprise.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 7. Eclipse comme plateforme pour les Outils de d\u00e9veloppement 1C:Enterprise<\/b><\/p>\n<p><b>Plateforme Eclipse<\/b> fournit une infrastructure de base. Nous avons examin\u00e9 certains aspects de cette infrastructure dans la section pr\u00e9c\u00e9dente.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Cadre de mod\u00e9lisation Eclipse<\/a><\/noindex><\/b> (<b>EMF<\/b>) fournit des outils g\u00e9n\u00e9raux pour la mod\u00e9lisation de donn\u00e9es structur\u00e9es. EMF est int\u00e9gr\u00e9 \u00e0 la plateforme Eclipse, mais peut \u00e9galement \u00eatre utilis\u00e9 de mani\u00e8re autonome dans des applications Java classiques. Il est assez fr\u00e9quent que les d\u00e9veloppeurs d\u00e9butants d'Eclipse soient d\u00e9j\u00e0 bien familiaris\u00e9s avec EMF, bien qu'ils ne ma\u00eetrisent pas encore toutes les subtilit\u00e9s de la plateforme Eclipse. L'une des raisons de cette popularit\u00e9 bien m\u00e9rit\u00e9e est son design universel, incluant, entre autres, une API unifi\u00e9e de m\u00e9ta-niveau qui permet de travailler de mani\u00e8re g\u00e9n\u00e9rique avec n'importe quel mod\u00e8le EMF. Les impl\u00e9mentations de base d'EMF pour les objets mod\u00e8le et le sous-syst\u00e8me de g\u00e9n\u00e9ration de code mod\u00e8le \u00e0 partir de la m\u00e9ta-mod\u00e8le augmentent consid\u00e9rablement la rapidit\u00e9 de d\u00e9veloppement et r\u00e9duisent le nombre d'erreurs. De plus, EMF contient des m\u00e9canismes de s\u00e9rialisation des mod\u00e8les, de suivi des modifications dans le mod\u00e8le, et bien plus encore. <\/p>\n<p>Comme tout v\u00e9ritable outil universel, EMF convient \u00e0 un large \u00e9ventail de t\u00e2ches li\u00e9es \u00e0 la mod\u00e9lisation, mais certaines classes de mod\u00e8les (par exemple, les mod\u00e8les bas\u00e9s sur des handles mentionn\u00e9s ci-dessus) peuvent n\u00e9cessiter des outils de mod\u00e9lisation plus sp\u00e9cialis\u00e9s. Parler d'EMF est une t\u00e2che ingrate, surtout dans le cadre limit\u00e9 d'un seul article, car c'est le sujet d'un livre \u00e0 part enti\u00e8re, et un livre assez \u00e9pais. Notons simplement que le syst\u00e8me de g\u00e9n\u00e9ralisation de qualit\u00e9, sur lequel EMF est bas\u00e9, a permis l'\u00e9mergence d'un large \u00e9ventail de projets consacr\u00e9s \u00e0 la mod\u00e9lisation, qui font partie du projet de haut niveau. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Mod\u00e9lisation Eclipse<\/a><\/noindex> aux c\u00f4t\u00e9s de l'EMF lui-m\u00eame. L'un de ces projets est Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> fournit une infrastructure de \u00ab mod\u00e9lisation textuelle \u00bb. Xtext utilise <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> pour l'analyse syntaxique du texte source et l'EMF pour repr\u00e9senter le ASG (graphe s\u00e9mantique abstrait, qui est essentiellement une combinaison de l'AST et des bindings), \u00e9galement appel\u00e9 \u00ab mod\u00e8le s\u00e9mantique \u00bb. La grammaire du langage mod\u00e9lis\u00e9 \u00e0 l'aide de Xtext est d\u00e9crite dans son propre langage Xtext. Cela permet non seulement de g\u00e9n\u00e9rer une description de la grammaire pour ANTLR, mais aussi d'obtenir un m\u00e9canisme de s\u00e9rialisation de l'AST (c'est-\u00e0-dire que Xtext fournit \u00e0 la fois un parseur et un unparsor), l'auto-compl\u00e9tion contextuelle et un certain nombre d'autres composants linguistiques. D'autre part, le langage de description de la grammaire utilis\u00e9 dans Xtext est moins flexible par rapport, disons, au langage de description de grammaire dans ANTLR. Par cons\u00e9quent, il faut parfois \u00ab adapter \u00bb le langage mis en \u0153uvre \u00e0 Xtext, ce qui n'est g\u00e9n\u00e9ralement pas un probl\u00e8me pour un langage d\u00e9velopp\u00e9 de z\u00e9ro, mais peut \u00eatre inacceptable pour des langages ayant d\u00e9j\u00e0 une syntaxe \u00e9tablie. Cela dit, Xtext est actuellement l'outil le plus mature, fonctionnellement complet et polyvalent dans Eclipse pour la construction de langages de programmation et d'outils de d\u00e9veloppement associ\u00e9s. En particulier, il est l'outil id\u00e9al pour le prototypage rapide. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA\">langages sp\u00e9cifiques \u00e0 un domaine<\/a><\/noindex> (domain-specific language, DSL). En plus du \u00ab noyau du langage \u00bb bas\u00e9 sur ANTLR et EMF mentionn\u00e9 ci-dessus, Xtext fournit de nombreux composants utiles de niveau sup\u00e9rieur, y compris des m\u00e9canismes d'indexation, de construction incr\u00e9mentale, un \u00ab \u00e9diteur intelligent \u00bb, et beaucoup d'autres choses, mais omet les mod\u00e8les linguistiques bas\u00e9s sur des handles. Comme EMF, Xtext m\u00e9rite un livre \u00e0 part enti\u00e8re, et il est peu probable que nous puissions m\u00eame effleurer toutes ses capacit\u00e9s.<\/p>\n<p>Les Outils de D\u00e9veloppement 1C:Enterprise utilisent activement \u00e0 la fois l'EMF en tant que tel et plusieurs autres projets d'Eclipse Modeling. En particulier, Xtext est l'une des bases des outils de d\u00e9veloppement pour des langages tels que 1C:Enterprise, comme le langage de programmation int\u00e9gr\u00e9 et le langage de requ\u00eates. L'autre base de ces outils de d\u00e9veloppement est le projet Eclipse Handly, que nous examinerons plus en d\u00e9tail (parmi les composants Eclipse list\u00e9s, il est pour l'instant le moins connu).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, sous-projet du projet de haut niveau Eclipse Technology, a \u00e9merg\u00e9 suite \u00e0 la contribution initiale de code \u00e0 la Fondation Eclipse, r\u00e9alis\u00e9e par l'entreprise 1C en 2014. Depuis, l'entreprise 1C continue de soutenir le d\u00e9veloppement du projet : les committers de Handly sont des employ\u00e9s de cette soci\u00e9t\u00e9. Le projet est modeste, mais occupe une niche assez unique dans Eclipse : son objectif principal est de soutenir le d\u00e9veloppement de mod\u00e8les bas\u00e9s sur des handles.<\/p>\n<p>Les principaux principes architecturaux des mod\u00e8les bas\u00e9s sur des handles, comme l'idiome handle\/body, ont \u00e9t\u00e9 abord\u00e9s plus haut \u00e0 l'aide de l'exemple du mod\u00e8le des ressources et du mod\u00e8le Java. Il a \u00e9galement \u00e9t\u00e9 not\u00e9 que le mod\u00e8le des ressources et le mod\u00e8le Java servent de bases importantes pour les outils de d\u00e9veloppement Java d'Eclipse (JDT). Et comme presque tous les projets *DT d'Eclipse ont une architecture similaire \u00e0 celle de JDT, il ne serait pas exag\u00e9r\u00e9 de dire que les mod\u00e8les bas\u00e9s sur des handles sont \u00e0 la base de nombreux, sinon tous, les IDE construits sur la plateforme Eclipse. Par exemple, dans Eclipse C\/C++ Development Tooling (CDT), il existe un mod\u00e8le bas\u00e9 sur des handles pour C\/C++, qui joue dans l'architecture de CDT le m\u00eame r\u00f4le que le mod\u00e8le Java dans JDT.<\/p>\n<p>Avant l'\u00e9mergence de Handly, Eclipse ne proposait pas de biblioth\u00e8ques sp\u00e9cialis\u00e9es pour la construction de mod\u00e8les linguistiques bas\u00e9s sur des handles. Les mod\u00e8les existants \u00e9taient principalement cr\u00e9\u00e9s par une adaptation directe du code du mod\u00e8le Java (c'est-\u00e0-dire copier\/coller), <i>dans les cas o\u00f9 cela est permis<\/i> par la licence publique Eclipse (EPL). (Il est \u00e9vident que, par exemple, pour les projets d'Eclipse eux-m\u00eames, cela ne pose g\u00e9n\u00e9ralement pas de probl\u00e8me juridique, ce qui n'est pas le cas pour les produits avec code source ferm\u00e9.) En plus de son caract\u00e8re d\u00e9sordonn\u00e9 typique, cette m\u00e9thode entra\u00eene des probl\u00e8mes bien connus : duplication de code, erreurs introduites lors de l'adaptation, etc. Ce qui est encore pire, c'est que les mod\u00e8les r\u00e9sultants restent \u00ab des objets isol\u00e9s \u00bb et ne tirent pas parti du potentiel d'unification existant. Pourtant, l'identification de concepts et de protocoles communs pour les mod\u00e8les linguistiques bas\u00e9s sur des handles pourrait conduire \u00e0 la cr\u00e9ation de composants r\u00e9utilisables pour travailler avec eux, de la m\u00eame mani\u00e8re que cela s'est produit avec EMF.<\/p>\n<p>Il ne faut pas dire qu'Eclipse n'avait pas conscience de ces probl\u00e8mes. D\u00e9j\u00e0 en 2005, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, en r\u00e9sumant l'exp\u00e9rience de d\u00e9veloppement du prototype CDT, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">a argu\u00e9<\/a><\/noindex> la n\u00e9cessit\u00e9 de cr\u00e9er une infrastructure commune pour les mod\u00e8les de langues, y compris les mod\u00e8les bas\u00e9s sur des handles. Cependant, comme c'est souvent le cas, en raison de t\u00e2ches plus prioritaires, ces id\u00e9es n'ont finalement pas pu \u00eatre mises en \u0153uvre. Pendant ce temps, la factorisation du code des projets *DT reste l'un des sujets encore peu explor\u00e9s dans Eclipse.<\/p>\n<p>D'une certaine mani\u00e8re, le projet Handly vise \u00e0 r\u00e9soudre des t\u00e2ches similaires \u00e0 celles de l'EMF, mais pour les mod\u00e8les bas\u00e9s sur des handles, et en particulier linguistiques (c'est-\u00e0-dire repr\u00e9sentant des \u00e9l\u00e9ments de la structure d'un certain langage de programmation). Voici les principaux objectifs qui ont \u00e9t\u00e9 fix\u00e9s lors de la conception de Handly :<\/p>\n<ul>\n<li>Identifier les abstractions cl\u00e9s du domaine th\u00e9matique.<\/li>\n<li>R\u00e9duire les efforts et am\u00e9liorer la qualit\u00e9 de l'impl\u00e9mentation des mod\u00e8les linguistiques bas\u00e9s sur des handles gr\u00e2ce \u00e0 la r\u00e9utilisation du code.<\/li>\n<li>Fournir une API unifi\u00e9e au niveau m\u00e9ta aux mod\u00e8les r\u00e9sultants, permettant la cr\u00e9ation de composants IDE communs travaillant avec des mod\u00e8les linguistiques bas\u00e9s sur des handles.<\/li>\n<li>Flexibilit\u00e9 et \u00e9volutivit\u00e9.<\/li>\n<li>Int\u00e9gration avec Xtext (dans une couche distincte).<\/li>\n<\/ul>\n<p>\nPour identifier les concepts et protocoles communs, des impl\u00e9mentations existantes de mod\u00e8les linguistiques bas\u00e9s sur des handles ont \u00e9t\u00e9 analys\u00e9es. Les interfaces principales et les impl\u00e9mentations de base fournies par Handly sont pr\u00e9sent\u00e9es \u00e0 la figure 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 8. Interfaces communes et impl\u00e9mentations de base des \u00e9l\u00e9ments Handly<\/b><\/p>\n<p>L'interface IElement repr\u00e9sente le handle d'un \u00e9l\u00e9ment et est commune aux \u00e9l\u00e9ments de tous les mod\u00e8les bas\u00e9s sur Handly. La classe abstraite Element impl\u00e9mente un m\u00e9canisme g\u00e9n\u00e9ralis\u00e9 handle\/body (voir fig. 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 9. IElement et impl\u00e9mentation g\u00e9n\u00e9ralis\u00e9e handle\/body<\/b><\/p>\n<p>De plus, Handly fournit un m\u00e9canisme g\u00e9n\u00e9ralis\u00e9 de notification des modifications d'\u00e9l\u00e9ments du mod\u00e8le (voir fig. 10). Comme on peut le voir, en termes g\u00e9n\u00e9raux, il est analogue aux m\u00e9canismes de notification mis en \u0153uvre dans le mod\u00e8le de ressources et le mod\u00e8le Java, et utilise IElementDelta pour une repr\u00e9sentation unifi\u00e9e des informations sur les modifications d'\u00e9l\u00e9ments.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 10. Interfaces communes et impl\u00e9mentations de base du m\u00e9canisme de notification Handly.<\/b><\/p>\n<p>La partie de Handly examin\u00e9e ci-dessus (fig. 9 et 10) peut \u00eatre utilis\u00e9e pour repr\u00e9senter pratiquement n'importe quel mod\u00e8le bas\u00e9 sur des handles. Pour cr\u00e9er <i>des mod\u00e8les linguistiques<\/i> le projet offre des fonctionnalit\u00e9s suppl\u00e9mentaires \u2013 en particulier, des interfaces communes et des impl\u00e9mentations de base pour les \u00e9l\u00e9ments de la structure du texte source, appel\u00e9s <i>\u00e9l\u00e9ments source<\/i> (fig. 8). L'interface ISourceFile repr\u00e9sente le fichier source, tandis que ISourceConstruct repr\u00e9sente un \u00e9l\u00e9ment \u00e0 l'int\u00e9rieur du fichier source. Les classes abstraites SourceFile et SourceConstruct mettent en \u0153uvre des m\u00e9canismes g\u00e9n\u00e9riques pour soutenir le travail avec des fichiers source et leurs \u00e9l\u00e9ments, comme le traitement des buffers de texte, la liaison aux coordonn\u00e9es de l'\u00e9l\u00e9ment dans le texte source, la r\u00e9conciliation du mod\u00e8le avec le contenu actuel du buffer de travail, etc. La mise en \u0153uvre de ces m\u00e9canismes est g\u00e9n\u00e9ralement une t\u00e2che assez complexe, et Handly peut consid\u00e9rablement r\u00e9duire les efforts de d\u00e9veloppement des mod\u00e8les bas\u00e9s sur des handles en fournissant des impl\u00e9mentations de base de qualit\u00e9.<\/p>\n<p>En plus des m\u00e9canismes principaux mentionn\u00e9s ci-dessus, Handly fournit une infrastructure pour les buffers de texte et les \u00ab snapshots \u00bb, ainsi qu'un soutien \u00e0 l'int\u00e9gration avec les \u00e9diteurs de code source (y compris une int\u00e9gration \u00ab pr\u00eate \u00e0 l'emploi \u00bb avec l'\u00e9diteur Xtext), ainsi que certains composants UI g\u00e9n\u00e9raux fonctionnant avec des mod\u00e8les bas\u00e9s sur Handly, comme le framework outline. Pour illustrer ses capacit\u00e9s, le projet fournit plusieurs exemples, y compris une impl\u00e9mentation d'un mod\u00e8le Java sur Handly. (Compar\u00e9e \u00e0 l'impl\u00e9mentation compl\u00e8te du mod\u00e8le Java dans JDT, cette mod\u00e8le est d\u00e9lib\u00e9r\u00e9ment simplifi\u00e9e pour plus de clart\u00e9.)<\/p>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, une attention particuli\u00e8re a \u00e9t\u00e9 port\u00e9e lors de la conception initiale de Handly et de son \u00e9volution ult\u00e9rieure \u00e0 la scalabilit\u00e9 et \u00e0 la flexibilit\u00e9. <\/p>\n<p>En principe, les mod\u00e8les bas\u00e9s sur des handles sont assez bien scalables \u00ab par design \u00bb. Par exemple, l'idiome handle\/body permet de limiter la m\u00e9moire consomm\u00e9e par le mod\u00e8le. Mais il y a des nuances. Ainsi, lors des tests de scalabilit\u00e9 de Handly, un probl\u00e8me a \u00e9t\u00e9 d\u00e9couvert dans la mise en \u0153uvre du m\u00e9canisme de notification \u2013 lors de la modification d'un grand nombre d'\u00e9l\u00e9ments, la construction des deltas prenait trop de temps. Il s'est av\u00e9r\u00e9 que le m\u00eame probl\u00e8me existait \u00e9galement dans le mod\u00e8le Java de JDT, \u00e0 partir duquel le code correspondant avait \u00e9t\u00e9 adapt\u00e9 autrefois. Nous avons corrig\u00e9 le bug dans Handly et pr\u00e9par\u00e9 un patch similaire pour JDT, qui a \u00e9t\u00e9 accept\u00e9 avec gratitude. C'est juste un exemple parmi d'autres, o\u00f9 l'int\u00e9gration de Handly dans des r\u00e9alisations de mod\u00e8les existantes pourrait potentiellement \u00eatre b\u00e9n\u00e9fique, car dans ce cas, une telle erreur pourrait \u00eatre corrig\u00e9e en un seul endroit.<\/p>\n<p>Pour rendre l'int\u00e9gration de Handly techniquement possible dans des impl\u00e9mentations de mod\u00e8les existants, la biblioth\u00e8que doit poss\u00e9der une flexibilit\u00e9 significative. Le principal d\u00e9fi est de maintenir la r\u00e9trocompatibilit\u00e9 de l'API du mod\u00e8le. Ce probl\u00e8me a \u00e9t\u00e9 r\u00e9solu dans <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> par une s\u00e9paration claire entre l'API sp\u00e9cifique au mod\u00e8le, d\u00e9finie et contr\u00f4l\u00e9e de mani\u00e8re exhaustive par le d\u00e9veloppeur, et l'API unifi\u00e9e de niveau m\u00e9ta fournie par la biblioth\u00e8que. Cela rend non seulement techniquement possible l'int\u00e9gration de Handly dans des impl\u00e9mentations existantes, mais donne \u00e9galement au d\u00e9veloppeur d'un nouveau mod\u00e8le une grande libert\u00e9 dans la conception de l'API.<\/p>\n<p>La flexibilit\u00e9 pr\u00e9sente d'autres aspects. Par exemple, Handly impose peu de restrictions sur la structure du mod\u00e8le et peut \u00eatre utilis\u00e9 tant pour le mod\u00e9lisation de langages de programmation g\u00e9n\u00e9ral que pour des langages orient\u00e9s domaine. Lors de la construction de la structure de fichier source, Handly ne prescrit pas de forme sp\u00e9cifique de repr\u00e9sentation AST et ne n\u00e9cessite en principe pas m\u00eame la pr\u00e9sence d'un AST, garantissant ainsi la compatibilit\u00e9 avec pratiquement tous les m\u00e9canismes d'analyse syntaxique. Enfin, Handly supporte une int\u00e9gration compl\u00e8te avec l'espace de travail Eclipse, mais peut \u00e9galement fonctionner directement avec des syst\u00e8mes de fichiers, gr\u00e2ce \u00e0 son int\u00e9gration avec <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>La version actuelle <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> a \u00e9t\u00e9 publi\u00e9e en d\u00e9cembre 2016. Bien que le projet soit actuellement en phase d'incubation et que l'API ne soit pas encore d\u00e9finitivement stabilis\u00e9e, Handly est d\u00e9j\u00e0 utilis\u00e9 dans deux grands produits commerciaux qui ont pris le risque d'\u00eatre des \u00ab premiers adoptants \u00bb et, il faut le dire, n'ont jusqu'\u00e0 pr\u00e9sent aucun regret.<\/p>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, l'un de ces produits est 1C:Enterprise Development Tools, o\u00f9 Handly est utilis\u00e9 depuis le d\u00e9but pour mod\u00e9liser les \u00e9l\u00e9ments de la structure de haut niveau de langages tels que 1C:Entreprise, y compris le langage de programmation int\u00e9gr\u00e9 et le langage de requ\u00eates. L'autre produit est moins connu du grand public. C'est <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, un environnement int\u00e9gr\u00e9 de conception de processeurs orient\u00e9s probl\u00e8mes (application-specific instruction-set processor, ASIP), utilis\u00e9 tant \u00e0 l'int\u00e9rieur de la soci\u00e9t\u00e9 tch\u00e8que Codasip que par ses clients, parmi lesquels <noindex>AMD<\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.avg.com\/\">AVG<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.mobileye.com\/\">Mobileye<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sigmadesigns.com\/\">Sigma Designs<\/a><\/noindex>. Codasip utilise Handly en production depuis 2015, \u00e0 partir de la version Handly 0.2. La derni\u00e8re version actuellement disponible de Codasip Studio utilise la version 0.5, sortie en juin 2016. Ond\u0159ej Il\u010d\u00edk, responsable du d\u00e9veloppement de l'IDE chez Codasip, est en contact avec le projet, fournissant un retour d'information crucial de la part d'un \u00ab adoptant externe \u00bb. Il a m\u00eame pu trouver un peu de temps libre pour participer directement au d\u00e9veloppement du projet, en r\u00e9alisant une couche d'interface utilisateur (~ 4000 lignes de code) pour un des exemples de Handly, mod\u00e8le Java. Des informations plus d\u00e9taill\u00e9es \u00ab de premi\u00e8re main \u00bb sur l'utilisation de Handly par les adoptants peuvent \u00eatre trouv\u00e9es sur la page <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Histoires de R\u00e9ussite<\/a><\/noindex> .<\/p>\n<p>Nous esp\u00e9rons qu'apr\u00e8s la sortie de la version 1.0 avec une garantie de stabilit\u00e9 de l'API et le passage du projet hors de l'\u00e9tat d'incubation, Handly aura de nouveaux adoptants. Pour l'instant, le projet continue d'\u00eatre test\u00e9 et d'am\u00e9liorer davantage l'API, en publiant deux \u00ab grandes \u00bb versions par an \u2013 en juin (\u00e0 la m\u00eame date que la sortie simultan\u00e9e d'Eclipse) et en d\u00e9cembre, garantissant un calendrier pr\u00e9visible sur lequel les adoptants peuvent compter. Il convient \u00e9galement d'ajouter que le taux de bogues du projet reste \u00e0 un niveau constamment bas et que Handly fonctionne de mani\u00e8re fiable dans les produits des premiers adoptants depuis ses premi\u00e8res versions. Pour en savoir plus sur Eclipse Handly, vous pouvez utiliser <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Tutoriel de D\u00e9marrage<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Vue d'ensemble Architecturale<\/a><\/noindex>.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/323508\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u041c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 Eclipse \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Eclipse Java development tools (JDT). \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f open-source Java IDE \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c \u201cEclipse\u201d. \u041e\u0434\u043d\u0430\u043a\u043e Eclipse \u2013 \u044d\u0442\u043e \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (Eclipse Platform), \u0438 \u0446\u0435\u043b\u044b\u0439 \u0440\u044f\u0434 IDE, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0435\u0435 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432 \u0442\u043e\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24268,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32464","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Eclipse \u043a\u0430\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f 1C:Enterprise Development Tools | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:47:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:47:12+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Eclipse comme plateforme technologique pour 1C:Enterprise Development Tools | ProHoster","description":"Il est probable qu'Eclipse n'ait plus besoin d'une pr\u00e9sentation particuli\u00e8re.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Eclipse \u043a\u0430\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f 1C:Enterprise Development Tools | ProHoster","og:description":"\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:47:12+00:00","article:modified_time":"2019-10-31T18:47:12+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32464","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:00:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:58:24","updated":"2026-01-21 11:00:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}