{"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\/da\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse som teknologisk platform for 1C:Enterprise Development Tools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sandsynligvis, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> beh\u00f8ver allerede ikke nogen s\u00e6rlig pr\u00e6sentation. Mange er bekendt med Eclipse takket v\u00e6re Eclipse Java development tools (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Det er netop denne popul\u00e6re open-source Java IDE, der forbindes af de fleste udviklere med ordet \u201cEclipse\u201d. Men Eclipse er ogs\u00e5 en udvidelig platform til integration af udviklingsv\u00e6rkt\u00f8jer (Eclipse Platform) og en r\u00e6kke IDE'er, der er bygget p\u00e5 dens basis, herunder JDT. Eclipse er b\u00e5de Eclipse Project, et h\u00f8jt niveau projekt, der koordinerer udviklingen af Eclipse Platform og JDT, samt Eclipse SDK \u2013 resultatet af denne udvikling. Endelig er Eclipse en open-source Foundation med et stort samfund af projekter, som langt fra alle er skrevet i Java eller har noget at g\u00f8re med udviklingsv\u00e6rkt\u00f8jer (for eksempel projekter <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). Verden af Eclipse er meget mangfoldig.<\/p>\n<p>I denne artikel, der er overordnet af sin natur, vil vi fors\u00f8ge at se p\u00e5 nogle grundl\u00e6ggende aspekter af Eclipse's arkitektur som platform for at bygge integrerede udviklingsv\u00e6rkt\u00f8jer og give en indledende pr\u00e6sentation af de komponenter, der udg\u00f8r fundamentet for den teknologiske platform for \u2018den nye Konfigurator\u2019 1C: Enterprise, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">1C:Enterprise Development Tools<\/a><\/noindex>. Selvf\u00f8lgelig vil en s\u00e5dan unders\u00f8gelse uundg\u00e5eligt v\u00e6re overfladisk og ret begr\u00e6nset, blandt andet fordi vi sigter mod ikke kun Eclipse-udviklere som m\u00e5lgruppe. Vi h\u00e5ber dog, at selv erfarne Eclipse-udviklere vil finde interessant information i artiklen. For eksempel vil vi tale om en af \u2018Eclipse's hemmeligheder\u2019, et relativt nyt og endnu lidt kendt projekt, <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, som blev grundlagt og underst\u00f8ttet af firmaet 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 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>Introduktion til Eclipse-arkitektur<\/h2>\n<p>\nLad os f\u00f8rst se p\u00e5 nogle generelle aspekter af Eclipse's arkitektur med eksemplet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java development tools<\/a><\/noindex> (JDT). Valget af netop JDT som eksempel er ikke tilf\u00e6ldigt. Det er den f\u00f8rste integrerede udviklingsmilj\u00f8, der kom til i Eclipse. De \u00f8vrige *DT projekter i Eclipse, s\u00e5som Eclipse C\/C++ Development Tooling (CDT), blev skabt senere og l\u00e5nte b\u00e5de grundl\u00e6ggende arkitekturprincipper og enkelte fragmenter af kildekode fra JDT. De arkitektoniske grundlag, der er lagt i JDT, er stadig relevante i dag for n\u00e6sten enhver IDE bygget oven p\u00e5 Eclipse Platform, herunder 1C:Enterprise Development Tools.<\/p>\n<p>For Eclipse, it is important to note that there is a clear architectural layering, separating language-independent functionality from functionality meant to support specific programming languages, as well as separating UI-independent core components from components related to user interface support.<\/p>\n<p>The Eclipse Platform defines a common, language-independent infrastructure, while Java development tools add a fully functional Java IDE to Eclipse. Both the Eclipse Platform and JDT consist of several components, each of which belongs either to the UI-independent core or to the UI layer (see Fig. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 1. Eclipse Platform and JDT<\/b><\/p>\n<p>Let\u2019s list the main components of the Eclipse Platform:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Defines the plugin infrastructure. Eclipse features a modular architecture. Essentially, Eclipse is a collection of 'extension points' and 'extensions'.<\/li>\n<li><b>Workspace<\/b> \u2014 Manages one or more projects. A project consists of folders and files that are directly reflected in the file system.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Provides basic user interface elements integrated with the operating system.<\/li>\n<li><b>JFace<\/b> \u2014 Provides a range of UI frameworks built on top of SWT.<\/li>\n<li><b>Workbench<\/b> \u2014 Defines the UI paradigm of Eclipse: editors, views, perspectives.<\/li>\n<\/ul>\n<p>\nIt should be noted that the Eclipse Platform also provides many other useful components for building integrated development tools, including Debug, Compare, Search, and Team. Additionally, JFace Text should be mentioned as the foundation for creating 'smart editors' for source code. Unfortunately, even a brief overview of these components, as well as of the UI layer components, is not feasible within this article, so in the remaining part of this section, we will limit ourselves to an overview of the main core components of the Eclipse Platform and JDT.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nThe Eclipse plugin infrastructure is based on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> and is provided by the project <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Each Eclipse plugin is an OSGi bundle. The OSGi specification defines, among other things, versioning and dependency resolution mechanisms. In addition to these standard mechanisms, Equinox introduces the concept of <i>extension points<\/i>. Hvert plugin kan definere sine egne udvidelsespunkter og tilf\u00f8je yderligere funktionalitet til systemet (\"udvidelser\") ved hj\u00e6lp af udvidelsespunkter, der er defineret af dette eller andre plugins. En detaljeret beskrivelse af OSGi- og Equinox-mekanismerne ligger uden for rammerne af denne artikel. Det er v\u00e6rd at bem\u00e6rke, at modulariseringen i Eclipse er total (enhver delsystem, inklusive Runtime, best\u00e5r af et eller flere plugins), og praktisk talt alt i Eclipse er en udvidelse. Disse principper blev lagt ind i Eclipse-arkitekturen l\u00e6nge f\u00f8r OSGi blev implementeret (p\u00e5 det tidspunkt blev der anvendt en propriet\u00e6r teknologi, der i mange henseender minder om OSGi).<\/p>\n<h4>Kernearbejdsomr\u00e5de<\/h4>\n<p>\nN\u00e6sten enhver integreret udviklingsmilj\u00f8, der er bygget p\u00e5 Eclipse Platform, arbejder med Eclipse arbejdsomr\u00e5de. Det er typisk arbejdsomr\u00e5det, der indeholder kildekoden til den applikation, der udvikles i IDE. Arbejdsomr\u00e5det afspejles direkte p\u00e5 filsystemet og best\u00e5r af projekter, som indeholder mapper og filer. Disse projekter, mapper og filer kaldes <i>ressourcer<\/i> arbejdsomr\u00e5de. Implementeringen af arbejdsomr\u00e5det i Eclipse fungerer som en form for cache i forhold til filsystemet, hvilket markant kan fremskynde traversal af ressourcetr\u00e6et. Derudover tilbyder arbejdsomr\u00e5det en r\u00e6kke yderligere tjenester, herunder <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">mekanismen til notifikation om \u00e6ndringer i ressourcer<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">infrastrukturen for inkrementelle buildere<\/a><\/noindex>.<\/p>\n<p>Core Resources-komponenten (plugin org.eclipse.core.resources) er ansvarlig for at underst\u00f8tte arbejdsomr\u00e5det og dets ressourcer. Denne komponent giver programmatisk adgang til arbejdsomr\u00e5det i form af <i>ressourcemodel<\/i>. For effektivt at arbejde med denne model har klienter brug for en enkel m\u00e5de at repr\u00e6sentere linket til ressourcen. Det ville v\u00e6re \u00f8nskeligt at skjule objektet, der direkte gemmer ressourcens tilstand i modellen, for klientadgang. Ellers, i tilf\u00e6lde af f.eks. sletning af en fil, kunne klienten forts\u00e6tte med at holde p\u00e5 et objekt, der ikke l\u00e6ngere findes i modellen, hvilket ville skabe problemer. Eclipse l\u00f8ser denne opgave ved at bruge det s\u00e5kaldte <i>handle<\/i> af ressourcen. Handle fungerer som en n\u00f8gle (den kender kun stien til ressourcen i arbejdsomr\u00e5det) og kontrollerer fuldst\u00e6ndigt adgangen til det interne modelobjekt, der direkte gemmer oplysninger om ressourcens tilstand. Dette design er en variation af m\u00f8nsteret <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>Figur 2 illustrerer idiomet Handle\/Body i relation til ressourcesmodellen. Interface IResource repr\u00e6senterer handle til ressourcen og fungerer som API, i mods\u00e6tning til klassen Resource, der implementerer dette interface, samt klassen ResourceInfo, der repr\u00e6senterer body, som ikke er et API. Det er vigtigt at understrege, at handle kun kender stien til ressourcen i forhold til roden af arbejdsomr\u00e5det og ikke indeholder et link til resource info. Objekterne for resource info danner det s\u00e5kaldte 'elementtr\u00e6'. Denne datastruktur er fuldt materialiseret i hukommelsen. For at finde et instans af resource info, der svarer til et givent handle, traverseres elementtr\u00e6et i henhold til stien, der er gemt i dette handle.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 2. IResource og ResourceInfo<\/b><\/p>\n<p>Som vi senere vil se, anvendes den grundl\u00e6ggende design af ressourcesmodellen (vi kan kalde den handle-baseret) i Eclipse og for andre modeller. Men lad os f\u00f8rst n\u00e6vne nogle karakteristiske egenskaber ved dette design:<\/p>\n<ul>\n<li>Handle er et v\u00e6rdiobjekt (value object). V\u00e6rdiobjekter er immutable objekter, hvis lighed ikke er baseret p\u00e5 identitet. S\u00e5danne objekter kan sikkert anvendes som n\u00f8gler i hash-kontainere. Flere instanser af handle kan referere til den samme ressource. For at sammenligne dem skal metoden equals(Object) anvendes.<\/li>\n<li>Handle definerer ressourcens adf\u00e6rd, men indeholder ikke information om ressourcens tilstand (de eneste data, den gemmer, er 'n\u00f8glen', stien til ressourcen).<\/li>\n<li>Handle kan referere til en ikke-eksisterende ressource (enten en ressource, der endnu ikke er oprettet, eller en ressource, der allerede er slettet). Eksistensen af ressourcen kan verificeres med metoden IResource.exists().<\/li>\n<li>Nogle operationer kan kun udf\u00f8res ud fra informationen, der er gemt i selve handle (de s\u00e5kaldte handle-only operationer). Eksempler inkluderer IResource.getParent(), getFullPath(), osv. Det er ikke n\u00f8dvendigt, at ressourcen eksisterer for at en s\u00e5dan operation kan udf\u00f8res succesfuldt. Operationer, der kr\u00e6ver, at ressourcen eksisterer for at kunne fuldf\u00f8res, kaster en undtagelse (CoreException), hvis ressourcen ikke eksisterer.<\/li>\n<\/ul>\n<p>\nEclipse tilbyder en effektiv mekanisme til notifikation om \u00e6ndringer i workspace-ressourcer (se fig. 3). Ressourcer kan \u00e6ndres som et resultat af handlinger udf\u00f8rt i selve Eclipse IDE eller i forbindelse med synkronisering med filsystemet. I begge tilf\u00e6lde gives der detaljeoplysninger om \u00e6ndringerne til de kunder, der er tilmeldt notifikationerne, i form af \"ressource-deltaer\" (resource delta). Deltaet beskriver \u00e6ndringerne mellem to tilstande (sub-)tr\u00e6et af workspace-ressourcer og er i sig selv et tr\u00e6, hvor hver node beskriver \u00e6ndringen af en given ressource og indeholder en liste over deltaer p\u00e5 n\u00e6ste niveau, der beskriver \u00e6ndringer i de underordnede ressourcer.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/8af412412ee97d205137ab70c8444a50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 3. IResourceChangeEvent og IResourceDelta<\/b><\/p>\n<p>Den notifikationsmekanisme, der er baseret p\u00e5 ressource-deltaer, har f\u00f8lgende karakteristika:<\/p>\n<ul>\n<li>En enkelt \u00e6ndring og flere \u00e6ndringer beskrives ved hj\u00e6lp af den samme struktur, da deltaet bygges efter princippet om rekursiv sammens\u00e6tning. Abonnenter kan h\u00e5ndtere notifikationer om ressource\u00e6ndringer ved rekursivt at navigere i delta-tr\u00e6et.<\/li>\n<li>Deltaet indeholder fuld information om \u00e6ndringen af ressourcen, herunder dens flytning og\/eller \u00e6ndringer af de tilknyttede \"mark\u00f8rer\" (f.eks. pr\u00e6senteres kompilationsfejl som mark\u00f8rer).<\/li>\n<li>Da referencer til ressourcen laves gennem h\u00e5ndtag, kan deltaet naturligt referere til en fjernet ressource.<\/li>\n<\/ul>\n<p>\nSom vi snart vil se, er de grundl\u00e6ggende elementer i designet af notifikationsmekanismen for \u00e6ndringer i ressourcemodellen relevante for andre h\u00e5ndtag-baserede modeller.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nEclipse workspace-ressourcemodellen er en grundl\u00e6ggende sprog-uafh\u00e6ngig model. JDT Core-komponenten (plugin org.eclipse.jdt.core) leverer et API til navigation og analyse af strukturen i workspace fra et Java-perspektiv, som kaldes \"Java-modellen\" (<i>Java model<\/i>). Dette API er defineret i termer af Java-elementer, i mods\u00e6tning til det underl\u00e6ggende API for ressource-modellen, der er defineret i termer af mapper og filer. De vigtigste gr\u00e6nseflader i Java-elementtr\u00e6et er vist i fig. 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 4. Elementer i Java-modellen<\/b><\/p>\n<p>Java-modellen bruger den samme idiom handle\/body som ressource-modellen (figur 5). IJavaElement er handle, mens JavaElementInfo fungerer som body. IJavaElement-interface definerer en protokol, der er f\u00e6lles for alle Java-elementer. Nogle af dens metoder er kun handle: getElementName(), getParent() osv. JavaElementInfo-objektet gemmer tilstanden for det tilsvarende element: dets struktur og attributter.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 5. IJavaElement og JavaElementInfo<\/b><\/p>\n<p>Java-modellen har nogle forskelle i implementeringen af den grundl\u00e6ggende handle\/body-design sammenlignet med ressource-modellen. Som n\u00e6vnt tidligere er elementtr\u00e6et i ressource-modellen, hvis noder er resource info-objekter, fuldt indeholdt i hukommelsen. Men i Java-modellen kan der v\u00e6re betydeligt flere elementer end i ressource-tr\u00e6et, da den ogs\u00e5 repr\u00e6senterer den interne struktur af .java og .class filer: typer, felter og metoder.<\/p>\n<p>For at undg\u00e5 fuld materialisering af hele elementtr\u00e6et i hukommelsen bruger implementeringen af Java-modellen en begr\u00e6nset st\u00f8rrelse LRU-cache til elementinfo, hvor n\u00f8glen er handle IJavaElement. Elementinfo-objekter oprettes efter anmodning, mens navigationen gennem elementtr\u00e6et finde sted. De sj\u00e6ldent brugte elementer udskiftes fra cachen, og hukommelsesforbruget for modellen forbliver begr\u00e6nset til den angivne st\u00f8rrelsescache. Dette er endnu en fordel ved handle-baseret design, som fuldst\u00e6ndig skjuler s\u00e5danne implementeringsdetaljer fra klientkoden.<\/p>\n<p>Mekanismen til notifikation om \u00e6ndringer i Java-elementer ligner generelt den tidligere beskrevne mekanisme for at overv\u00e5ge \u00e6ndringer i arbejdsomr\u00e5dets ressourcer. En klient, der \u00f8nsker at overv\u00e5ge \u00e6ndringer i Java-modellen, abonnerer p\u00e5 notifikationer, der pr\u00e6senteres som et ElementChangedEvent-objekt, som indeholder IJavaElementDelta (figur 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 6. ElementChangedEvent og IJavaElementDelta<\/b><\/p>\n<p>Java-modellen indeholder ikke information om metodekroppen eller navneopl\u00f8sning, s\u00e5 for en detaljeret analyse af Java-kode tilbyder JDT Core en ekstra (ikke-handle-baseret) model: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">abstrakt syntaks tr\u00e6<\/a><\/noindex> (abstrakt syntaks tr\u00e6, AST). AST repr\u00e6senterer resultatet af syntaktisk analyse af den oprindelige tekst. Noderne i AST svarer til elementerne i strukturen af den oprindelige modul (erkl\u00e6ringer, operationer, udtryk osv.) og indeholder information om koordinaterne for det tilsvarende element i den oprindelige tekst, samt (valgfrit) information om navneopl\u00f8sning i form af henvisninger til de s\u00e5kaldte <i>bindings<\/i>. Bindings er objekter, der repr\u00e6senterer navngivne enheder som typer, metoder og variabler, der er kendt af compileren. I mods\u00e6tning til noderne i AST, der danner et tr\u00e6, underst\u00f8tter bindings krydshenvisninger og danner generelt et graf. Abstrakt klasse ASTNode er den f\u00e6lles basis klasse for alle noder i AST. Underklasser af ASTNode svarer til bestemte syntaktiske konstruktioner i Java-sproget.<\/p>\n<p>Da syntaks tr\u00e6er kan forbruge betydelig hukommelse, cachen JDT kun et enkelt AST for den aktive editor. I mods\u00e6tning til Java-modellen betragtes AST normalt som en \"intermedi\u00e6r\", \"midlertidig\" model, hvor klienter ikke b\u00f8r holde henvisninger uden for konteksten af den operation, der f\u00f8rte til oprettelsen af AST.<\/p>\n<p>De n\u00e6vnte tre modeller (Java modellen, AST, bindings) er sammen grundlaget for opbygningen af \"intelligente udviklingsv\u00e6rkt\u00f8jer\" i JDT, herunder en kraftfuld Java-editor med forskellige \"assistenter\", diverse handlinger til behandling af kildekode (herunder organisering af importlisten og formatering i overensstemmelse med den tilpassede stil), s\u00f8ge- og refaktoreringsv\u00e6rkt\u00f8jer. Java-modellen spiller en s\u00e6rlig rolle, da den anvendes som grundlag for den visuelle repr\u00e6sentation af strukturen af den udviklede applikation (for eksempel i Package Explorer, Outline, Search, Call Hierarchy og Type Hierarchy).<\/p>\n<h2>Eclipse-komponenter, der anvendes i 1C:Enterprise Developments Tools<\/h2>\n<p>\nFig. 7 viser de Eclipse-komponenter, der danner grundlaget for den teknologiske platform for 1C:Enterprise Development Tools.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 7. Eclipse som platform for 1C:Enterprise Development Tools<\/b><\/p>\n<p><b>Eclipse Platform<\/b> giver den grundl\u00e6ggende infrastruktur. Vi har gennemg\u00e5et nogle aspekter af denne infrastruktur i den foreg\u00e5ende sektion.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Eclipse Modeling Framework<\/a><\/noindex><\/b> (<b>EMF<\/b>) leverer generelle v\u00e6rkt\u00f8jer til modellering af strukturerede data. EMF er integreret med Eclipse Platform, men kan ogs\u00e5 bruges separat i almindelige Java-applikationer. Det er ret ofte, at nye Eclipse-udviklere allerede er godt bekendt med EMF, selvom de ikke helt har styr p\u00e5 nuancerne i Eclipse Platform. En af \u00e5rsagerne til denne velfortjente popularitet er det universelle design, der inkluderer en ensartet API p\u00e5 meta-niveau, som muligg\u00f8r generel interaktion med enhver EMF-model. De grundl\u00e6ggende implementeringer, som EMF leverer til modelobjekter samt subsystemet til kodegenerering fra meta-modellen, \u00f8ger v\u00e6sentligt udviklingshastigheden og mindsker antallet af fejl. Desuden indeholder EMF mekanismer til serialisering af modeller, overv\u00e5gning af \u00e6ndringer i modellen og meget mere. <\/p>\n<p>Som enhver virkelig alsidig v\u00e6rkt\u00f8j passer EMF til et bredt spektrum af opgaver relateret til modellering, men nogle klasser af modeller (for eksempel de n\u00e6vnte handle-baserede modeller) kan have brug for mere specialiserede modelleringsv\u00e6rkt\u00f8jer. At tale om EMF er en utaknemlig opgave, is\u00e6r inden for rammerne af en enkelt artikel, da det er emnet for en separat bog, og en ret tyk en af slagsen. Lad os kun bem\u00e6rke, at det kvalitetsbaserede system for generaliseringer, der ligger til grund for EMF, har gjort det muligt at skabe en r\u00e6kke projekter dedikeret til modellering, som indg\u00e5r i et overordnet projekt. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Eclipse Modeling<\/a><\/noindex> sammen med selve EMF. Et af disse projekter er Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> leverer infrastrukturer til \"tekstuel modellering\". Xtext benytter <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> til syntaktisk analyse af kildekoden og EMF til repr\u00e6sentation af den resulterende ASG (abstract semantic graph, som grundl\u00e6ggende er en kombination af AST og bindings), ogs\u00e5 kaldet \u00absemantisk model\u00bb. Grammatikken for det sprog, der modelleres med Xtext, beskrives p\u00e5 dets eget Xtext-sprog. Dette muligg\u00f8r ikke kun genereringen af en grammatikbeskrivelse til ANTLR, men ogs\u00e5 en mekanisme til serialisering af AST (dvs. Xtext leverer b\u00e5de parser og unparser), kontekstuel hj\u00e6lp og en r\u00e6kke andre sprogkomponenter. P\u00e5 den anden side er det grammatikbeskrivende sprog, der anvendes i Xtext, mindre fleksibelt sammenlignet med f.eks. grammatikbeskrivelsessproget i ANTLR. Derfor m\u00e5 man nogle gange \u00abtilpasse\u00bb det implementerede sprog til Xtext, hvilket normalt ikke er et problem, n\u00e5r det drejer sig om et nyudviklet sprog, men kan v\u00e6re uacceptabelt for sprog med allerede etableret syntaks. Ikke desto mindre er Xtext i \u00f8jeblikket det mest modne, funktionsrige og alsidige v\u00e6rkt\u00f8j i Eclipse til opbygning af programmeringssprog og udviklingsv\u00e6rkt\u00f8jer til dem. Is\u00e6r er det et ideelt v\u00e6rkt\u00f8j til hurtig 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\u00e6nespecifikke sprog<\/a><\/noindex> (domain-specific language, DSL). Udover det ovenn\u00e6vnte \u00absprogkernen\u00bb baseret p\u00e5 ANTLR og EMF, tilbyder Xtext mange nyttige komponenter p\u00e5 h\u00f8jere niveau, herunder indekseringsmekanismer, inkrementel bygning, \u00absmart editor\u00bb og meget, meget mere, men udelader sproghandlebaserede modeller. Ligesom EMF er Xtext et emne, der fortjener en s\u00e6rskilt bog, og vi vil n\u00e6ppe kunne n\u00e6vne alle dets muligheder nu.<\/p>\n<p>1C:Enterprise Development Tools benytter b\u00e5de EMF som s\u00e5dan og en r\u00e6kke andre Eclipse Modeling projekter. Is\u00e6r er Xtext en af grundstenene i udviklingsv\u00e6rkt\u00f8jer til sprog som 1C:Enterprise, s\u00e5som det indbyggede programmeringssprog og foresp\u00f8rgselssproget. En anden grundpille i disse udviklingsv\u00e6rkt\u00f8jer er projektet Eclipse Handly, som vi vil g\u00e5 mere i dybden med (blandt de n\u00e6vnte Eclipse-komponenter er det stadig det mindst kendte).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, underprojektet til det overordnede Eclipse Technology, blev til som f\u00f8lge af den indledende kodebidrag til Eclipse Foundation, udf\u00f8rt af firmaet 1C i 2014. Siden da har firmaet 1C fortsat med at st\u00f8tte udviklingen af projektet: committere Handly er medarbejdere i firmaet. Projektet er lille, men optager en tilstr\u00e6kkelig unik niche i Eclipse: dens hovedm\u00e5l er at st\u00f8tte udviklingen af handle-baserede modeller.<\/p>\n<p>De grundl\u00e6ggende arkitektoniske principper for handle-baserede modeller, s\u00e5som handle\/body idiomet, blev tidligere diskuteret ved eksemplet med ressource-modellen og Java-modellen. Det blev ogs\u00e5 bem\u00e6rket, at b\u00e5de ressource-modellen og Java-modellen er vigtige fundamenter for Eclipse Java development tools (JDT). Og da n\u00e6sten alle *DT Eclipse projekter har en arkitektur, der ligner JDT, ville det ikke v\u00e6re en overdrivelse at sige, at handle-baserede modeller ligger til grund for mange, hvis ikke alle IDE'er, bygget p\u00e5 Eclipse Platform. For eksempel indeholder Eclipse C\/C++ Development Tooling (CDT) en handle-baseret model for C\/C++, som i CDT's arkitektur spiller samme rolle som Java-modellen i JDT.<\/p>\n<p>F\u00f8r Handly blev lanceret, tilb\u00f8d Eclipse ikke specialiserede biblioteker til opbygning af sprog-handle-baserede modeller. De nuv\u00e6rende modeller blev hovedsageligt skabt ved direkte tilpasning af Java-modellen (aka copy\/paste), <i>i de tilf\u00e6lde, hvor det er tilladt<\/i> Eclipse Public License (EPL). (Det er klart, at for eksempel projekter p\u00e5 selve Eclipse typisk ikke har juridiske problemer i den forbindelse, hvilket ikke g\u00e6lder for produkter med lukket kildekode.) Ud over dens karakteristiske tilf\u00e6ldighed f\u00f8rer denne metode til velkendte problemer: kode-dublering, fejl indf\u00f8rt ved tilpasning, osv. Hvad der er v\u00e6rre, de resulterende modeller forbliver 'en ting i sig selv' og udnytter ikke det eksisterende potentiale for ensretning. At identificere f\u00e6lles begreber og protokoller for sprog-handle-baserede modeller kunne have f\u00f8rt til skabelsen af genanvendelige komponenter til at arbejde med dem, ligesom det skete i EMF.<\/p>\n<p>Man kan ikke sige, at der ikke var en forst\u00e5else for disse problemer i Eclipse. Allerede i 2005 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, generaliserende erfaringerne fra udviklingen af prototypen CDT, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">argumenterede<\/a><\/noindex> N\u00f8dvendigheden af at skabe en f\u00e6lles infrastruktur for sprogmodeller, herunder handle-baserede modeller. Men som det ofte er tilf\u00e6ldet, blev der ikke tid til at realisere disse id\u00e9er p\u00e5 grund af mere prioriterede opgaver. I mellemtiden forbliver faktoriseringen af koden *DT-projekter en af de emner, der ikke er tilstr\u00e6kkeligt bearbejdet i Eclipse.<\/p>\n<p>P\u00e5 en vis m\u00e5de er Handly-projektet designet til at tackle de samme opgaver som EMF, men for handle-baserede modeller, prim\u00e6rt sprogmodeller (dvs. der repr\u00e6senterer elementer i strukturen af et programmeringssprog). Nedenfor er de vigtigste m\u00e5l, der blev fastsat under designet af Handly:<\/p>\n<ul>\n<li>Identifikation af de centrale abstraktioner inden for dom\u00e6net.<\/li>\n<li>Reduceret indsats og forbedret kvalitet af implementeringen af handle-baserede sprogmodeller gennem genbrug af kode.<\/li>\n<li>Tilvejebringelse af et standardiseret API til metaniveauet for de resulterende modeller, hvilket g\u00f8r det muligt at skabe f\u00e6lles IDE-komponenter, der arbejder med handle-baserede sprogmodeller.<\/li>\n<li>Fleksibilitet og skalerbarhed.<\/li>\n<li>Integration med Xtext (i et separat lag).<\/li>\n<\/ul>\n<p>\nFor at identificere f\u00e6lles begreber og protokoller blev eksisterende implementeringer af handle-baserede sprogmodeller analyseret. De vigtigste interfaces og grundl\u00e6ggende implementeringer, der tilbydes af Handly, vises p\u00e5 fig. 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 8. F\u00e6lles interfaces og grundl\u00e6ggende implementeringer af Handly-elementer<\/b><\/p>\n<p>IElement-interface repr\u00e6senterer et handle-element og er f\u00e6lles for elementerne i alle modeller baseret p\u00e5 Handly. Den abstrakte klasse Element implementerer en generisk mekanisme for handle\/body (fig. 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 9. IElement og generisk implementering af handle\/body<\/b><\/p>\n<p>Derudover tilbyder Handly en generisk mekanisme til notifikation om \u00e6ndringer af model-elementer (fig. 10). Som man kan se, er det overordnet set analogt med de notifikationsmekanismer, der er implementeret i ressource-modellen og Java-modellen, og det bruger IElementDelta til en standardiseret repr\u00e6sentation af oplysninger om \u00e6ndringer i elementer.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk platform for 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 10. F\u00e6lles interfaces og grundl\u00e6ggende implementeringer af Handly-notifikationsmekanismen<\/b><\/p>\n<p>Den f\u00f8rn\u00e6vnte del af Handly (fig. 9 og 10) kan anvendes til at repr\u00e6sentere stort set alle handle-baserede modeller. For at skabe <i>sprogmodeller<\/i> tilbyder projektet yderligere funktionalitet - is\u00e6r f\u00e6lles interfaces og grundl\u00e6ggende implementeringer for elementer i strukturen af den originale tekst, de s\u00e5kaldte <i>source elements<\/i> (fig. 8). Interface ISourceFile represents the source file, while ISourceConstruct represents an element within the source file. The abstract classes SourceFile and SourceConstruct implement generalized mechanisms to support working with source files and their elements, such as managing text buffers, binding to element coordinates in the original text, reconciling the model with the current content of the working copy buffer, and so on. Implementing these mechanisms is usually quite a complex task, and Handly can significantly reduce the development effort for language handle-based models by providing high-quality base implementations.<\/p>\n<p>In addition to the key mechanisms mentioned above, Handly provides infrastructure for text buffers and snapshots, support for integration with source code editors (including out-of-the-box integration with the Xtext editor), as well as some common UI components that work with Handly-based models, such as the outline framework. To illustrate its capabilities, the project provides several examples, including a Java model implemented in Handly. (Compared to the complete implementation of the Java model in JDT, this model is intentionally simplified for clarity.)<\/p>\n<p>As mentioned earlier, significant attention was paid during the initial design of Handly and its subsequent development to scalability and flexibility. <\/p>\n<p>In principle, handle-based models are quite scalable by design. For instance, the handle\/body idiom allows limiting the amount of memory consumed by the model. However, there are nuances. For example, during scalability tests of Handly, a problem was discovered in the notification mechanism implementation \u2014 when a large number of elements were changed, constructing deltas took too much time. It turned out that the same issue was present in the Java model JDT, from which the corresponding code was adapted. We fixed the bug in Handly and prepared a similar patch for JDT, which was gratefully accepted. This is just one example of how the implementation of Handly in existing model implementations could potentially be useful, as it would allow fixing such a bug in just one place.<\/p>\n<p>For the integration of Handly into existing implementations to be technically feasible, the library must possess significant flexibility. The primary challenge is to maintain API backward compatibility for the model. This problem has been resolved in <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> by clearly separating the model-specific API, defined and fully controlled by the developer, from the unified meta-level API provided by the library. This not only makes the technical integration of Handly into existing implementations possible but also gives the developer of the new model considerable freedom in designing the API.<\/p>\n<p>Flexibility has other aspects as well. For example, Handly imposes almost no restrictions on the structure of the model and can be used for both general-purpose language modeling and domain-specific languages. When constructing the source file structure, Handly does not prescribe any specific form of AST representation and does not even require the presence of an AST, thereby ensuring compatibility with virtually any parsing mechanism. Finally, Handly supports full integration with the Eclipse workspace but can also work directly with file systems, thanks to the integration with <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>The current version <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> was released in December 2016. Although the project is currently in incubation and the API is not yet finalized, Handly is already used in two major commercial products that dared to be 'early adopters', and it must be said, they do not regret it so far.<\/p>\n<p>As noted earlier, one of these products is 1C:Enterprise Development Tools, where Handly has been used from the outset to model elements of the high-level structure of such languages as 1C:Enterprise, including the built-in programming language and query language. The other product is less known to the general public. It is <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, an integrated design environment for application-specific instruction-set processors (ASIP), used both within the Czech company Codasip itself and by its clients, including <noindex>AMD<\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.avg.com\/\">GNSNIT<\/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 har anvendt Handly i produktion siden 2015, startende med version Handly 0.2. Den seneste version af Codasip Studio bruger version 0.5, der blev udgivet i juni 2016. Ond\u0159ej Il\u010d\u00edk, der leder udviklingen af IDE'en i Codasip, er i kontakt med projektet og sikrer ekstremt vigtig feedback fra en \"third-party adapter\". Han har endda fundet lidt tid til at deltage direkte i udviklingen af projektet ved at implementere UI-laget (~ 4000 linjer kode) til et af eksemplerne p\u00e5 Handly, Java-modellen. Flere detaljer \"fra f\u00f8rste h\u00e5nd\" om brugen af Handly af adapterne kan findes p\u00e5 siden. <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Succeshistorier<\/a><\/noindex> projekt.<\/p>\n<p>Vi h\u00e5ber, at efter udgivelsen af version 1.0 med garanti for API-stabilitet og projektets afslutning af inkubationsfasen, vil Handly f\u00e5 nye adaptere. Indtil videre forts\u00e6tter projektet med at blive testet og forbedret yderligere, med to \"store\" udgivelser om \u00e5ret \u2013 i juni (p\u00e5 samme dato som den samtidige udgivelse af Eclipse) og i december, hvilket sikrer en forudsigelig tidsplan, som adapterne kan stole p\u00e5. Det kan ogs\u00e5 tilf\u00f8jes, at projektets \"bug rate\" forbliver stabilt lav, og Handly fungerer p\u00e5lideligt i produkterne fra tidlige adaptere siden de f\u00f8rste versioner. For yderligere information om Eclipse Handly kan man bruge <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Kom godt i gang Tutorial<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Arkitektonisk Oversigt<\/a><\/noindex>.<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 som teknologisk platform for 1C:Enterprise Development Tools | ProHoster","description":"Det er sandsynligt, at Eclipse l\u00e6nge har v\u00e6ret kendt og ikke beh\u00f8ver en s\u00e6rlig pr\u00e6sentation.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}