{"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 Entwicklungstools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Wahrscheinlich, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">) und, wenn Entwicklungsspeicherorte verwendet werden, Versionskontrollsysteme wie Git. Die meisten neuen Benutzer m\u00fcssen sich keine Sorgen machen, wenn ihre Konfiguration auf einige fehlende zus\u00e4tzliche Funktionen von ns-3 hinweist, aber f\u00fcr diejenigen, die eine vollst\u00e4ndige Installation w\u00fcnschen, stellt das Projekt ein Wiki bereit, das Seiten mit vielen n\u00fctzlichen Tipps und Ratschl\u00e4gen enth\u00e4lt. Eine solche Seite ist die Seite \"Installation\" mit Installationsanweisungen f\u00fcr verschiedene Systeme, die unter folgender Adresse verf\u00fcgbar sind:<\/a><\/noindex> bedarf es schon lange keiner besonderen Vorstellung mehr. Viele kennen Eclipse durch die Eclipse Java Development Tools (<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. Allerdings ist Eclipse auch eine erweiterbare Plattform zur Integration von Entwicklungswerkzeugen (Eclipse Platform) und eine ganze Reihe von IDEs, die darauf basieren, einschlie\u00dflich JDT. Eclipse umfasst auch das Eclipse Project, ein \u00fcbergeordnetes Projekt, das die Entwicklung der Eclipse Platform und von JDT koordiniert, sowie das Eclipse SDK \u2013 das Ergebnis dieser Entwicklung. Schlie\u00dflich ist Eclipse auch eine Open-Source-Stiftung mit einer riesigen Gemeinschaft von Projekten, von denen viele nicht in Java geschrieben sind oder keinen Bezug zu Entwicklungswerkzeugen haben (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 sehr vielf\u00e4ltig.<\/p>\n<p>In diesem Artikel, der einen \u00dcberblick bieten soll, werden wir versuchen, einige Grundlagen der Architektur von Eclipse als Plattform zur Erstellung integrierter Entwicklungswerkzeuge zu betrachten und einen ersten Eindruck von den Komponenten zu geben, die die technologische 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 in vielerlei Hinsicht oberfl\u00e4chlich und recht begrenzt sein, auch weil wir uns nicht nur an Eclipse-Entwickler als Zielgruppe richten. Dennoch hoffen wir, dass auch erfahrene Eclipse-Entwickler in diesem Artikel interessante Informationen f\u00fcr sich finden k\u00f6nnen. Zum Beispiel werden wir \u00fcber eines der \u201eGeheimnisse von Eclipse\u201c 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 Entwicklungstools\" 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>\nLassen Sie uns zun\u00e4chst einige allgemeine Aspekte der Architektur von Eclipse am Beispiel von <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java Development Tools<\/a><\/noindex> (JDT) betrachten. Die Wahl von JDT als Beispiel ist nicht zuf\u00e4llig. Dies ist die erste integrierte Entwicklungsumgebung, die in Eclipse erschien. Die anderen *DT-Projekte von Eclipse, wie die Eclipse C\/C++ Development Tooling (CDT), wurden sp\u00e4ter erstellt und entlehnten sowohl grundlegende architektonische Prinzipien als auch einzelne Codefragmente aus JDT. Die in JDT verankerten Architekturgrundlagen sind bis heute f\u00fcr nahezu jede IDE g\u00fcltig, die auf der Eclipse Platform basiert, einschlie\u00dflich der 1C:Enterprise Development Tools.<\/p>\n<p>Zun\u00e4chst ist zu beachten, dass Eclipse durch eine relativ klare architektonische Schichtung gekennzeichnet ist, wobei die sprachunabh\u00e4ngige Funktionalit\u00e4t von der Funktionalit\u00e4t getrennt ist, die zur Unterst\u00fctzung spezifischer Programmiersprachen dient, und die UI-unabh\u00e4ngigen \"Kern\"-Komponenten von den Komponenten, die mit der Unterst\u00fctzung der Benutzeroberfl\u00e4che verbunden sind.<\/p>\n<p>So definiert die Eclipse Platform eine gemeinsame, sprachunabh\u00e4ngige Infrastruktur, w\u00e4hrend die Java Development Tools Eclipse eine voll funktionsf\u00e4hige Java IDE hinzuf\u00fcgen. Sowohl die Eclipse Platform als auch JDT bestehen aus mehreren Komponenten, von denen sich jede entweder auf das UI-unabh\u00e4ngige \"Kern\" oder die UI-Schicht bezieht (siehe Abb. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Entwicklungstools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 1. Eclipse Platform und JDT<\/b><\/p>\n<p>Lassen Sie uns die wichtigsten Komponenten der Eclipse Platform aufz\u00e4hlen:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Definiert die Infrastruktur f\u00fcr Plugins. Eclipse weist eine modulare Architektur auf. Im Wesentlichen ist Eclipse eine Sammlung von \"Erweiterungspunkten\" und \"Erweiterungen\".<\/li>\n<li><b>Workspace<\/b> \u2014 Verwalten eines oder mehrerer 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 Benutzeroberfl\u00e4chenelemente, die in das Betriebssystem integriert sind.<\/li>\n<li><b>JFace<\/b> \u2014 Bietet eine Reihe von UI-Frameworks, die auf SWT aufgebaut sind.<\/li>\n<li><b>Workbench<\/b> \u2014 Definiert die UI-Philosophie von Eclipse: Editoren, Ansichten, Perspektiven.<\/li>\n<\/ul>\n<p>\nEs ist zu sagen, dass die Eclipse Platform auch viele andere n\u00fctzliche Komponenten f\u00fcr den Aufbau integrierter Entwicklungswerkzeuge bietet, darunter Debug, Compare, Search und Team. Besonders erw\u00e4hnenswert ist JFace Text \u2013 die Grundlage f\u00fcr die Entwicklung von \"intelligenten Editoren\" f\u00fcr Quellcode. Leider ist eine fl\u00fcchtige Betrachtung dieser Komponenten sowie der Komponenten der UI-Schicht im Rahmen dieses Artikels nicht m\u00f6glich, weshalb wir uns im restlichen Teil dieses Abschnitts auf einen \u00dcberblick \u00fcber die wesentlichen \"Kern\"-Komponenten der Eclipse Platform und JDT beschr\u00e4nken.<\/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 von dem 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 legt unter anderem die Mechanismen f\u00fcr Versionierung und Abh\u00e4ngigkeitsaufl\u00f6sung fest. Neben diesen Standardmechanismen f\u00fchrt Equinox das Konzept von <i>Erweiterungspunkten<\/i>. Jedes Plugin kann seine eigenen Erweiterungspunkte definieren und zus\u00e4tzliche Funktionalit\u00e4ten (\"Erweiterungen\") in das System einbringen, indem es die von diesem oder anderen Plugins definierten Erweiterungspunkte nutzt. Eine detaillierte Beschreibung der Mechanismen von OSGi und Equinox sprengt den Rahmen dieses Artikels. Es sei nur darauf hingewiesen, dass die Modularisierung in Eclipse einen umfassenden Charakter hat (jedes Teilsystem, einschlie\u00dflich des Runtimes, besteht aus einem oder mehreren Plugins) und praktisch alles in Eclipse eine Erweiterung ist. Dar\u00fcber hinaus wurden diese Prinzipien in die Architektur von Eclipse eingef\u00fchrt, lange bevor OSGi implementiert wurde (damals wurde eine eigene Technologie verwendet, die weitgehend OSGi \u00e4hnlich war).<\/p>\n<h4>Core Workspace<\/h4>\n<p>\nFast jede integrierte Entwicklungsumgebung, die auf der Eclipse Platform basiert, arbeitet mit dem Eclipse-Workspace. Der Workspace enth\u00e4lt normalerweise den Quellcode der in der IDE entwickelten Anwendung. Der Workspace wird direkt auf das Dateisystem abgebildet und besteht aus Projekten, die Ordner und Dateien enthalten. Diese Projekte, Ordner und Dateien werden als <i>Ressourcen<\/i> Workspace bezeichnet. Die Implementierung des Workspaces in Eclipse dient quasi als Cache f\u00fcr das Dateisystem, was die Navigation im Ressourcenbaum erheblich beschleunigt. 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 Mechanismus zur Benachrichtigung \u00fcber \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 Unterst\u00fctzung des Workspaces und seiner Ressourcen wird durch die Komponente Core Resources (Plugin org.eclipse.core.resources) bereitgestellt. Insbesondere bietet diese Komponente programmgesteuerten Zugriff auf den Workspace in Form eines <i>Ressourcenmodells. Um effizient mit diesem Modell zu arbeiten, ben\u00f6tigen die Clients einen einfachen Weg, um auf eine Ressource zu verweisen. Dabei w\u00e4re es w\u00fcnschenswert, das Objekt, das den Zustand der Ressource im Modell direkt speichert, vor dem Zugriff der Clients zu verstecken. Andernfalls k\u00f6nnte der Client im Falle beispielsweise der L\u00f6schung einer Datei das Objekt weiterhin halten, das bereits nicht mehr im Modell vorhanden ist, was zu entsprechenden Problemen f\u00fchren w\u00fcrde. Eclipse l\u00f6st dieses Problem, indem es so genannte<\/i>Handles verwendet. <i>Ein Handle fungiert als Schl\u00fcssel (es kennt nur den Pfad zur Ressource im Workspace) und kontrolliert vollst\u00e4ndig den Zugriff auf das interne Objekt des Modells, das Informationen \u00fcber den Zustand der Ressource speichert. Dieses Design ist eine Variante des Musters<\/i> Handle\/Body <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>Abb. 2 veranschaulicht die Idioms Handle\/Body in Bezug auf das Ressourcenmodell. Das Interface IResource stellt den Handle der Ressource dar und bildet die API, im Gegensatz zur Klasse Resource, die dieses Interface implementiert, sowie zur Klasse ResourceInfo, die den Body darstellt und keine API darstellt. Es sei darauf hingewiesen, dass der Handle nur den Pfad zur Ressource relativ zum Wurzelverzeichnis des Workspaces kennt und keinen Verweis auf die Resource Info enth\u00e4lt. Objekte der Resource Info bilden das sogenannte \"Elementbaum\" (element tree). Diese Datenstruktur ist vollst\u00e4ndig im Speicher materialisiert. Um eine Instanz der Resource Info zu finden, die zu einem bestimmten Handle geh\u00f6rt, wird der Elementbaum entsprechend dem in diesem Handle gespeicherten Pfad durchlaufen.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Entwicklungstools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 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) in Eclipse und auch f\u00fcr andere Modelle verwendet. Im Folgenden werden einige charakteristische Eigenschaften dieses Designs aufgelistet:<\/p>\n<ul>\n<li>Der Handle ist ein Wertobjekt (value object). Wertobjekte sind unver\u00e4nderliche (immutable) Objekte, deren Gleichheit nicht auf Identit\u00e4t basiert. Solche Objekte k\u00f6nnen sicher als Schl\u00fcssel in hashbasierten Containern verwendet werden. Mehrere Instanzen von Handles k\u00f6nnen auf dieselbe Ressource verweisen. Zum Vergleich dieser m\u00fcssen die Methode equals(Object) verwendet werden.<\/li>\n<li>Der Handle definiert das Verhalten der Ressource, enth\u00e4lt jedoch keine Informationen zum Status der Ressource (die einzigen Daten, die er speichert, sind der \"Schl\u00fcssel\", der Pfad zur Ressource).<\/li>\n<li>Der Handle kann auf eine nicht existierende Ressource verweisen (entweder eine Ressource, die noch nicht erstellt wurde, oder eine Ressource, die bereits gel\u00f6scht wurde). Das Vorhandensein der Ressource kann mit der Methode IResource.exists() \u00fcberpr\u00fcft werden.<\/li>\n<li>Einige Operationen k\u00f6nnen ausschlie\u00dflich auf Informationen basieren, die im Handle selbst gespeichert sind (sogenannte handle-only Operationen). Beispiele hierf\u00fcr sind IResource.getParent(), getFullPath() usw. Es ist nicht erforderlich, dass die Ressource existiert, um eine solche Operation erfolgreich durchzuf\u00fchren. Operationen, bei denen das Vorhandensein der Ressource f\u00fcr den erfolgreichen Abschluss erforderlich ist, werfen eine Ausnahme (CoreException), wenn die Ressource nicht existiert.<\/li>\n<\/ul>\n<p>\nEclipse bietet einen effizienten Benachrichtigungsmechanismus f\u00fcr \u00c4nderungen von Ressourcen im Workspace (siehe Abb. 3). Ressourcen k\u00f6nnen sowohl durch Aktionen, die in der Eclipse IDE selbst durchgef\u00fchrt werden, als auch durch die Synchronisation mit dem Dateisystem ver\u00e4ndert werden. In beiden F\u00e4llen erhalten abonnierte Clients detaillierte Informationen \u00fcber die \u00c4nderungen in Form von \u201eRessourcen-Deltas\u201c (resource delta). Das Delta beschreibt die \u00c4nderungen zwischen zwei Zust\u00e4nden des (Unter-)Baums der Workspace-Ressourcen und ist selbst ein Baum, dessen jeder Knoten eine \u00c4nderung einer bestimmten Ressource beschreibt und eine Liste von Deltas der n\u00e4chsten Ebene enth\u00e4lt, die \u00c4nderungen an untergeordneten Ressourcen beschreiben.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Entwicklungstools\" 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 Ressourcen-Deltas basierende Benachrichtigungsmechanismus weist die folgenden Merkmale auf:<\/p>\n<ul>\n<li>Einzelne \u00c4nderungen und mehrere \u00c4nderungen werden durch dieselbe Struktur beschrieben, da das Delta nach dem Prinzip der rekursiven Komposition erstellt wird. Abonnierende Clients k\u00f6nnen Benachrichtigungen \u00fcber Ressourcen\u00e4nderungen durch rekursives Durchlaufen des Delta-Baums verarbeiten.<\/li>\n<li>Das Delta enth\u00e4lt vollst\u00e4ndige Informationen \u00fcber die \u00c4nderung einer Ressource, einschlie\u00dflich ihrer Verschiebung und\/oder der \u00c4nderung der damit verbundenen \u201eMarker\u201c (zum Beispiel werden Fehler beim Kompilieren als Marker dargestellt).<\/li>\n<li>Da Verweise auf Ressourcen \u00fcber Handles erfolgen, kann das Delta automatisch auf entfernte Ressourcen verweisen.<\/li>\n<\/ul>\n<p>\nWie wir bald sehen werden, sind die grundlegenden Komponenten des Designs des Benachrichtigungsmechanismus f\u00fcr \u00c4nderungen am Ressourcenmodell auch f\u00fcr andere handle-basierte Modelle von Bedeutung.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nDas Ressourcenmodell des Eclipse Workspace 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 Workspaces aus Java-Sicht, das sogenannte \u201eJava-Modell\u201c (<i>Java model<\/i>). Diese API ist 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-Elemente-Baums sind in Abb. 4 dargestellt.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Entwicklungstools\" 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 Ressourcenkonzept (Abb. 5). IJavaElement ist das Handle, w\u00e4hrend JavaElementInfo die Rolle des Body spielt. Das Interface IJavaElement definiert ein Protokoll, das f\u00fcr alle Java-Elemente gemeinsam ist. Einige seiner Methoden sind nur Handle-Methoden: 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 Entwicklungstools\" 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, ist im Ressourcenmodell der Elementbaum, dessen Knoten Objekte der Ressourceninformation sind, vollst\u00e4ndig im Speicher enthalten. Im Java-Modell kann jedoch eine erheblich gr\u00f6\u00dfere Anzahl von Elementen vorhanden 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 Implementierung des Java-Modells einen begrenzten LRU-Cache f\u00fcr Elementinformationen, wobei IJavaElement das Schl\u00fcssel-Handle ist. Elementinformationen werden auf Anfrage erstellt, w\u00e4hrend die Navigation durch den Elementbaum erfolgt. Dabei werden die am wenigsten h\u00e4ufig genutzten Elemente aus dem Cache entfernt, und der Speicherverbrauch des Modells bleibt innerhalb der vorgegebenen Cache-Gr\u00f6\u00dfe. Dies ist ein weiterer Vorteil des Handle-basierten Designs, das solche Implementierungsdetails vollst\u00e4ndig vor dem Clientcode verbirgt.<\/p>\n<p>Der Benachrichtungsmechanismus f\u00fcr \u00c4nderungen an Java-Elementen \u00e4hnelt grob 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 als ElementChangedEvent-Objekt dargestellt werden, das IJavaElementDelta enth\u00e4lt (Abb. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Entwicklungstools\" 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 Namensaufl\u00f6sungen. 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> (abstrakter Syntaxbaum, AST). Der AST stellt das Ergebnis der syntaktischen Analyse des Quelltexts 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 repr\u00e4sentieren, wie Typen, Methoden und Variablen, die dem Compiler bekannt sind. Im Gegensatz zu den AST-Knoten, die einen Baum bilden, unterst\u00fctzen Bindings Kreuzverweise und bilden im Allgemeinen ein Graf. Die abstrakte Klasse ASTNode ist die gemeinsame Basisklasse f\u00fcr alle AST-Knoten. Die Unterklassen von ASTNode entsprechen bestimmten syntaktischen Konstruktionen der Programmiersprache Java.<\/p>\n<p>Da syntaktische B\u00e4ume erheblich viel Speicher verbrauchen k\u00f6nnen, cached JDT nur ein AST f\u00fcr den aktiven Editor. Im Gegensatz zum Java-Modell wird AST normalerweise als \"interne\", \"tempor\u00e4re\" Modell betrachtet, auf dessen Elemente Clients keine Verweise au\u00dferhalb des Kontexts der Operation, die zur Erstellung des AST gef\u00fchrt hat, halten sollten.<\/p>\n<p>Die drei genannten Modelle (Java-Modell, AST, Bindings) bilden gemeinsam die Grundlage f\u00fcr die Entwicklung von \"intelligenten Entwicklungstools\" in JDT, darunter ein leistungsstarker Java-Editor mit verschiedenen \"Assistenten\", unterschiedliche Aktionen zur Verarbeitung des Quellcodes (darunter die Organisation der Importliste f\u00fcr Namen und Formatierung nach dem konfigurierten 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 entwickelten Anwendung verwendet wird (z.B. im Package Explorer, Outline, Suche, Aufrufhierarchie und Typenhierarchie).<\/p>\n<h2>Die Komponenten von Eclipse, die in 1C:Enterprise Development Tools verwendet werden<\/h2>\n<p>\nIn Abb. 7 sind die Eclipse-Komponenten dargestellt, die die Grundlage der technologischen Plattform f\u00fcr 1C:Enterprise Development Tools bilden.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Entwicklungstools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 7. Eclipse als Plattform f\u00fcr 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>) stellt allgemeine Mittel zur Modellierung strukturierter Daten bereit. EMF ist in die Eclipse-Plattform integriert, kann aber auch eigenst\u00e4ndig in herk\u00f6mmlichen Java-Anwendungen verwendet werden. Oft sind Anf\u00e4nger in der Eclipse-Entwicklung bereits gut mit EMF vertraut, auch wenn sie sich noch nicht vollst\u00e4ndig mit den Feinheiten der Eclipse-Plattform auskennen. Ein Grund f\u00fcr diese wohlverdiente Popularit\u00e4t ist das universelle Design, das unter anderem eine einheitliche API auf Metaebene umfasst, die einen generischen Umgang mit jedem EMF-Modell erm\u00f6glicht. Die von EMF bereitgestellten Basisimplementierungen f\u00fcr Modellobjekte und die Codegenerierungssubsysteme nach Metamodell erh\u00f6hen erheblich die EntwicklungsGeschwindigkeit und reduzieren die Fehleranzahl. Au\u00dferdem 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 eines breiten Spektrums von Modellierungsaufgaben, jedoch ben\u00f6tigen einige Modellklassen (zum Beispiel die oben behandelten handle-basierten Modelle) m\u00f6glicherweise speziellere Werkzeuge zur Modellierung. \u00dcber EMF zu berichten, ist eine undankbare Aufgabe, insbesondere innerhalb des begrenzten Rahmens eines Artikels, da es sich um ein Thema f\u00fcr ein ganzes Buch handelt, und zwar ein ziemlich dickes. Es sei nur erw\u00e4hnt, dass das qualitativ hochwertige System der Verallgemeinerungen, das dem EMF zugrunde liegt, die Entstehung einer Vielzahl von Projekten, die sich mit Modellierung befassen, erm\u00f6glicht hat, die in das \u00fcbergeordnete Projekt einflie\u00dfen. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Eclipse Modellierung<\/a><\/noindex> neben dem 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 \u201eTextmodellieren\u201c. Xtext verwendet <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> F\u00fcr die syntaktische Analyse des Quelltextes und EMF zur Darstellung des resultierenden ASG (abstract semantic graph, der im Wesentlichen eine Kombination aus AST und Bindings ist), das auch als \u201esemantisches Modell\u201c bezeichnet wird. Die Grammatik der mit Xtext modellierten Sprache 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 anderer Sprachkomponenten. Andererseits ist die in Xtext verwendete Grammatikbeschreibungssprache weniger flexibel im Vergleich zu der Grammatikbeschreibungssprache in ANTLR. Daher muss die implementierte Sprache manchmal an Xtext angepasst werden, was in der Regel kein Problem darstellt, wenn es sich um eine von Grund auf neu entwickelte Sprache handelt, aber inakzeptabel sein kann f\u00fcr Sprachen mit bereits festgelegter Syntax. Dennoch ist Xtext derzeit das reifste, funktional vollst\u00e4ndige und vielseitigste Werkzeug in Eclipse zur Erstellung von Programmiersprachen und deren Entwicklungsmitteln. Insbesondere ist es das ideale 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\">fachspezifische Sprachen<\/a><\/noindex> (domain-specific language, DSL). Neben dem oben erw\u00e4hnten \u201eSprachkern\u201c basierend auf ANTLR und EMF bietet Xtext eine Vielzahl n\u00fctzlicher Komponenten auf h\u00f6herer Ebene, einschlie\u00dflich Mechanismen zur Indizierung, inkrementellem Aufbau, \u201eintelligentem Editor\u201c und vielem mehr, l\u00e4sst aber sprachliche handle-basierte Modelle au\u00dfen vor. Wie EMF ist auch Xtext ein Thema, das ein eigenes Buch wert ist, und wir werden kaum in der Lage sein, jetzt auch nur oberfl\u00e4chlich \u00fcber all seine M\u00f6glichkeiten zu berichten.<\/p>\n<p>1C:Enterprise Development Tools nutzen sowohl EMF selbst als auch eine Reihe anderer Eclipse-Modeling-Projekte aktiv. Insbesondere ist Xtext eines der Grundtools zur Entwicklung f\u00fcr Sprachen wie 1C:Enterprise, einschlie\u00dflich der eingebetteten Programmiersprache und der Abfragesprache. Eine weitere Grundlage dieser Entwicklungstools ist das Eclipse-Handly-Projekt, dem wir uns ausf\u00fchrlicher widmen werden (von den genannten Eclipse-Komponenten ist es bisher am wenigsten bekannt).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, das Teilprojekt des \u00fcbergeordneten Projekts Eclipse Technology, entstand aus dem urspr\u00fcnglichen Codebeitrag an die Eclipse Foundation, der 2014 von der Firma 1C geleistet wurde. Seitdem unterst\u00fctzt die Firma 1C die Entwicklung des Projekts weiter: die Committer von Handly sind Mitarbeiter der Firma. Das Projekt ist klein, besetzt jedoch eine recht einzigartige Nische in Eclipse: Sein Hauptziel ist die Unterst\u00fctzung der Entwicklung handle-basierter Modelle.<\/p>\n<p>Die grundlegenden architektonischen Prinzipien handle-basierter Modelle, wie das Handle-\/Body-Muster, wurden oben anhand des Beispiels des Ressourcenmodells und des Java-Modells behandelt. Dort wurde auch erw\u00e4hnt, 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, w\u00e4re es keine gro\u00dfe \u00dcbertreibung zu sagen, dass handle-basierte Modelle die Grundlage vieler, wenn nicht aller IDEs bilden, die auf der Eclipse-Plattform aufgebaut sind. 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 dieselbe Rolle spielt wie das Java-Modell in JDT.<\/p>\n<p>Vor der Einf\u00fchrung von Handly bot Eclipse keine spezialisierten Bibliotheken zum Aufbau von handle-basierten Sprachmodellen an. Die derzeit existierenden Modelle wurden haupts\u00e4chlich durch direkte Anpassung des Java-Modellcodes (a.k.a. Kopieren\/Einfugen) erstellt, <i>in F\u00e4llen, in denen dies zul\u00e4ssig ist,<\/i> Eclipse Public License (EPL). (Es ist klar, dass dies f\u00fcr Projekte von Eclipse in der Regel kein rechtliches Problem darstellt, was man \u00fcber Produkte mit geschlossenem Quellcode jedoch nicht sagen kann.) Neben ihrer typischen Willk\u00fcrlichkeit f\u00fchrt diese Methode zu den bekannten Problemen: doppelter Code, Fehler, die durch die Anpassung eingef\u00fchrt werden, usw. Noch schlimmer ist, dass die resultierenden Modelle 'ein Ding an sich' bleiben und das vorhandene Potenzial zur Vereinheitlichung nicht nutzen. Dabei k\u00f6nnte die Herausarbeitung gemeinsamer Konzepte und Protokolle f\u00fcr handle-basierte Sprachmodelle zur Schaffung wiederverwendbarer Komponenten f\u00fchren, \u00e4hnlich dem, was mit EMF geschehen ist.<\/p>\n<p>Es kann nicht gesagt werden, dass es in Eclipse kein Bewusstsein f\u00fcr diese Probleme gab. Bereits 2005 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, der die Erfahrungen mit der Entwicklung eines Prototyps f\u00fcr CDT 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 zu schaffen, einschlie\u00dflich handle-basierter Modelle. Aber wie so oft kam es aufgrund vorrangiger Aufgaben nicht zur Umsetzung dieser Ideen. In der Zwischenzeit bleibt die Faktorisierung des Codes von *DT-Projekten eines der unzureichend bearbeiteten Themen in Eclipse.<\/p>\n<p>In gewissem Sinne soll das Handly-Projekt etwa die gleichen Aufgaben l\u00f6sen wie EMF, jedoch f\u00fcr handle-basierte Modelle, insbesondere f\u00fcr sprachliche (d.h. die Elemente der Struktur einer Programmiersprache darstellend). Im Folgenden sind die Hauptziele aufgef\u00fchrt, die w\u00e4hrend der Entwurfsphase von Handly verfolgt wurden:<\/p>\n<ul>\n<li>Hervorhebung der grundlegenden Abstraktionen des Fachgebiets.<\/li>\n<li>Verringerung des Aufwands und Steigerung der Qualit\u00e4t der Implementierung von sprachlichen handle-basierten Modellen durch Wiederverwendung von Code.<\/li>\n<li>Bereitstellung einer vereinheitlichten API auf Meta-Ebene f\u00fcr die resultierenden Modelle, die es erm\u00f6glicht, allgemeine IDE-Komponenten zu erstellen, 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>\nUm gemeinsame Konzepte und Protokolle zu identifizieren, wurden bestehende Implementierungen von sprachlichen handle-basierten Modellen analysiert. Die wichtigsten Schnittstellen und grundlegenden Implementierungen, 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 Entwicklungstools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 8. Gemeinsame Schnittstellen und grundlegende Implementierungen von Handly-Elementen<\/b><\/p>\n<p>Die Schnittstelle IElement repr\u00e4sentiert das Handle eines Elements und ist f\u00fcr alle Elemente der auf Handly basierenden Modelle allgemein. Die abstrakte Klasse Element implementiert den generischen Mechanismus handle\/body (Abb. 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Entwicklungstools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 9. IElement und die generische Implementierung von handle\/body<\/b><\/p>\n<p>Dar\u00fcber hinaus bietet Handly einen generischen Mechanismus f\u00fcr Benachrichtigungen \u00fcber \u00c4nderungen an Modellenlementen (Abb. 10). Wie zu sehen ist, ist er im Gro\u00dfen und Ganzen vergleichbar mit den Benachrichtigungsmechanismen, die in der Ressourcen- und Java-Modell implementiert sind, und verwendet IElementDelta f\u00fcr eine einheitliche Darstellung von Informationen \u00fcber \u00c4nderungen am Element.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse als technologische Plattform f\u00fcr 1C:Enterprise Entwicklungstools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Abb. 10. Gemeinsame Schnittstellen und grundlegende Implementierungen des Benachrichtigungsmechanismus von Handly<\/b><\/p>\n<p>Der oben betrachtete Teil von Handly (Abb. 9 und 10) kann zur Darstellung praktisch beliebiger handle-basierter Modelle verwendet werden. Zur Erstellung <i>sprachlicher<\/i> Modelle bietet das Projekt zus\u00e4tzliche Funktionen \u2013 insbesondere gemeinsame Schnittstellen und grundlegende Implementierungen f\u00fcr die Elemente der Struktur des Quelltextes, der sogenannten <i>source elements<\/i> (Abb. 8). Das ISourceFile-Interface repr\u00e4sentiert die Ausgangsdatei, w\u00e4hrend ISourceConstruct ein Element innerhalb der Ausgangsdatei darstellt. Die abstrakten Klassen SourceFile und SourceConstruct implementieren generische Mechanismen zur Unterst\u00fctzung der Arbeit mit Ausgangsdateien und deren Elementen, wie zum Beispiel die Arbeit mit Textpuffern, die Bindung an die Koordinaten des Elements im Ausgangstext, die Abstimmung des Modells mit dem aktuellen Inhalt des Puffers der Arbeitskopie usw. Die Umsetzung dieser Mechanismen stellt in der Regel eine anspruchsvolle Aufgabe dar, und Handly kann den Entwicklungsaufwand f\u00fcr sprachbasierte Handle-Modelle erheblich reduzieren, indem qualitativ hochwertige Basisimplementierungen bereitgestellt werden.<\/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 'out-of-the-box'-Integration mit dem Xtext-Editor) und einige allgemein verwendete UI-Komponenten, die mit auf Handly basierenden Modellen arbeiten, wie das Outline-Framework. Um die M\u00f6glichkeiten zu veranschaulichen, stellt das Projekt mehrere Beispiele bereit, darunter eine Implementierung des Java-Modells auf Handly. (Im Vergleich zur vollst\u00e4ndigen Implementierung des Java-Modells im JDT ist dieses Modell absichtlich etwas vereinfacht, um die \u00dcbersichtlichkeit zu erh\u00f6hen.)<\/p>\n<p>Wie bereits erw\u00e4hnt, wurde beim initialen Design von Handly und dessen weiterer Entwicklung besonderes Augenmerk auf Skalierbarkeit und Flexibilit\u00e4t gelegt und weiterhin gelegt. <\/p>\n<p>Im Grunde genommen skalieren handle-basierte Modelle \u201eby design\u201c recht gut. Die Idiomatik handle\/body erlaubt es beispielsweise, die von einem Modell ben\u00f6tigte Speichermenge zu begrenzen. Es gibt jedoch auch Nuancen. Bei Tests zur Skalierbarkeit von Handly wurde ein Problem mit der Implementierung des Benachrichtigungsmechanismus entdeckt \u2013 beim \u00c4ndern einer gro\u00dfen Anzahl von Elementen dauerte das Erstellen der Deltas zu lange. Es stellte sich heraus, dass dasselbe Problem auch im Java-Modell des JDT vorhanden war, aus dem der entsprechende Code urspr\u00fcnglich adaptiert wurde. Wir haben den Fehler in Handly behoben und einen \u00e4hnlichen Patch f\u00fcr den JDT vorbereitet, der dankend angenommen wurde. Dies ist nur eines von vielen Beispielen, bei denen die Integration von Handly in bestehende Modellimplementierungen potenziell n\u00fctzlich sein k\u00f6nnte, da in diesem Fall ein solcher Fehler an nur einer Stelle behoben werden k\u00f6nnte.<\/p>\n<p>Um die Implementierung von Handly in bestehende Modelle technisch m\u00f6glich zu machen, muss die Bibliothek erhebliche Flexibilit\u00e4t aufweisen. Das Hauptproblem besteht darin, die R\u00fcckw\u00e4rtskompatibilit\u00e4t der API des Modells zu gew\u00e4hrleisten. Diese Aufgabe wurde in <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> durch eine klare Trennung der spezifischen Modell-API, die vom Entwickler definiert und vollst\u00e4ndig kontrolliert wird, von der einheitlichen Meta-Level-API, die von der Bibliothek bereitgestellt wird, gel\u00f6st. Dies macht nicht nur die technische Implementierung von Handly in bestehende Umsetzungen m\u00f6glich, sondern gibt dem Entwickler eines neuen Modells auch erheblich mehr Freiheit beim Entwurf der API.<\/p>\n<p>Flexibilit\u00e4t hat auch andere Aspekte. Zum Beispiel erhebt Handly fast keine Einschr\u00e4nkungen hinsichtlich der Struktur des Modells und kann sowohl f\u00fcr die Modellierung allgemeiner Programmiersprachen als auch f\u00fcr spezifische Dom\u00e4nensprachen verwendet werden. Bei der Erstellung der Struktur der Quelldatei schreibt Handly keine bestimmte Form der AST-Darstellung vor und erfordert grunds\u00e4tzlich nicht einmal die Existenz eines AST, was die Kompatibilit\u00e4t mit praktisch allen Parsermechanismen gew\u00e4hrleistet. Schlie\u00dflich unterst\u00fctzt Handly eine vollst\u00e4ndige Integration mit dem Eclipse-Workspace, 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>Die 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 im Inkubationsstadium befindet und die API noch nicht endg\u00fcltig festgelegt ist, wird Handly bereits in zwei gro\u00dfen kommerziellen Produkten verwendet, die den Mut hatten, als \"Early Adopters\" aufzutreten, und man muss sagen, dass sie es bisher nicht bereuen.<\/p>\n<p>Wie bereits erw\u00e4hnt, ist eines dieser Produkte \u2013 1C:Enterprise Development Tools, wo Handly von Anfang an zur Modellierung der Elemente der hochgradigen Struktur solcher Sprachen wie 1C:Enterprise, einschlie\u00dflich der eingebetteten Programmiersprache und der Abfragesprache, eingesetzt wird. Das andere 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 anwendungs-spezifische Prozessordesigns (application-specific instruction-set processor, ASIP), die sowohl innerhalb des tschechischen Unternehmens Codasip als auch von dessen Kunden verwendet wird, zu denen <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 geh\u00f6ren.<\/a><\/noindex>. Codasip nutzt Handly seit 2015 in der Produktion, beginnend mit der Version Handly 0.2. Die derzeit neueste 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 sorgt f\u00fcr \u00e4u\u00dferst wichtiges Feedback vonseiten eines \u201eexternen Adopters\u201c. Er konnte sogar etwas freie Zeit finden, 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> Projekt.<\/p>\n<p>Wir hoffen, dass Handly nach der Ver\u00f6ffentlichung der Version 1.0 mit einer API-Stabilit\u00e4tsgarantie und dem Ende der Inkubationsphase neue Adopter gewinnen kann. Derzeit befindet sich das Projekt jedoch weiterhin in der Testphase und arbeitet an der Weiterentwicklung der API, wobei es j\u00e4hrlich zwei \u201egro\u00dfe\u201c Releases im Juni (am selben Datum wie das gleichzeitige Eclipse-Release) und im Dezember herausgibt, um einen vorhersehbaren Zeitplan zu gew\u00e4hrleisten, auf den sich Adopter verlassen k\u00f6nnen. Zudem bleibt die \u201eFehlerrate\u201c des Projekts stabil niedrig, und Handly arbeitet zuverl\u00e4ssig in den Produkten fr\u00fcher Adopter seit den ersten Versionen. F\u00fcr eine weitergehende Einf\u00fchrung in Eclipse Handly kann man 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\">Architektonische \u00dcbersicht<\/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 5.0.1.1 - 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\/de\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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.\" \/>\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":"Eclipse bedarf wahrscheinlich schon lange keiner besonderen Vorstellung mehr.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}