{"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\/de\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Wahrscheinlich, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> verliert es nie an Bedeutung. Viele kennen Eclipse durch die Eclipse Java Entwicklungstools (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Diese beliebte Open-Source Java IDE wird von den meisten Entwicklern mit dem Begriff \u201eEclipse\u201c assoziiert. Aber Eclipse ist auch eine erweiterbare Plattform f\u00fcr die Integration von Entwicklungswerkzeugen (Eclipse Platform) und eine Vielzahl von IDEs, die auf ihr basieren, einschlie\u00dflich JDT. Eclipse umfasst auch das Eclipse Project, ein \u00fcbergeordnetes Projekt, das die Entwicklung der Eclipse Platform und JDT koordiniert, sowie das Eclipse SDK \u2013 das Ergebnis dieser Entwicklung. Schlie\u00dflich ist Eclipse eine Open-Source-Stiftung mit einer riesigen Gemeinschaft von Projekten, von denen viele nicht in Java geschrieben sind oder mit Entwicklungswerkzeugen in Beziehung stehen (zum Beispiel die Projekte <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). Die Welt von Eclipse ist \u00e4u\u00dferst vielf\u00e4ltig.<\/p>\n<p>In diesem Artikel, der als \u00dcbersicht konzipiert ist, werden wir versuchen, einige grundlegende Aspekte der Architektur von Eclipse als Plattform f\u00fcr integrierte Entwicklungswerkzeuge zu betrachten und eine erste Vorstellung von den Komponenten von Eclipse zu vermitteln, die die Basis der technologischen Plattform f\u00fcr den \u201eneuen Konfigurator\u201c 1C:Enterprise bilden, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">1C:Enterprise Development Tools<\/a><\/noindex>. Nat\u00fcrlich wird diese Betrachtung zwangsl\u00e4ufig in vielerlei Hinsicht oberfl\u00e4chlich und recht eingeschr\u00e4nkt sein, insbesondere da wir uns nicht nur auf Eclipse-Entwickler als Zielgruppe konzentrieren. Dennoch hoffen wir, dass selbst erfahrene Eclipse-Entwickler interessante Informationen in diesem Artikel finden werden. Zum Beispiel werden wir \u00fcber eines der \"Geheimnisse von Eclipse\" berichten, ein relativ neues und bisher wenig bekanntes Projekt. <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, das von der Firma 1C gegr\u00fcndet und unterst\u00fctzt wird.<br \/>\n<img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 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>Einf\u00fchrung in die Architektur von Eclipse<\/h2>\n<p>\nZun\u00e4chst betrachten wir einige allgemeine Aspekte der Architektur von Eclipse am Beispiel <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java Development Tools<\/a><\/noindex> (JDT). Die Wahl von JDT als Beispiel ist nicht zuf\u00e4llig. Es war die erste integrierte Entwicklungsumgebung, die in Eclipse erschienen ist. Die anderen *DT-Projekte von Eclipse, wie Eclipse C\/C++ Development Tooling (CDT), wurden sp\u00e4ter erstellt und \u00fcbernahmen sowohl die grundlegenden Architekturprinzipien als auch einzelne Codefragmente aus JDT. Die architektonischen Grundlagen, die in JDT gelegt wurden, sind bis heute f\u00fcr nahezu jede IDE relevant, die auf der Eclipse-Plattform basiert, einschlie\u00dflich 1C:Enterprise Development Tools.<\/p>\n<p>Zun\u00e4chst ist zu beachten, dass Eclipse eine klar definierte architektonische Schichtung aufweist, die die sprachunabh\u00e4ngige Funktionalit\u00e4t von der f\u00fcr bestimmte Programmiersprachen vorgesehenen Funktionalit\u00e4t trennt und die UI-unabh\u00e4ngigen \u201aKern\u2018 (Core)-Komponenten von den Komponenten trennt, die f\u00fcr die Unterst\u00fctzung der Benutzeroberfl\u00e4che zust\u00e4ndig sind.<\/p>\n<p>So definiert die Eclipse-Plattform die allgemeine, sprachunabh\u00e4ngige Infrastruktur, w\u00e4hrend die Java-Entwicklungstools Eclipse eine voll funktionsf\u00e4hige Java-IDE hinzuf\u00fcgen. Sowohl die Eclipse-Plattform als auch JDT bestehen aus mehreren Komponenten, von denen jede entweder zum UI-unabh\u00e4ngigen \u201aKern\u2018 oder zur UI-Schicht geh\u00f6rt (siehe Abb. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 1. Eclipse-Plattform und JDT<\/b><\/p>\n<p>Die Hauptkomponenten der Eclipse-Plattform sind:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Definiert die Plugin-Infrastruktur. Eclipse zeichnet sich durch eine modulare Architektur aus. Im Wesentlichen ist Eclipse eine Sammlung von \u201aErweiterungspunkten\u2018 und \u201aErweiterungen\u2018.<\/li>\n<li><b>Workspace<\/b> \u2014 Verwaltet ein oder mehrere Projekte. Ein Projekt besteht aus Ordnern und Dateien, die direkt im Dateisystem angezeigt werden.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Bietet grundlegende Elemente der Benutzeroberfl\u00e4che, die mit dem Betriebssystem integriert sind.<\/li>\n<li><b>JFace<\/b> \u2014 Stellt eine Reihe von UI-Frameworks zur Verf\u00fcgung, die auf SWT basieren.<\/li>\n<li><b>Workbench<\/b> \u2014 Definiert das UI-Paradigma von Eclipse: Editoren, Ansichten, Perspektiven.<\/li>\n<\/ul>\n<p>\nEs ist wichtig zu erw\u00e4hnen, dass die Eclipse Platform auch viele andere n\u00fctzliche Komponenten f\u00fcr den Aufbau integrierter Entwicklungswerkzeuge bietet, darunter Debug, Compare, Search und Team. Besonders hervorzuheben ist JFace Text \u2013 die Grundlage f\u00fcr die Entwicklung von \u00abintelligenten Editor\u00bb f\u00fcr Quellcode. Leider ist es in diesem Artikel nicht m\u00f6glich, auch nur einen fl\u00fcchtigen \u00dcberblick \u00fcber diese Komponenten sowie die UI-Schicht zu geben, sodass wir im verbleibenden Teil dieses Abschnitts auf eine \u00dcbersicht der wichtigsten \u201eKern\u201c-Komponenten der Eclipse Platform und JDT beschr\u00e4nkt bleiben.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nDie Plugin-Infrastruktur von Eclipse basiert auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> und wird vom Projekt bereitgestellt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Jedes Eclipse-Plugin ist ein OSGi-Bundle. Die OSGi-Spezifikation definiert unter anderem Mechanismen zur Versionierung und zur Aufl\u00f6sung von Abh\u00e4ngigkeiten. Neben diesen standardm\u00e4\u00dfigen Mechanismen f\u00fchrt Equinox das Konzept ein <i>von Erweiterungspunkten<\/i>. Jedes Plugin kann seine eigenen Erweiterungspunkte definieren und zus\u00e4tzliche Funktionalit\u00e4t (\u201eErweiterungen\u201c) in das System einbringen, indem es die von diesem oder anderen Plugins definierten Erweiterungspunkte nutzt. Eine detaillierte Beschreibung der Mechanismen von OSGi und Equinox w\u00fcrde den Rahmen dieses Artikels sprengen. Es sei jedoch erw\u00e4hnt, dass die Modularisierung in Eclipse umfassend ist (jedes Teilsystem, einschlie\u00dflich Runtime, besteht aus einem oder mehreren Plugins) und nahezu alles in Eclipse erweiterbar ist. Diese Prinzipien wurden bereits lange vor der Einf\u00fchrung von OSGi in die Architektur von Eclipse eingebaut (damals kam eine eigene Technologie zum Einsatz, die in vielen Aspekten OSGi \u00e4hnlich war).<\/p>\n<h4>Kernarbeitsbereich<\/h4>\n<p>\nSo gut wie jede integrierte Entwicklungsumgebung, die auf der Eclipse-Plattform basiert, arbeitet mit dem Eclipse-Arbeitsbereich. Dieser Arbeitsbereich enth\u00e4lt in der Regel den Quellcode der in der IDE entwickelten Anwendung. Der Arbeitsbereich spiegelt direkt das Dateisystem wider und besteht aus Projekten, die Ordner und Dateien enthalten. Diese Projekte, Ordner und Dateien werden genannt <i>Ressourcen<\/i> Der Workspace in Eclipse fungiert als Cache f\u00fcr das Dateisystem und beschleunigt so das Durchsuchen des Ressourcenbaums erheblich. Dar\u00fcber hinaus bietet der Workspace eine Reihe zus\u00e4tzlicher Dienste, darunter <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">einen Benachrichtigungsmechanismus f\u00fcr \u00c4nderungen an Ressourcen<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">eine Infrastruktur f\u00fcr inkrementelle Builder<\/a><\/noindex>.<\/p>\n<p>Die Komponente Core Resources (Plugin org.eclipse.core.resources) ist f\u00fcr die Unterst\u00fctzung des Workspaces und seiner Ressourcen zust\u00e4ndig. Insbesondere bietet diese Komponente programmgesteuerten Zugriff auf den Workspace in Form von <i>Ressourcenmodellen<\/i>. Um effektiv mit diesem Modell zu arbeiten, ben\u00f6tigen die Clients einen einfachen Weg, um auf die Ressource zuzugreifen. Dabei w\u00e4re es w\u00fcnschenswert, dass das Objekt, das den Zustand der Ressource im Modell speichert, vom clientseitigen Zugriff verborgen bleibt. Andernfalls k\u00f6nnte der Client, beispielsweise bei der L\u00f6schung einer Datei, weiterhin auf ein Objekt zugreifen, das im Modell nicht mehr vorhanden ist, was zu Problemen f\u00fchren w\u00fcrde. Eclipse l\u00f6st dieses Problem mithilfe des sogenannten <i>Handles<\/i> Der Handle fungiert als Schl\u00fcssel (er kennt nur den Pfad zur Ressource im Workspace) und kontrolliert vollst\u00e4ndig den Zugriff auf das innere Objekt des Modells, das die Informationen \u00fcber den Zustand der Ressource speichert. Dieses Design ist eine Variation des Musters <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>Abbildung 2 veranschaulicht die Handle\/Body-Idee im Kontext von Ressourcenmodellen. Die Schnittstelle IResource repr\u00e4sentiert den Handle der Ressource und stellt die API dar, im Gegensatz zur Klasse Resource, die dieses Interface implementiert, sowie zur Klasse ResourceInfo, die den Body repr\u00e4sentiert und keine API darstellt. Es ist wichtig zu betonen, dass der Handle nur den Pfad zur Ressource relativ zum Wurzelverzeichnis des Workspaces kennt und keinen Verweis auf die Ressource-Informationen enth\u00e4lt. Die Objekte der Ressource-Informationen bilden sozusagen einen 'Elementbaum'. Diese Datenstruktur ist vollst\u00e4ndig im Speicher materialisiert. Um die Instanz der Ressource-Informationen zu finden, die einem bestimmten Handle entspricht, wird der Elementbaum gem\u00e4\u00df dem in diesem Handle gespeicherten Pfad durchsucht.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abbildung 2. IResource und ResourceInfo<\/b><\/p>\n<p>Wie wir sp\u00e4ter sehen werden, wird das grundlegende Design des Ressourcenmodells (man k\u00f6nnte es als handle-basiert bezeichnen) auch in Eclipse und f\u00fcr andere Modelle verwendet. Lassen Sie uns vorerst einige charakteristische Eigenschaften dieses Designs aufz\u00e4hlen:<\/p>\n<ul>\n<li>Handle ist ein Wertobjekt (Value Object). Wertobjekte sind unver\u00e4nderliche Objekte, deren Gleichheit nicht auf Identit\u00e4t basiert. Solche Objekte k\u00f6nnen sicher als Schl\u00fcssel in gehashten Containern verwendet werden. Mehrere Instanzen von Handle k\u00f6nnen auf dasselbe Ressourcenobjekt verweisen. Zum Vergleichen dieser Objekte sollte die Methode equals(Object) verwendet werden.<\/li>\n<li>Handle definiert das Verhalten der Ressource, enth\u00e4lt jedoch keine Informationen \u00fcber den Zustand der Ressource (die einzigen Daten, die es speichert, sind der \u201eSchl\u00fcssel\u201c, der Pfad zur Ressource).<\/li>\n<li>Handle kann auf eine nicht existierende Ressource verweisen (entweder auf eine Ressource, die noch nicht erstellt wurde, oder auf eine Ressource, die bereits gel\u00f6scht wurde). Die Existenz einer Ressource kann mit der Methode IResource.exists() \u00fcberpr\u00fcft werden.<\/li>\n<li>Einige Operationen k\u00f6nnen ausschlie\u00dflich auf der Information beruhen, die im Handle selbst gespeichert ist (sogenannte Handle-only-Operationen). Beispiele hierf\u00fcr sind IResource.getParent(), getFullPath() usw. Die Ressource muss nicht existieren, um eine solche Operation erfolgreich auszuf\u00fchren. Operationen, f\u00fcr die erforderlich ist, dass die Ressource existiert, werfen eine Ausnahme (CoreException), wenn die Ressource nicht existiert.<\/li>\n<\/ul>\n<p>\nEclipse bietet einen effektiven Mechanismus zur Benachrichtigung \u00fcber Ver\u00e4nderungen an Workspace-Ressourcen (siehe Abb. 3). Ressourcen k\u00f6nnen sowohl durch Aktionen innerhalb der Eclipse IDE als auch durch die Synchronisierung mit dem Dateisystem ver\u00e4ndert werden. In beiden F\u00e4llen erhalten die Kunden, die sich f\u00fcr Benachrichtigungen angemeldet haben, detaillierte Informationen \u00fcber die \u00c4nderungen in Form von 'Ressourcendeltas' (resource delta). Die Delta beschreibt die \u00c4nderungen zwischen zwei Zust\u00e4nden des (Unter-)Baums der Workspace-Ressourcen und selbst ist sie ein Baum, wobei jeder Knoten eine \u00c4nderung einer bestimmten Ressource beschreibt und eine Liste von Deltas auf der n\u00e4chsten Ebene enth\u00e4lt, die die \u00c4nderungen der untergeordneten Ressourcen darstellen.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/8af412412ee97d205137ab70c8444a50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 3. IResourceChangeEvent und IResourceDelta<\/b><\/p>\n<p>Der auf Ressourcendeltas basierende Benachrichtigungsmechanismus weist folgende Merkmale auf:<\/p>\n<ul>\n<li>Einzelne \u00c4nderungen und mehrere \u00c4nderungen werden durch dieselbe Struktur beschrieben, da die Delta nach dem Prinzip der rekursiven Komposition aufgebaut ist. Abonnierende Kunden k\u00f6nnen Benachrichtigungen \u00fcber \u00c4nderungen an Ressourcen durch rekursives Absteigen im Delta-Baum verarbeiten.<\/li>\n<li>Die Delta enth\u00e4lt umfassende Informationen \u00fcber die \u00c4nderung der Ressource, einschlie\u00dflich ihrer Verschiebung und\/oder der \u00c4nderung der damit verbundenen \"Marker\" (beispielsweise werden Kompilierungsfehler als Marker dargestellt).<\/li>\n<li>Da auf die Ressource \u00fcber einen Handle verwiesen wird, kann das Delta auf nat\u00fcrliche Weise auf die entfernte Ressource verweisen.<\/li>\n<\/ul>\n<p>\nWie wir bald sehen werden, sind die grundlegenden Bestandteile des Designs des Benachrichtigungsmechanismus f\u00fcr \u00c4nderungen im Ressourcenmodell auch f\u00fcr andere handle-basierte Modelle relevant.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nDas Ressourcenmodell des Eclipse-Arbeitsbereichs ist ein grundlegendes, sprachunabh\u00e4ngiges Modell. Die JDT Core-Komponente (Plugin org.eclipse.jdt.core) bietet eine API zur Navigation und Analyse der Struktur des Arbeitsbereichs aus der Sicht von Java, das sogenannte \"Java-Modell\" (<i>Java-Modell<\/i>). Diese API wird in Bezug auf Java-Elemente definiert, im Gegensatz zur zugrunde liegenden API des Ressourcenmodells, die in Bezug auf Ordner und Dateien definiert ist. Die Hauptschnittstellen des Java-Elementbaums sind in Abb. 4 dargestellt.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 4. Elemente des Java-Modells<\/b><\/p>\n<p>Das Java-Modell verwendet dasselbe Handle\/Body-Muster wie das Ressourcenmodell (Abb. 5). IJavaElement fungiert als Handle, w\u00e4hrend JavaElementInfo den Body repr\u00e4sentiert. Das Interface IJavaElement definiert ein Protokoll, das f\u00fcr alle Java-Elemente g\u00fcltig ist. Einige seiner Methoden sind nur f\u00fcr Handle verf\u00fcgbar: getElementName(), getParent() usw. Das Objekt JavaElementInfo speichert den Zustand des entsprechenden Elements: seine Struktur und Attribute.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 5. IJavaElement und JavaElementInfo<\/b><\/p>\n<p>Das Java-Modell weist einige Unterschiede in der Implementierung des grundlegenden Handle\/Body-Designs im Vergleich zum Ressourcenmodell auf. Wie bereits erw\u00e4hnt, befindet sich im Ressourcenmodell der Elementbaum, dessen Knoten Objekte von Resource Info sind, vollst\u00e4ndig im Speicher. Im Java-Modell k\u00f6nnen jedoch erheblich mehr Elemente enthalten sein als im Ressourcenbaum, da auch die interne Struktur von .java- und .class-Dateien dargestellt wird: Typen, Felder und Methoden.<\/p>\n<p>Um die vollst\u00e4ndige Materialisierung des gesamten Elementbaums im Speicher zu vermeiden, verwendet die Java-Modellimplementation einen begrenzten LRU-Cache f\u00fcr Elementinformationen, wobei der Schl\u00fcssel ein Handle von IJavaElement ist. Die Objekte der Elementinformationen werden auf Anfrage erstellt, w\u00e4hrend die Navigation im Elementbaum erfolgt. Dabei werden die am wenigsten h\u00e4ufig verwendeten Elemente aus dem Cache verdr\u00e4ngt, wodurch der Speicherverbrauch des Modells auf die festgelegte Cache-Gr\u00f6\u00dfe begrenzt bleibt. Dies ist ein weiterer Vorteil des handle-basierten Designs, das solche Implementierungsdetails vollst\u00e4ndig vom Client-Code verbirgt.<\/p>\n<p>Der Benachrichtungsmechanismus f\u00fcr \u00c4nderungen an Java-Elementen \u00e4hnelt im Allgemeinen dem oben beschriebenen Mechanismus zur Verfolgung von \u00c4nderungen an Ressourcen im Arbeitsbereich. Ein Client, der \u00c4nderungen im Java-Modell verfolgen m\u00f6chte, abonniert Benachrichtigungen, die in Form eines Objekts vom Typ ElementChangedEvent dargestellt werden, das ein IJavaElementDelta enth\u00e4lt (siehe Abb. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 6. ElementChangedEvent und IJavaElementDelta<\/b><\/p>\n<p>Das Java-Modell enth\u00e4lt keine Informationen \u00fcber den Methodenk\u00f6rper oder die Namensaufl\u00f6sung. Daher bietet JDT Core f\u00fcr eine detaillierte Analyse von Java-Code ein zus\u00e4tzliches (nicht handle-basiertes) Modell an: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">abstrakter Syntaxbaum<\/a><\/noindex> (abstract syntax tree, AST). Der AST stellt das Ergebnis der syntaktischen Analyse des Quelltextes dar. Die Knoten des AST entsprechen den Elementen der Struktur des Quellmoduls (Deklarationen, Operatoren, Ausdr\u00fccke usw.) und enthalten Informationen \u00fcber die Position des entsprechenden Elements im Quelltext sowie optional Informationen zur Namensaufl\u00f6sung in Form von Verweisen auf sogenannte <i>Bindings<\/i>. Bindings sind Objekte, die benannte Entit\u00e4ten wie Typen, Methoden und Variablen repr\u00e4sentieren, die dem Compiler bekannt sind. Im Gegensatz zu den Knoten des AST, die einen Baum bilden, unterst\u00fctzen Bindings Querverweise und bilden im Allgemeinen ein Graph. Die abstrakte Klasse ASTNode ist die gemeinsame Basisklasse f\u00fcr alle Knoten des AST. Die Unterklassen von ASTNode entsprechen bestimmten syntaktischen Konstruktionen der Programmiersprache Java.<\/p>\n<p>Da syntaktische B\u00e4ume erhebliche Mengen an Speicher verbrauchen k\u00f6nnen, speichert JDT nur einen AST f\u00fcr den aktiven Editor im Cache. Im Gegensatz zum Java-Modell wird der AST normalerweise als 'zwischenzeitliches', 'tempor\u00e4res' Modell betrachtet, auf dessen Elemente die Clients au\u00dferhalb des Kontexts der Operation, die zur Erstellung des AST gef\u00fchrt hat, keine Verweise halten sollten.<\/p>\n<p>Die genannten drei Modelle (Java-Modell, AST, Bindings) bilden zusammen die Grundlage f\u00fcr die Entwicklung von \u201eintelligenten Entwicklungswerkzeugen\u201c in JDT. Dazu geh\u00f6ren ein leistungsstarker Java-Editor mit verschiedenen \u201eHilfen\u201c, Funktionen zur Verarbeitung von Quellcode (wie die Organisation der Importliste und das Formatieren gem\u00e4\u00df dem festgelegten Stil), sowie Such- und Refactoring-Tools. Dabei spielt das Java-Modell eine besondere Rolle, da es als Grundlage f\u00fcr die visuelle Darstellung der Struktur der zu entwickelnden Anwendung dient (zum Beispiel im Package Explorer, Outline, Suche, Call Hierarchy und Type Hierarchy).<\/p>\n<h2>Eclipse-Komponenten, die in 1C:Enterprise Development Tools verwendet werden<\/h2>\n<p>\nIn Abb. 7 sind die Eclipse-Komponenten dargestellt, die das Fundament der technologischen Plattform f\u00fcr die 1C:Enterprise Development Tools bilden.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 7. Eclipse als Plattform f\u00fcr die 1C:Enterprise Development Tools<\/b><\/p>\n<p><b>Eclipse-Plattform<\/b> stellt die grundlegende Infrastruktur bereit. Einige Aspekte dieser Infrastruktur haben wir im vorherigen Abschnitt behandelt.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Eclipse Modeling Framework<\/a><\/noindex><\/b> (<b>EMF<\/b>) bietet allgemeine Mittel zur Modellierung strukturierter Daten. EMF ist in die Eclipse-Plattform integriert, kann aber auch eigenst\u00e4ndig in regul\u00e4ren Java-Anwendungen verwendet werden. H\u00e4ufig sind neue Eclipse-Entwickler bereits gut mit EMF vertraut, obwohl sie sich in den Feinheiten der Eclipse-Plattform noch nicht ganz auskennen. Ein Grund f\u00fcr diese wohlverdiente Popularit\u00e4t ist das universelle Design, das unter anderem eine einheitliche API auf Metaebene umfasst, die eine generische Arbeit mit jedem EMF-Modell erm\u00f6glicht. Die von EMF bereitgestellten Basisimplementierungen f\u00fcr Modellobjekte und das System zur Codegenerierung basierend auf der Metamodell erh\u00f6hen erheblich die Entwicklungsgeschwindigkeit und reduzieren die Anzahl der Fehler. Dar\u00fcber hinaus enth\u00e4lt EMF Mechanismen zur Serialisierung von Modellen, zur Verfolgung von \u00c4nderungen im Modell und vieles mehr. <\/p>\n<p>Wie jedes wirklich universelle Werkzeug eignet sich EMF zur L\u00f6sung einer Vielzahl von Modellierungsaufgaben, aber einige Klassen von Modellen (wie die oben beschriebenen handle-basierten Modelle) ben\u00f6tigen m\u00f6glicherweise spezialisiertere Modellierungstools. \u00dcber EMF zu berichten, ist eine undankbare Aufgabe, insbesondere im begrenzten Rahmen eines Artikels, da es sich um ein Thema f\u00fcr ein eigenes, recht umfangreiches Buch handelt. Es sei nur erw\u00e4hnt, dass das qualitativ hochwertige System der Verallgemeinerungen, das dem EMF zugrunde liegt, die Entstehung einer ganzen Reihe von Modellen erm\u00f6glicht hat, die in ein \u00fcbergeordnetes Projekt zur Modellierung eingehen. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Eclipse Modeling<\/a><\/noindex> neben EMF selbst. Eines dieser Projekte ist Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> bietet eine Infrastruktur f\u00fcr das 'Textmodellieren'. Xtext verwendet <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> F\u00fcr die syntaktische Analyse des Quelltexts und EMF zur Darstellung des resultierenden ASG (Abstract Semantic Graph, der im Wesentlichen eine Kombination aus AST und Bindungen ist), auch als \"semantisches Modell\" bezeichnet. Die Grammatik des mit Xtext modellierten Sprachs wird in einer eigenen Xtext-Sprache beschrieben. Dies erm\u00f6glicht nicht nur die Generierung einer Grammatikbeschreibung f\u00fcr ANTLR, sondern auch den Erhalt eines Mechanismus zur Serialisierung des AST (d.h. Xtext bietet sowohl einen Parser als auch einen Unparser), kontextbezogene Hinweise und eine Reihe weiterer sprachlicher Komponenten. Andererseits ist die in Xtext verwendete Grammatikbeschreibungssprache weniger flexibel im Vergleich zu der Grammatikbeschreibungssprache in ANTLR. Daher muss man manchmal die zu implementierende Sprache an Xtext anpassen, was normalerweise kein Problem darstellt, wenn es sich um eine vollst\u00e4ndig neu entwickelte Sprache handelt, aber f\u00fcr Sprachen mit bereits etabliertem Syntax unpraktisch sein kann. Trotz dieser Einschr\u00e4nkungen ist Xtext derzeit das reifste, funktional vollst\u00e4ndigste und vielseitigste Tool in Eclipse zur Erstellung von Programmiersprachen und den dazugeh\u00f6rigen Entwicklungstools. Insbesondere ist es ein ideales Werkzeug f\u00fcr schnelles Prototyping. <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\">dom\u00e4nenspezifische Sprachen<\/a><\/noindex> (Domain Specific Language, DSL). Neben dem erw\u00e4hnten \u201eSprachkern\u201c auf Basis von ANTLR und EMF bietet Xtext eine Vielzahl n\u00fctzlicher Funktionen auf h\u00f6herer Ebene, einschlie\u00dflich Indexierungsmechanismen, inkrementellem Build, \u201eintelligentem Editor\u201c und vieles mehr, l\u00e4sst jedoch sprachliche handle-basierte Modelle au\u00dfen vor. Wie EMF ist auch Xtext ein Thema f\u00fcr ein eigenes Buch, und wir werden wahrscheinlich selbst nicht in der Lage sein, jetzt auch nur kurz auf alle seine M\u00f6glichkeiten einzugehen.<\/p>\n<p>Die 1C:Enterprise Development Tools nutzen sowohl EMF selbst als auch eine Reihe anderer Projekte von Eclipse Modeling aktiv. Insbesondere ist Xtext eines der wichtigsten Werkzeuge f\u00fcr die Entwicklung von 1C:Enterprise-Sprachen, wie der eingebetteten Programmiersprache und der Abfragesprache. Eine weitere Basis dieser Entwicklungswerkzeuge ist das Projekt Eclipse Handly, auf das wir n\u00e4her eingehen werden (unter den genannten Komponenten von Eclipse ist es bislang am wenigsten bekannt).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, ein Teilprojekt des \u00fcbergeordneten Projekts Eclipse Technology, entstand durch den initialen Codebeitrag von 1C an die Eclipse Foundation im Jahr 2014. Seitdem unterst\u00fctzt die Firma 1C die Weiterentwicklung des Projekts weiterhin: Die Committer von Handly sind Mitarbeiter des Unternehmens. Das Projekt ist klein, besetzt jedoch eine ausreichend einzigartige Nische in Eclipse: Das Hauptziel ist die Unterst\u00fctzung der Entwicklung von handle-basierten Modellen.<\/p>\n<p>Die grundlegenden architektonischen Prinzipien handle-basierter Modelle, wie die Handle\/Body-Idiomatik, wurden oben am Beispiel des Ressourcenmodells und des Java-Modells behandelt. Es wurde ebenfalls festgestellt, dass sowohl das Ressourcenmodell als auch das Java-Modell wichtige Grundlagen f\u00fcr die Eclipse Java Development Tools (JDT) darstellen. Da praktisch alle *DT-Projekte von Eclipse eine Architektur \u00e4hnlich der von JDT aufweisen, ist es keine \u00dcbertreibung zu sagen, dass handle-basierte Modelle der Grundstein f\u00fcr viele, wenn nicht sogar alle IDEs sind, die auf der Eclipse-Plattform basieren. Zum Beispiel gibt es im Eclipse C\/C++ Development Tooling (CDT) ein handle-basiertes Modell f\u00fcr C\/C++, das in der Architektur von CDT die gleiche Rolle spielt wie das Java-Modell in JDT.<\/p>\n<p>Bis zur Einf\u00fchrung von Handly bot Eclipse keine spezialisierten Bibliotheken zum Erstellen von handle-basierten Sprachmodellen an. Die bestehenden Modelle wurden haupts\u00e4chlich durch direkte Anpassung des Java-Modellcodes entwickelt (a.k.a. Copy\/Paste). <i>in den F\u00e4llen, in denen dies m\u00f6glich ist<\/i> Eclipse Public License (EPL). (Es versteht sich von selbst, dass dies f\u00fcr Projekte von Eclipse normalerweise rechtlich kein Problem darstellt, was jedoch nicht f\u00fcr Produkte mit propriet\u00e4rem Code gilt.) Abgesehen von der typischen Unsystematik dieser Methode f\u00fchrt sie zu bekannten Problemen: zur Duplizierung von Code, zu Fehlern, die bei der Anpassung auftreten, und \u00e4hnlichem. Noch schlimmer ist, dass die resultierenden Modelle 'eine Sache f\u00fcr sich' bleiben und das vorhandene Potenzial zur Vereinheitlichung nicht nutzen. Es w\u00e4re jedoch m\u00f6glich, durch die Identifizierung gemeinsamer Konzepte und Protokolle f\u00fcr handle-basierte Sprachmodelle wiederverwendbare Komponenten zu schaffen, \u00e4hnlich wie es bei EMF der Fall war.<\/p>\n<p>Man kann nicht sagen, dass es in Eclipse kein Bewusstsein f\u00fcr diese Probleme gegeben h\u00e4tte. Schon 2005 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, der die Erfahrungen bei der Entwicklung des CDT-Prototyps zusammenfasste, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">argumentierte<\/a><\/noindex> Die Notwendigkeit, eine gemeinsame Infrastruktur f\u00fcr Sprachmodelle, einschlie\u00dflich handle-basierter Modelle, zu schaffen. Doch wie so oft blieben diese Ideen aufgrund vorrangiger Aufgaben unerledigt. Inzwischen bleibt die Faktorisierung des Codes von *DT-Projekten ein nach wie vor unzureichend bearbeitetes Thema in Eclipse.<\/p>\n<p>In gewissem Sinne soll das Handly-Projekt \u00e4hnliche Aufgaben wie EMF l\u00f6sen, jedoch f\u00fcr handle-basierte Modelle, insbesondere Sprachmodelle (d.h. Modelle, die Elemente der Struktur einer Programmiersprache repr\u00e4sentieren). Im Folgenden sind die Hauptziele aufgelistet, die bei der Gestaltung von Handly verfolgt wurden:<\/p>\n<ul>\n<li>Herausarbeitung der grundlegenden Abstraktionen des Fachgebiets.<\/li>\n<li>Reduzierung des Aufwands und Verbesserung der Qualit\u00e4t der Implementierung von sprachlichen handle-basierten Modellen durch Wiederverwendung von Code.<\/li>\n<li>Bereitstellung einer einheitlichen API auf Meta-Ebene f\u00fcr die resultierenden Modelle, die die Erstellung gemeinsamer IDE-Komponenten erm\u00f6glicht, die mit sprachlichen handle-basierten Modellen arbeiten.<\/li>\n<li>Flexibilit\u00e4t und Skalierbarkeit.<\/li>\n<li>Integration mit Xtext (in einer separaten Schicht).<\/li>\n<\/ul>\n<p>\nZur Identifizierung allgemeiner Konzepte und Protokolle wurden bestehende Implementierungen von handle-basierten Modellen analysiert. Die grundlegenden Schnittstellen und Basisimplementierungen, die von Handly bereitgestellt werden, sind in Abb. 8 dargestellt.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 8. Allgemeine Schnittstellen und Basisimplementierungen der Handly-Elemente<\/b><\/p>\n<p>Das IElement-Interface repr\u00e4sentiert den Handle eines Elements und ist allgemeing\u00fcltig f\u00fcr alle Elemente von Modellen, die auf Handly basieren. Die abstrakte Klasse Element implementiert den generischen Handle\/Body-Mechanismus (Abb. 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 9. IElement und generische Implementierung von Handle\/Body<\/b><\/p>\n<p>Dar\u00fcber hinaus bietet Handly einen generischen Mechanismus zur Benachrichtigung \u00fcber \u00c4nderungen an den Modellen (Abb. 10). Wie zu sehen ist, \u00e4hnelt er im Gro\u00dfen und Ganzen den Benachrichtigungsmechanismen, die in der Ressourcenmodellierung und der Java-Modellierung implementiert sind, und verwendet IElementDelta f\u00fcr eine einheitliche Darstellung von \u00c4nderungsinformationen \u00fcber Elemente.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 10. Allgemeine Schnittstellen und Basisimplementierungen des Handly-Benachrichtigungsmechanismus<\/b><\/p>\n<p>Der oben behandelte Teil von Handly (Abb. 9 und 10) kann zur Darstellung nahezu beliebiger handle-basierter Modelle verwendet werden. Zur Erstellung <i>sprachlicher<\/i> Das Projektmodell bietet zus\u00e4tzliche Funktionen \u2013 insbesondere allgemeine Schnittstellen und grundlegende Implementierungen f\u00fcr Elemente der Struktur des urspr\u00fcnglichen Textes, auch bekannt als <i>Quellelemente<\/i> (Abb. 8). Die Schnittstelle ISourceFile repr\u00e4sentiert die Quelldatei, w\u00e4hrend ISourceConstruct \u2013 ein Element innerhalb der Quelldatei ist. Die abstrakten Klassen SourceFile und SourceConstruct implementieren verallgemeinerte Mechanismen zur Unterst\u00fctzung der Arbeit mit Quelldateien und deren Elementen, beispielsweise die Arbeit mit Textpuffern, die Bindung an die Koordinaten des Elements im urspr\u00fcnglichen Text, die Abstimmung der Modelle mit dem aktuellen Inhalt des Arbeitskopie-Puffers usw. Die Implementierung dieser Mechanismen ist in der Regel eine anspruchsvolle Aufgabe, und Handly kann den Entwicklungsaufwand f\u00fcr sprachliche, handle-basierte Modelle erheblich reduzieren, indem es qualitativ hochwertige Grundimplementierungen bereitstellt.<\/p>\n<p>Neben den oben genannten grundlegenden Mechanismen bietet Handly eine Infrastruktur f\u00fcr Textpuffer und Snapshots, unterst\u00fctzt die Integration mit Quellcode-Editoren (einschlie\u00dflich der direkt verf\u00fcgbaren Integration mit dem Xtext-Editor) und enth\u00e4lt einige allgemeine UI-Komponenten, die mit Handly-basierten Modellen arbeiten, wie beispielsweise das Outline-Framework. Zur Veranschaulichung seiner M\u00f6glichkeiten stellt das Projekt mehrere Beispiele bereit, darunter auch die Implementierung eines Java-Modells auf Handly. (Im Vergleich zur vollst\u00e4ndigen Implementierung des Java-Modells in JDT ist dieses Modell absichtlich etwas vereinfacht, um die Anschaulichkeit zu erh\u00f6hen.)<\/p>\n<p>Wie bereits erw\u00e4hnt, wurde beim anf\u00e4nglichen Design von Handly und dessen fortlaufender Entwicklung ein ernsthaftes Augenmerk auf Skalierbarkeit und Flexibilit\u00e4t gelegt und wird dies auch weiterhin getan. <\/p>\n<p>Im Grunde genommen skalieren handle-basierte Modelle aufgrund ihres Designs recht gut. Beispielsweise erm\u00f6glicht die Idiomatik von Handle\/Body eine Begrenzung des von dem Modell verbrauchten Speichers. Allerdings gibt es einige Feinheiten. Bei Testungen von Handly hinsichtlich der Skalierbarkeit wurde ein Problem in der Implementierung des Benachrichtigungsmechanismus festgestellt \u2013 bei der \u00c4nderung einer gro\u00dfen Anzahl von Elementen ben\u00f6tigte der Delta-Bau zu viel Zeit. Es stellte sich heraus, dass dasselbe Problem auch im Java-Modell JDT vorhanden war, aus dem der entsprechende Code einst adaptiert wurde. Wir haben den Fehler in Handly behoben und einen \u00e4hnlichen Patch f\u00fcr JDT vorbereitet, der dankend angenommen wurde. Dies ist nur ein Beispiel, wie die Integration von Handly in bestehende Modellimplementierungen potenziell n\u00fctzlich sein k\u00f6nnte, da in diesem Fall der Fehler nur an einer Stelle behoben werden k\u00f6nnte.<\/p>\n<p>Um die Integration von Handly in bestehende Modellimplementierungen technisch zu erm\u00f6glichen, muss die Bibliothek \u00fcber erhebliche Flexibilit\u00e4t verf\u00fcgen. Das Hauptproblem besteht darin, die Abw\u00e4rtskompatibilit\u00e4t des API-Modells zu wahren. Diese Herausforderung wurde gel\u00f6st in <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> durch die klare Trennung der modell-spezifischen API, die vom Entwickler definiert und vollst\u00e4ndig kontrolliert wird, vom einheitlichen Meta-Level-API, das von der Bibliothek bereitgestellt wird. Dies erm\u00f6glicht nicht nur die technische Integration von Handly in bestehende Implementierungen, sondern gibt auch dem Entwickler des neuen Modells erhebliche Freiheit bei der API-Gestaltung.<\/p>\n<p>Flexibilit\u00e4t hat auch andere Aspekte. Handly legt beispielsweise kaum Einschr\u00e4nkungen an die Modellstruktur und kann sowohl f\u00fcr die Modellierung von allgemeinen Programmiersprachen als auch von dom\u00e4nenspezifischen Sprachen verwendet werden. Beim Aufbau der Struktur der Quelldatei gibt Handly keine bestimmte Form der AST-Darstellung vor und erfordert grunds\u00e4tzlich nicht einmal das Vorhandensein eines AST, was die Kompatibilit\u00e4t mit praktisch allen Parsing-Mechanismen gew\u00e4hrleistet. Schlie\u00dflich unterst\u00fctzt Handly eine umfassende Integration mit dem Eclipse-Arbeitsbereich, kann jedoch auch direkt mit Dateisystemen arbeiten, dank der Integration mit <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>Aktuelle Version <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> wurde im Dezember 2016 ver\u00f6ffentlicht. Obwohl sich das Projekt derzeit in der Inkubationsphase befindet und die API noch nicht endg\u00fcltig festgelegt ist, wird Handly bereits in zwei gro\u00dfen kommerziellen Produkten eingesetzt, die den Mut hatten, als \"fr\u00fche Anwender\" aufzutreten, und bis jetzt keine Bedenken ge\u00e4u\u00dfert haben.<\/p>\n<p>Wie bereits erw\u00e4hnt, ist eines dieser Produkte \u2013 1C:Enterprise Development Tools, wo Handly von Anfang an zur Modellierung von Elementen der hochrangigen Struktur von Sprachen wie 1C:Enterprise verwendet wird, einschlie\u00dflich der integrierten Programmiersprache und der Abfragesprache. Ein anderes Produkt ist der breiten \u00d6ffentlichkeit weniger bekannt. Es handelt sich um <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, eine integrierte Entwicklungsumgebung f\u00fcr die Gestaltung anwendungsspezifischer Prozessoren (application-specific instruction-set processor, ASIP), die sowohl innerhalb des tschechischen Unternehmens Codasip als auch von dessen Kunden genutzt wird, darunter <noindex>AMD<\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.avg.com\/\">DURCHSCHNITT<\/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 nutzt Handly seit 2015 in der Produktion, beginnend mit der Version Handly 0.2. Die aktuellste Version von Codasip Studio verwendet die Version 0.5, die im Juni 2016 ver\u00f6ffentlicht wurde. Ond\u0159ej Il\u010d\u00edk, der die IDE-Entwicklung bei Codasip leitet, steht in Kontakt mit dem Projekt und liefert \u00e4u\u00dferst wichtiges Feedback seitens des \u201eexternen Adopters\u201c. Er fand sogar etwas Zeit, um aktiv an der Entwicklung des Projekts teilzunehmen, indem er eine UI-Schicht (~ 4000 Zeilen Code) f\u00fcr eines der Handly-Beispiele, das Java-Modell, implementierte. Weitere Informationen \u201eaus erster Hand\u201c \u00fcber die Nutzung von Handly durch Adopter finden Sie auf der Seite <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Erfolgsgeschichten<\/a><\/noindex> des Projekts bekanntgaben.<\/p>\n<p>Wir sind zuversichtlich, dass nach der Ver\u00f6ffentlichung der Version 1.0 mit der Garantierung der Stabilit\u00e4t der API und dem Abschluss des Projekts aus dem Inkubationsstatus Handly neue Adapter gewinnen wird. Das Projekt befindet sich weiterhin in der Erprobung und der kontinuierlichen Verbesserung der API und ver\u00f6ffentlicht zweimal j\u00e4hrlich zwei \u201egro\u00dfe\u201c Releases \u2013 im Juni (am gleichen Tag, an dem Eclipse ebenfalls ver\u00f6ffentlicht wird) und im Dezember. Damit wird ein vorhersehbarer Zeitplan gew\u00e4hrleistet, auf den die Adapter z\u00e4hlen k\u00f6nnen. Zus\u00e4tzlich l\u00e4sst sich sagen, dass die Fehlerquote des Projekts auf einem stabil niedrigen Niveau bleibt und Handly seit den ersten Versionen zuverl\u00e4ssig in Produkten von Fr\u00fchadoptern funktioniert. F\u00fcr weitere Einblicke in Eclipse Handly k\u00f6nnen Sie verwenden <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Einsteiger-Tutorial<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Architektur\u00fcbersicht<\/a><\/noindex>.<br \/>\n<br \/>Quelle: <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 4.9.10 - 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. \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\" \/>\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\/de\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/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 als technologische Plattform f\u00fcr 1C:Enterprise Development Tools | ProHoster","description":"Wahrscheinlich ben\u00f6tigt Eclipse schon l\u00e4ngst keine besondere Vorstellung mehr. Viele kennen Eclipse durch die Eclipse Java Development Tools (JDT). Diese popul\u00e4re Open-Source-Java-IDEs wird von den meisten Entwicklern mit dem Begriff \u201eEclipse\u201c assoziiert. Aber Eclipse ist auch eine erweiterbare Plattform f\u00fcr die Integration von Entwicklungstools (Eclipse Platform) und eine Vielzahl von IDEs, die auf dieser basieren.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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. \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","og:url":"https:\/\/prohoster.info\/de\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}