{"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\/sv\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Antagligen, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> beh\u00f6ver inte l\u00e4ngre n\u00e5gon s\u00e4rskild introduktion. M\u00e5nga k\u00e4nner till Eclipse tack vare Eclipse Java Development Tools (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Just denna popul\u00e4ra \u00f6ppen k\u00e4llkods Java IDE f\u00f6rknippas av de flesta utvecklare med ordet \u201cEclipse\u201d. Men Eclipse \u00e4r ocks\u00e5 en utbyggbar plattform f\u00f6r integration av utvecklingsverktyg (Eclipse Platform), och en rad IDE:er som bygger p\u00e5 den, inklusive JDT. Eclipse omfattar ocks\u00e5 Eclipse Project, ett \u00f6vergripande projekt som koordinerar utvecklingen av Eclipse Platform och JDT, samt Eclipse SDK \u2013 den levererade produkten av denna utveckling. Slutligen \u00e4r Eclipse en \u00f6ppen k\u00e4llkods-stiftelse med ett stort samh\u00e4lle av projekt, av vilka m\u00e5nga inte alls \u00e4r skrivna i Java eller relaterar till utvecklingsverktyg (till exempel projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). V\u00e4rlden av Eclipse \u00e4r mycket m\u00e5ngsidig.<\/p>\n<p>I denna artikel, som har en \u00f6versiktlig karakt\u00e4r, ska vi f\u00f6rs\u00f6ka utforska n\u00e5gra grundl\u00e4ggande aspekter av Eclipse-arkitekturen som en plattform f\u00f6r utveckling av integrerade utvecklingsverktyg och ge en f\u00f6rsta f\u00f6rst\u00e5else av komponenterna i Eclipse som utg\u00f6r fundamentet f\u00f6r den teknologiska plattformen f\u00f6r den \"nya Konfiguratorn\" 1C:Enterprise, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">1C:Enterprise Utvecklingsverktyg<\/a><\/noindex>. Naturligtvis kommer en s\u00e5dan genomg\u00e5ng ofr\u00e5nkomligen att vara ganska ytlig och begr\u00e4nsad, ocks\u00e5 d\u00e4rf\u00f6r att vi riktar oss till en publik som inte bara \u00e4r utvecklare av Eclipse. Vi hoppas dock att \u00e4ven erfarna Eclipse-utvecklare kan hitta intressant information i artikeln. Till exempel kommer vi att ber\u00e4tta om en av \"hemligheterna med Eclipse\", ett relativt nytt och fortfarande lite k\u00e4nt projekt <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, som grundades och st\u00f6ds av f\u00f6retaget 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 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 till Eclipse-arkitekturen<\/h2>\n<p>\nVi ska f\u00f6rst titta p\u00e5 n\u00e5gra allm\u00e4nna aspekter av Eclipse-arkitekturen med hj\u00e4lp av <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java Development Tools<\/a><\/noindex> (JDT). Valet av just JDT som exempel \u00e4r inte slumpm\u00e4ssigt. Detta var den f\u00f6rsta integrerade utvecklingsmilj\u00f6n som d\u00f6k upp i Eclipse. De andra *DT-projekten i Eclipse, s\u00e5som Eclipse C\/C++ Development Tooling (CDT), skapades senare och l\u00e5nade b\u00e5de grundl\u00e4ggande arkitekturprinciper och specifika kodfragment fr\u00e5n JDT. De arkitektoniska grunderna som lagts i JDT \u00e4r fortfarande aktuella f\u00f6r n\u00e4stan alla IDE:er som byggts ovanp\u00e5 Eclipse Platform, inklusive 1C:Enterprise Development Tools.<\/p>\n<p>F\u00f6rst och fr\u00e4mst b\u00f6r det p\u00e5pekas att Eclipse k\u00e4nnetecknas av en tydlig arkitektonisk uppdelning, d\u00e4r spr\u00e5koberoende funktionalitet separeras fr\u00e5n funktionaliteten avsedd f\u00f6r specifika programmeringsspr\u00e5k, och d\u00e4r UI-oberoende \"k\u00e4rnkomponenter\" separeras fr\u00e5n komponenter relaterade till st\u00f6det f\u00f6r anv\u00e4ndargr\u00e4nssnittet.<\/p>\n<p>Eclipse Plattformen definierar en gemensam, spr\u00e5koberoende infrastruktur, medan Java utvecklingsverktyg tillf\u00f6r Eclipse en fullt funktionell Java IDE. B\u00e5de Eclipse Plattformen och JDT best\u00e5r av flera komponenter, d\u00e4r var och en h\u00f6r till antingen det UI-oberoende \"k\u00e4rnan\" eller UI-lagret (se bild 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Bild 1. Eclipse Plattform och JDT<\/b><\/p>\n<p>L\u00e5t oss lista de viktigaste komponenterna i Eclipse Plattformen:<\/p>\n<ul>\n<li><b>K\u00f6rning<\/b> \u2014 Definierar plugin-infrastrukturen. Eclipse k\u00e4nnetecknas av en modul\u00e4r arkitektur. I grunden \u00e4r Eclipse en samling av \"utvidgningspunkter\" och \"utvidgningar\".<\/li>\n<li><b>Arbetsyta<\/b> \u2014 Hanterar ett eller flera projekt. Ett projekt best\u00e5r av mappar och filer som direkt \u00e5terspeglas i filsystemet.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Tillhandah\u00e5ller grunderna f\u00f6r anv\u00e4ndargr\u00e4nssnittet, integrerat med operativsystemet.<\/li>\n<li><b>JFace<\/b> \u2014 Tillhandah\u00e5ller ett antal UI-ramverk byggda ovanf\u00f6r SWT.<\/li>\n<li><b>Workbench<\/b> \u2014 Definierar UI-paradigmen f\u00f6r Eclipse: redakt\u00f6rer, vyer, perspektiv.<\/li>\n<\/ul>\n<p>\nDet b\u00f6r n\u00e4mnas att Eclipse Plattformen ocks\u00e5 erbjuder m\u00e5nga andra anv\u00e4ndbara komponenter f\u00f6r att bygga integrerade utvecklingsverktyg, bland vilka Debug, Compare, Search och Team kan n\u00e4mnas. En s\u00e4rskild omtanke g\u00e5r till JFace Text \u2013 grunden f\u00f6r att bygga \"smartare k\u00e4llkodredigerare\". Tyv\u00e4rr \u00e4r det inte m\u00f6jligt att ge en snabb \u00f6versikt av dessa komponenter, liksom komponenterna i UI-lagret i denna artikel, s\u00e5 i den \u00e5terst\u00e5ende delen av detta avsnitt kommer vi att begr\u00e4nsa oss till att ge en \u00f6versikt \u00f6ver de viktigaste \"k\u00e4rnkomponenterna\" i Eclipse Plattformen och JDT.<\/p>\n<h4>K\u00e4rn K\u00f6rning<\/h4>\n<p>\nEclipses plugin-infrastruktur \u00e4r baserad p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> och tillhandah\u00e5lls av projektet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Varje Eclipse-plugin \u00e4r en OSGi-bundle. OSGi-specifikationen definierar bland annat mekanismer f\u00f6r versionering och beroendeuppl\u00f6sning. Ut\u00f6ver dessa standardmekanismer introducerar Equinox begreppet <i>utvidgningspunkt<\/i>Varje plugin kan definiera sina egna utvidgningspunkter och tillf\u00f6ra ytterligare funktionalitet till systemet (\"utvidgningar\"), genom att anv\u00e4nda utvidgningspunkter som definieras av samma eller andra plugins. En detaljerad beskrivning av mekanismerna bakom OSGi och Equinox ligger utanf\u00f6r ramen f\u00f6r denna artikel. Det b\u00f6r noteras att moduleringen i Eclipse \u00e4r helt\u00e4ckande (varje delsystem, inklusive Runtime, best\u00e5r av en eller flera plugins), och praktiskt taget allt i Eclipse \u00e4r en utvidgning. Dessa principer var inbakade i Eclipse-arkitekturen l\u00e5ngt innan OSGi inf\u00f6rdes (vid den tidpunkten anv\u00e4ndes en egen teknologi, som till stor del liknar OSGi).<\/p>\n<h4>Core Workspace<\/h4>\n<p>\nN\u00e4stan varje integrerad utvecklingsmilj\u00f6 baserad p\u00e5 Eclipse Platform arbetar med Eclipse workspace. Workspace inneh\u00e5ller vanligtvis k\u00e4llkoden f\u00f6r den applikation som utvecklas i IDE:n. Workspace speglar direkt filsystemet och best\u00e5r av projekt som inneh\u00e5ller mappar och filer. Dessa projekt, mappar och filer kallas <i>resurser<\/i> workspace. Implementeringen av workspace i Eclipse fungerar som en cache i f\u00f6rh\u00e5llande till filsystemet, vilket avsev\u00e4rt \u00f6kar hastigheten f\u00f6r traversering av resurs tr\u00e4det. Dessutom tillhandah\u00e5ller workspace en rad extra tj\u00e4nster, inklusive <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">mekanismen f\u00f6r notifiering av resurs\u00e4ndringar<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">infrastrukturen f\u00f6r inkrementella byggare<\/a><\/noindex>.<\/p>\n<p>Komponenten Core Resources (plugin org.eclipse.core.resources) \u00e4r ansvarig f\u00f6r att st\u00f6dja workspace och dess resurser. Denna komponent ger i synnerhet programmatisk \u00e5tkomst till workspace i form av <i>resursmodeller.<\/i>F\u00f6r att arbeta effektivt med denna modell beh\u00f6ver kunderna ett enkelt s\u00e4tt att representera en l\u00e4nk till en resurs. Det skulle vara \u00f6nskv\u00e4rt att objektet som lagrar resursens tillst\u00e5nd direkt i modellen \u00e4r dolt f\u00f6r kund\u00e5tkomst. Annars, vid till exempel borttagning av en fil, skulle klienten kunna forts\u00e4tta att h\u00e5lla ett objekt som inte l\u00e4ngre finns i modellen, vilket skulle leda till problem. Eclipse l\u00f6ser detta problem genom att anv\u00e4nda n\u00e5got som kallas <i>handle<\/i> resursen. Handle fungerar som en nyckel (den vet endast s\u00f6kv\u00e4gen till resurserna i workspace) och kontrollerar helt och h\u00e5llet \u00e5tkomsten till det interna modellobjektet, som direkt lagrar information om resursens tillst\u00e5nd. Denna design \u00e4r en variation av m\u00f6nstret <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>Figur 2 illustrerar idiomen Handle\/Body i f\u00f6rh\u00e5llande till resursmodellen. Gr\u00e4nssnittet IResource representerar handtaget f\u00f6r resursen och fungerar som ett API, till skillnad fr\u00e5n klassen Resource som implementerar detta gr\u00e4nssnitt, samt klassen ResourceInfo som representerar kroppen, vilka inte \u00e4r API:er. Det \u00e4r v\u00e4rt att p\u00e5peka att handtaget endast k\u00e4nner till s\u00f6kv\u00e4gen till resursen relativt r\u00f6tter i arbetsytan och inte inneh\u00e5ller en referens till resource info. Objekten resource info bildar det s\u00e5 kallade \"elementtr\u00e4d\". Denna dat Struktur \u00e4r helt materialiserad i minnet. F\u00f6r att hitta en instans av resource info som motsvarar ett visst handtag, traverseras elementtr\u00e4det enligt s\u00f6kv\u00e4gen som lagras i detta handtag.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 2. IResource och ResourceInfo<\/b><\/p>\n<p>Som vi kommer att se senare anv\u00e4nds den grundl\u00e4ggande designen av resursmodellen (som kan kallas handtagsbaserad) i Eclipse och f\u00f6r andra modeller. L\u00e5t oss nu lista n\u00e5gra karakteristiska egenskaper hos denna design:<\/p>\n<ul>\n<li>Handtaget \u00e4r en v\u00e4rdeobjekt (value object). V\u00e4rdeobjekt \u00e4r icke-mutanabla (immutable) objekt, vars likhet inte baseras p\u00e5 identitet. S\u00e5dana objekt kan anv\u00e4ndas s\u00e4kert som nycklar i hashade containrar. Flera instanser av ett handtag kan referera till samma resurs. F\u00f6r att j\u00e4mf\u00f6ra dem b\u00f6r metoden equals(Object) anv\u00e4ndas.<\/li>\n<li>Handtaget definierar resurens beteende, men inneh\u00e5ller ingen information om resurens tillst\u00e5nd (de enda uppgifter det lagrar \u00e4r \"nyckeln\", s\u00f6kv\u00e4gen till resursen).<\/li>\n<li>Handtaget kan referera till en icke-existerande resurs (antingen en resurs som \u00e4nnu inte har skapats eller en resurs som redan har tagits bort). Existensen av resursen kan kontrolleras med metoden IResource.exists().<\/li>\n<li>Vissa operationer kan utf\u00f6ras enbart baserat p\u00e5 informationen som lagras i sj\u00e4lva handtaget (s\u00e5 kallade handtagsbara operationer). Exempel p\u00e5 detta inkluderar IResource.getParent(), getFullPath(), osv. Resursen beh\u00f6ver inte n\u00f6dv\u00e4ndigtvis existera f\u00f6r att en s\u00e5dan operation ska lyckas. Operationer som kr\u00e4ver att resursen existerar f\u00f6r att lyckas kastar ett undantag (CoreException) om resursen inte finns.<\/li>\n<\/ul>\n<p>\nEclipse tillhandah\u00e5ller en effektiv mekanism f\u00f6r notifiering om f\u00f6r\u00e4ndringar i resurser i arbetsytan (se bild 3). Resurser kan f\u00f6r\u00e4ndras b\u00e5de genom \u00e5tg\u00e4rder som utf\u00f6rs i Eclipse IDE och genom att synkronisera med filsystemet. I b\u00e5da fallen f\u00e5r de registrerade klienterna detaljerad information om f\u00f6r\u00e4ndringarna i form av \"resursdeltan\" (resource delta). Deltat beskriver f\u00f6r\u00e4ndringarna mellan tv\u00e5 tillst\u00e5nd av (under-)tr\u00e4det med resurser i arbetsytan och \u00e4r sj\u00e4lvt ett tr\u00e4d d\u00e4r varje nod beskriver f\u00f6r\u00e4ndringen av en viss resurs och inneh\u00e5ller en lista med deltan p\u00e5 n\u00e4sta niv\u00e5 som beskriver f\u00f6r\u00e4ndringar i underordnade resurser.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/8af412412ee97d205137ab70c8444a50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Bild 3. IResourceChangeEvent och IResourceDelta<\/b><\/p>\n<p>Den notifieringsmekanism som baseras p\u00e5 resursdeltan har f\u00f6ljande egenskaper:<\/p>\n<ul>\n<li>En enskild f\u00f6r\u00e4ndring och flera f\u00f6r\u00e4ndringar beskrivs med samma struktur, eftersom deltastrukturen bygger p\u00e5 principen om rekursiv komposition. Klienter som registrerat sig kan bearbeta notifieringar om resursf\u00f6r\u00e4ndringar genom att rekursivt traversera delta-tr\u00e4det.<\/li>\n<li>Deltat inneh\u00e5ller all information om resurs\u00e4ndringen, inklusive dess flyttning och\/eller \u00e4ndring av tillh\u00f6rande \"mark\u00f6rer\" (d\u00e4r mark\u00f6rer representerar till exempel kompilatorfel).<\/li>\n<li>Eftersom referenser till resurser g\u00f6rs via handles kan deltat naturligt referera till en borttagen resurs.<\/li>\n<\/ul>\n<p>\nSom vi snart kommer att se \u00e4r de grundl\u00e4ggande komponenterna i designen av notifieringsmekanismen f\u00f6r resursmodellens f\u00f6r\u00e4ndringar ocks\u00e5 relevanta f\u00f6r andra handle-baserade modeller.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nModellen f\u00f6r resurser i Eclipse-arbetsytan \u00e4r en grundl\u00e4ggande spr\u00e5koberoende model. Komponenten JDT Core (plugin org.eclipse.jdt.core) tillhandah\u00e5ller ett API f\u00f6r navigering och analys av arbetsytans struktur ur ett Java-perspektiv, den s\u00e5 kallade \"Java-modellen\" (<i>Java-modell<\/i>). Detta API definieras i termer av Java-element, till skillnad fr\u00e5n det underliggande API:t f\u00f6r resursmodellen, som definieras i termer av mappar och filer. De viktigaste gr\u00e4nssnitten f\u00f6r Java-elementens tr\u00e4d visas i bild 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Bild 4. Element i Java-modellen<\/b><\/p>\n<p>Java-modellen anv\u00e4nder samma idiom handle\/body som resursmodellen (fig. 5). IJavaElement \u00e4r handle, medan JavaElementInfo fungerar som body. Gr\u00e4nssnittet IJavaElement definierar ett protokoll som \u00e4r gemensamt f\u00f6r alla Java-element. Vissa av dess metoder \u00e4r endast handle: getElementName(), getParent() osv. JavaElementInfo-objektet lagrar tillst\u00e5ndet f\u00f6r det motsvarande elementet: dess struktur och attribut.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 5. IJavaElement och JavaElementInfo<\/b><\/p>\n<p>Java-modellen har vissa skillnader i implementationen av den grundl\u00e4ggande handle\/body-designen j\u00e4mf\u00f6rt med resursmodellen. Som n\u00e4mnts tidigare inneh\u00e5ller resursmodellens elementtr\u00e4d, vars noder \u00e4r objekt med resursinformation, helt i minnet. Men i Java-modellen kan det finnas betydligt fler element \u00e4n i resurstr\u00e4det, eftersom den \u00e4ven representerar den interna strukturen av .java- och .class-filer: typer, f\u00e4lt och metoder.<\/p>\n<p>F\u00f6r att undvika full materialisering av hela elementtr\u00e4det i minnet anv\u00e4nder implementationen av Java-modellen en begr\u00e4nsad LRU-cache f\u00f6r elementinfo, d\u00e4r nyckeln \u00e4r handle IJavaElement. Elementinfo-objekt skapas vid behov n\u00e4r navigering genom elementtr\u00e4det sker. De minst anv\u00e4nda elementen tr\u00e4ngs ut fr\u00e5n cachen, och minnesanv\u00e4ndningen fr\u00e5n modellen h\u00e5lls inom den angivna storleken p\u00e5 cachen. Detta \u00e4r ytterligare en f\u00f6rdel med handle-baserad design, som helt d\u00f6ljer s\u00e5dana implementationsdetaljer fr\u00e5n klientkoden.<\/p>\n<p>Mekanismen f\u00f6r notifiering av \u00e4ndringar i Java-element \u00e4r i allm\u00e4nhet liknande den mekanism f\u00f6r f\u00f6r\u00e4ndringssp\u00e5rning som diskuterades ovan f\u00f6r resursarbetsytan. Klienten som \u00f6nskar f\u00f6lja \u00e4ndringar i Java-modellen prenumererar p\u00e5 notifieringar som presenteras i form av ett objekt ElementChangedEvent, som inneh\u00e5ller IJavaElementDelta (fig. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 6. ElementChangedEvent och IJavaElementDelta<\/b><\/p>\n<p>Java-modellen inneh\u00e5ller ingen information om kroppar f\u00f6r metoder eller namnutredning, s\u00e5 f\u00f6r en detaljerad analys av kod skriven i Java tillhandah\u00e5ller JDT Core en ytterligare (icke-handle-baserad) modell: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">abstrakt syntaxtr\u00e4d<\/a><\/noindex> (abstrakt syntaxtr\u00e4d, AST). AST representerar resultatet av syntaxanalysen av den ursprungliga texten. Noder i AST motsvarar elementen i strukturen f\u00f6r den ursprungliga modulen (deklarationer, operationer, uttryck osv.) och inneh\u00e5ller information om koordinaterna f\u00f6r det motsvarande elementet i den ursprungliga texten, samt (som valfritt) information om namnuppl\u00f6sning i form av l\u00e4nkar till s\u00e5 kallade <i>bindings<\/i>. Bindningar \u00e4r objekt som representerar namngivna entiteter, s\u00e5som typer, metoder och variabler, som \u00e4r k\u00e4nda f\u00f6r kompilatorn. Till skillnad fr\u00e5n noderna i AST, som bildar ett tr\u00e4d, st\u00f6der bindningar korsreferenser och bildar i allm\u00e4nhet en graf. Den abstrakta klassen ASTNode \u00e4r en gemensam basklass f\u00f6r alla noder i AST. Underklasser av ASTNode motsvarar specifika syntaktiska konstruktioner i Java-spr\u00e5ket.<\/p>\n<p>Eftersom syntaktiska tr\u00e4d kan anv\u00e4nda en betydande m\u00e4ngd minne, cachen JDT endast ett AST f\u00f6r den aktiva redigeraren. Till skillnad fr\u00e5n Java-modellen betraktas AST vanligtvis som en \"intermedi\u00e4r\", \"tempor\u00e4r\" modell, vars element kunder inte b\u00f6r beh\u00e5lla referenser till utanf\u00f6r kontexten f\u00f6r operationen som ledde till skapandet av AST.<\/p>\n<p>De tre n\u00e4mnda modellerna (Java-modell, AST, bindningar) utg\u00f6r tillsammans grunden f\u00f6r att bygga \"intelligenta utvecklingsverktyg\" i JDT, inklusive en kraftfull Java-redigerare med olika \"hj\u00e4lpare\", olika operationer f\u00f6r att bearbeta k\u00e4llkoden (som organisering av importlista f\u00f6r namn och formatering enligt den konfigurerade stilen), verktyg f\u00f6r s\u00f6kning och refaktorisering. H\u00e4r spelar Java-modellen en s\u00e4rskild roll, eftersom den anv\u00e4nds som grund f\u00f6r den visuella representationen av strukturen f\u00f6r den utvecklade applikationen (till exempel i Package Explorer, Outline, Search, Call Hierarchy och Type Hierarchy).<\/p>\n<h2>Eclipse-komponenterna som anv\u00e4nds i 1C:Enterprise Developments Tools<\/h2>\n<p>\nFigur 7 visar Eclipse-komponenterna som utg\u00f6r grunden f\u00f6r den teknologiska plattformen f\u00f6r 1C:Enterprise Development Tools.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 7. Eclipse som plattform f\u00f6r 1C:Enterprise Development Tools<\/b><\/p>\n<p><b>Eclipse-plattformen<\/b> tillhandah\u00e5ller grundl\u00e4ggande infrastruktur. Vi har granskad n\u00e5gra aspekter av denna infrastruktur i den f\u00f6reg\u00e5ende delen.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Eclipse Modeling Framework<\/a><\/noindex><\/b> (<b>EMF<\/b>) tillhandah\u00e5ller generella verktyg f\u00f6r modellering av strukturerad data. EMF \u00e4r integrerat med Eclipse-plattformen, men kan ocks\u00e5 anv\u00e4ndas separat i vanliga Java-applikationer. M\u00e5nga nyb\u00f6rjare inom Eclipse-utveckling \u00e4r redan v\u00e4l bekanta med EMF, \u00e4ven om de kanske inte helt f\u00f6rst\u00e5r detaljerna i Eclipse-plattformen. En av anledningarna till dess v\u00e4lf\u00f6rtj\u00e4nta popularitet \u00e4r den universella designen, som inkluderar en enhetlig meta-niv\u00e5-API som g\u00f6r det m\u00f6jligt att arbeta generellt med vilken EMF-modell som helst. De grundl\u00e4ggande implementationerna av EMF f\u00f6r modelobjekt och systemet f\u00f6r kodgenerering fr\u00e5n meta-modellen \u00f6kar avsev\u00e4rt utvecklingshastigheten och minskar m\u00e4ngden fel. EMF inneh\u00e5ller \u00e4ven mekanismer f\u00f6r serialisering av modeller, sp\u00e5rning av f\u00f6r\u00e4ndringar i modeller och mycket mer. <\/p>\n<p>Som med alla verkligt universella verktyg \u00e4r EMF l\u00e4mpligt f\u00f6r att l\u00f6sa ett brett spektrum av uppgifter relaterade till modellering, men vissa typer av modeller (som de hanterade modeller som diskuterats ovan) kan beh\u00f6va mer specialiserade verktyg f\u00f6r modellering. Att prata om EMF \u00e4r en otacksam uppgift, s\u00e4rskilt inom ramen f\u00f6r en enda artikel, eftersom det \u00e4r ett \u00e4mne f\u00f6r en separat bok, och en ganska tjock s\u00e5dan. Vi ska bara p\u00e5peka att det kvalitativa systemet f\u00f6r generaliseringar som ligger till grund f\u00f6r EMF har gjort det m\u00f6jligt f\u00f6r en hel rad projekt, som \u00e4gnas \u00e5t modellering, att se dagens ljus och som ing\u00e5r i det \u00f6vergripande projektet. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Eclipse Modellering<\/a><\/noindex> tillsammans med sj\u00e4lva EMF. Ett av dessa projekt \u00e4r Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> tillhandah\u00e5ller infrastrukturen f\u00f6r \"textuell modellering\". Xtext anv\u00e4nder <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> f\u00f6r syntaktisk analys av k\u00e4lltext och EMF f\u00f6r att representera den resulterande ASG (abstract semantic graph, som i huvudsak \u00e4r en kombination av AST och bindings), \u00e4ven kallad \"semantisk modell\". Grammatiken f\u00f6r det spr\u00e5k som modelleras med Xtext beskrivs p\u00e5 sitt eget Xtext-spr\u00e5k. Detta g\u00f6r det m\u00f6jligt att inte bara generera en grammatisk beskrivning f\u00f6r ANTLR, utan ocks\u00e5 att erh\u00e5lla en mekanism f\u00f6r serialisering av AST (dvs. Xtext tillhandah\u00e5ller b\u00e5de parser och unparser), kontextuell hj\u00e4lp och en rad andra spr\u00e5kkomponenter. \u00c5 andra sidan \u00e4r spr\u00e5ket f\u00f6r grammatikbeskrivning som anv\u00e4nds i Xtext mindre flexibelt j\u00e4mf\u00f6rt med spr\u00e5ket f\u00f6r grammatikbeskrivning i ANTLR. D\u00e4rf\u00f6r \u00e4r det ibland n\u00f6dv\u00e4ndigt att \"b\u00f6ja\" det implementerade spr\u00e5ket till Xtext, vilket vanligtvis inte \u00e4r ett problem om det handlar om ett nyutvecklat spr\u00e5k, men kan vara oacceptabelt f\u00f6r spr\u00e5k med redan etablerad syntax. Trots detta \u00e4r Xtext f\u00f6r n\u00e4rvarande det mest mogna, funktionellt kompletta och universella verktyget i Eclipse f\u00f6r att bygga programmeringsspr\u00e5k och verktyg f\u00f6r dem. S\u00e4rskilt \u00e4r det ett perfekt verktyg f\u00f6r snabb prototypframst\u00e4llning. <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\u00e4nspecifika spr\u00e5k<\/a><\/noindex> (domain-specific language, DSL). F\u00f6rutom det n\u00e4mnda \"spr\u00e5kets k\u00e4rna\" baserad p\u00e5 ANTLR och EMF, erbjuder Xtext m\u00e5nga anv\u00e4ndbara komponenter av h\u00f6gre niv\u00e5, inklusive indexeringsmekanismer, inkrementell byggnation, \"smart redigerare\" och mycket, mycket mer, men l\u00e4mnar spr\u00e5kbaserade handle-baserade modeller utanf\u00f6r. Precis som EMF \u00e4r Xtext ett \u00e4mne v\u00e4rt en egen bok, och vi kommer knappast att kunna ber\u00e4ttar om alla dess m\u00f6jligheter ens kort.<\/p>\n<p>1C:Enterprise Development Tools anv\u00e4nder b\u00e5de EMF i sig och en rad andra projekt inom Eclipse Modeling. S\u00e4rskilt \u00e4r Xtext en av grundpelarna i utvecklingsverktygen f\u00f6r s\u00e5dana spr\u00e5k inom 1C: F\u00f6retag, s\u00e5som det inbyggda programmeringsspr\u00e5ket och fr\u00e5gespr\u00e5ket. En annan grund f\u00f6r dessa utvecklingsverktyg \u00e4r projektet Eclipse Handly, som vi kommer att g\u00e5 mer p\u00e5 djupet med (av de n\u00e4mnda komponenterna inom Eclipse \u00e4r det hittills den minst k\u00e4nda).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, ett underprojekt till det \u00f6verordnade projektet Eclipse Technology, skapades som ett resultat av det initiala kodbidraget till Eclipse Foundation fr\u00e5n f\u00f6retaget 1C \u00e5r 2014. Sedan dess har f\u00f6retaget 1C fortsatt att st\u00f6dja utvecklingen av projektet: committers p\u00e5 Handly \u00e4r anst\u00e4llda hos f\u00f6retaget. Projektet \u00e4r litet, men upptar en ganska unik nisch inom Eclipse: dess huvudsakliga m\u00e5l \u00e4r att st\u00f6dja utvecklingen av handle-baserade modeller.<\/p>\n<p>De grundl\u00e4ggande arkitekturprinciperna f\u00f6r handle-baserade modeller, s\u00e5som handle\/body-idiomet, har diskuterats ovan med exempel fr\u00e5n resursmodellen och Java-modellen. Det noterades d\u00e4r att b\u00e5de resursmodellen och Java-modellen \u00e4r viktiga grundstenar f\u00f6r Eclipse Java Development Tools (JDT). Eftersom n\u00e4stan alla *DT-projekt i Eclipse har en arkitektur liknande JDT, \u00e4r det ingen \u00f6verdrift att s\u00e4ga att handle-baserade modeller ligger till grund f\u00f6r m\u00e5nga, om inte alla, IDE:er byggda ovanp\u00e5 Eclipse Platform. Till exempel inneh\u00e5ller Eclipse C\/C++ Development Tooling (CDT) en handle-baserad modell f\u00f6r C\/C++, som spelar samma roll i CDT:s arkitektur som Java-modellen g\u00f6r i JDT.<\/p>\n<p>Innan Handly lanserades erbj\u00f6d Eclipse inga specialiserade bibliotek f\u00f6r att bygga spr\u00e5kbaserade handle-modeller. De nuvarande modellerna skapades mestadels genom direkt anpassning av koden fr\u00e5n Java-modellen (\u00e4ven k\u00e4nd som copy\/paste), <i>i de fall d\u00e4r det \u00e4r till\u00e5tet<\/i> enligt Eclipse Public License (EPL). (Det \u00e4r uppenbart att, till exempel, f\u00f6r Eclipses egna projekt vanligtvis inte \u00e4r ett juridiskt problem, vilket inte kan s\u00e4gas om produkter med st\u00e4ngd k\u00e4llkod.) F\u00f6rutom den karakt\u00e4ristiska bristen p\u00e5 systematik leder denna metodik till v\u00e4lk\u00e4nda problem: kodduplicering, fel som inf\u00f6rts genom anpassningar, osv. \u00c4nnu v\u00e4rre, de resulterande modellerna f\u00f6rblir \"en sak f\u00f6r sig\" och utnyttjar inte den befintliga potentialen f\u00f6r enhetlighet. Att identifiera gemensamma begrepp och protokoll f\u00f6r spr\u00e5kbaserade handle-modeller skulle kunna leda till skapandet av \u00e5teranv\u00e4ndbara komponenter f\u00f6r arbete med dem, p\u00e5 liknande s\u00e4tt som det h\u00e4nde i fallet med EMF.<\/p>\n<p>Det g\u00e5r inte att s\u00e4ga att det i Eclipse inte funnits en f\u00f6rst\u00e5else f\u00f6r dessa problem. Redan 2005 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, med en sammanfattning av erfarenheterna fr\u00e5n utvecklingen av CDT-prototypen, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">argumenterade<\/a><\/noindex> Behovet av att skapa en gemensam infrastruktur f\u00f6r spr\u00e5kmodeller, inklusive handle-baserade modeller. Men som det ofta \u00e4r, p\u00e5 grund av mer prioriterade uppgifter, kom vi aldrig till genomf\u00f6randet av dessa id\u00e9er. Under tiden kvarst\u00e5r kodfaktoriseringen av *DT-projekt som en av de \u00e4mnen som inte \u00e4r tillr\u00e4ckligt utforskade inom Eclipse.<\/p>\n<p>P\u00e5 ett visst s\u00e4tt syftar projektet Handly till att l\u00f6sa ungef\u00e4r samma uppgifter som EMF, men f\u00f6r handle-baserade modeller, fr\u00e4mst spr\u00e5kliga (dvs. som representerar strukturelement av ett visst programmeringsspr\u00e5k). Nedan listas de huvudsakliga m\u00e5len som sattes vid utformningen av Handly:<\/p>\n<ul>\n<li>Uppdelning av de grundl\u00e4ggande abstraktionerna i \u00e4mnesomr\u00e5det.<\/li>\n<li>Minska anstr\u00e4ngningarna och \u00f6ka kvaliteten p\u00e5 implementeringen av spr\u00e5kliga handle-baserade modeller genom \u00e5teranv\u00e4ndning av kod.<\/li>\n<li>Tillhandah\u00e5lla ett enhetligt API p\u00e5 meta-niv\u00e5 till de resulterande modellerna, vilket m\u00f6jligg\u00f6r skapandet av gemensamma IDE-komponenter som arbetar med spr\u00e5kliga handle-baserade modeller.<\/li>\n<li>Flexibilitet och skalbarhet.<\/li>\n<li>Integration med Xtext (i ett separat lager).<\/li>\n<\/ul>\n<p>\nF\u00f6r att identifiera gemensamma begrepp och protokoll har befintliga implementationer av spr\u00e5kliga handle-baserade modeller analyserats. De grundl\u00e4ggande gr\u00e4nssnitten och de grundl\u00e4ggande implementationerna som tillhandah\u00e5lls av Handly visas i figur 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 8. Gemensamma gr\u00e4nssnitt och grundl\u00e4ggande implementationer av Handly-element.<\/b><\/p>\n<p>Gr\u00e4nssnittet IElement representerar handtaget av ett element och \u00e4r gemensamt f\u00f6r elementen i alla modeller baserade p\u00e5 Handly. Den abstrakta klassen Element implementerar den generiska mekanismen handle\/body (figur 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 9. IElement och generisk implementering av handle\/body.<\/b><\/p>\n<p>Dessutom tillhandah\u00e5ller Handly en generell mekanism f\u00f6r notifiering av f\u00f6r\u00e4ndringar av modelelement (figur 10). Som man kan se \u00e4r den i stora drag liknande notifieringsmekanismerna implementerade i resursmodellen och Java-modellen, och anv\u00e4nder IElementDelta f\u00f6r en enhetlig presentation av information om f\u00f6r\u00e4ndringen av ett element.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse som teknologisk plattform f\u00f6r 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Figur 10. Gemensamma gr\u00e4nssnitt och grundl\u00e4ggande implementationer av Handlys notifieringsmekanism.<\/b><\/p>\n<p>Den del av Handly som diskuterats ovan (figur 9 och 10) kan anv\u00e4ndas f\u00f6r att representera praktiskt taget alla handle-baserade modeller. F\u00f6r att skapa <i>spr\u00e5kliga<\/i> modeller erbjuder projektet ytterligare funktionalitet - i synnerhet gemensamma gr\u00e4nssnitt och grundl\u00e4ggande implementationer f\u00f6r elementen i strukturen av den ursprungliga texten, de s\u00e5 kallade <i>source elements.<\/i> (fig. 8). Gr\u00e4nssnittet ISourceFile representerar en ursprungsfil, medan ISourceConstruct \u00e4r ett element inom ursprungsfilen. Abstrakta klasserna SourceFile och SourceConstruct implementerar generiska mekanismer f\u00f6r att st\u00f6dja arbetet med ursprungsfiler och deras element, till exempel arbete med textbuffertar, bindning till koordinater av elementet i den ursprungliga texten, samordning av modellen med det aktuella inneh\u00e5llet i arbetskopians buffert, etc. Implementeringen av dessa mekanismer \u00e4r vanligtvis en ganska komplex uppgift, och Handly kan avsev\u00e4rt minska utvecklingsinsatserna f\u00f6r spr\u00e5kmodeller baserade p\u00e5 handles genom att erbjuda kvalitativa grundimplementationer.<\/p>\n<p>F\u00f6rutom de grundl\u00e4ggande mekanismerna som n\u00e4mnts ovan, erbjuder Handly infrastruktur f\u00f6r textbuffertar och snapshots, st\u00f6d f\u00f6r integration med k\u00e4llkodseditorer (inklusive den inbyggda integrationen med Xtext-editor), samt vissa allm\u00e4nna UI-komponenter som arbetar med Handly-baserade modeller, s\u00e5som outline-ramverket. F\u00f6r att illustrera sina m\u00f6jligheter tillhandah\u00e5ller projektet flera exempel, inklusive en implementering av en Java-modell baserad p\u00e5 Handly. (J\u00e4mf\u00f6rt med den fullst\u00e4ndiga implementeringen av Java-modellen i JDT, \u00e4r denna modell avsiktligt n\u00e5got f\u00f6renklad f\u00f6r st\u00f6rre tydlighet.)<\/p>\n<p>Som n\u00e4mnts tidigare har stort fokus lagts p\u00e5 skalbarhet och flexibilitet vid den initiala designen och den fortsatta utvecklingen av Handly. <\/p>\n<p>I princip skalas handle-baserade modeller ganska v\u00e4l \"by design\". Till exempel m\u00f6jligg\u00f6r idiomet handle\/body att begr\u00e4nsa m\u00e4ngden minne som modellen anv\u00e4nder. Men det finns ocks\u00e5 nyanser. Under tester av Handly f\u00f6r skalbarhet uppt\u00e4cktes ett problem i implementeringen av notifieringsmekanismen \u2013 att bygga deltas tog f\u00f6r mycket tid vid \u00e4ndring av ett stort antal element. Det visade sig att samma problem \u00e4ven fanns i Java-modellen JDT, fr\u00e5n vilken den motsvarande koden en g\u00e5ng anpassades. Vi \u00e5tg\u00e4rdade felet i Handly och f\u00f6rberedde en motsvarande patch f\u00f6r JDT, som mottogs med tacksamhet. Detta \u00e4r bara ett exempel p\u00e5 n\u00e4r implementeringen av Handly i befintliga modellimplementationer skulle kunna vara potentiellt anv\u00e4ndbar, eftersom detta skulle ha m\u00f6jliggjort att \u00e5tg\u00e4rda felet p\u00e5 ett enda st\u00e4lle.<\/p>\n<p>F\u00f6r att g\u00f6ra integrationen av Handly tekniskt m\u00f6jlig i befintliga implementationer av modeller m\u00e5ste biblioteket uppvisa betydande flexibilitet. Huvudproblemet \u00e4r att bevara bak\u00e5tkompatibiliteten f\u00f6r modellens API. Denna uppgift har l\u00f6sts i <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> genom en tydlig separation av det modell-specifika API:t, som definieras och kontrolleras helt av utvecklaren, fr\u00e5n det enhetliga meta-niv\u00e5 API:t som tillhandah\u00e5lls av biblioteket. Detta g\u00f6r inte bara teknisk integration av Handly i befintliga implementationer m\u00f6jlig, utan ger ocks\u00e5 utvecklaren av den nya modellen betydande frihet vid utformningen av API:t.<\/p>\n<p>Flexibilitet har ocks\u00e5 andra aspekter. Till exempel st\u00e4ller Handly n\u00e4stan inga krav p\u00e5 modellens struktur och kan anv\u00e4ndas f\u00f6r b\u00e5de allm\u00e4nna programmeringsspr\u00e5k och dom\u00e4nspecifika spr\u00e5k. Vid bygget av grundfilens struktur f\u00f6reskriver Handly ingen specifik form av AST-representation och kr\u00e4ver i princip inte ens f\u00f6rekomsten av AST, vilket s\u00e4kerst\u00e4ller kompatibilitet med n\u00e4stan alla syntaktiska analysmekanismer. Slutligen st\u00f6der Handly fullst\u00e4ndig integration med Eclipse workspace, men kan ocks\u00e5 fungera direkt med filsystem, tack vare integrationen med <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>Den nuvarande versionen <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> sl\u00e4pptes i december 2016. Trots att projektet f\u00f6r n\u00e4rvarande \u00e4r i inkubationsfasen och API:t \u00e4nnu inte \u00e4r slutgiltigt fastst\u00e4llt, anv\u00e4nds Handly redan i tv\u00e5 stora kommersiella produkter som v\u00e5gat agera som \"tidiga anv\u00e4ndare\", och hittills har de inte \u00e5ngrat detta.<\/p>\n<p>Som n\u00e4mnts tidigare \u00e4r en av dessa produkter 1C:Enterprise Development Tools, d\u00e4r Handly anv\u00e4nds fr\u00e5n b\u00f6rjan f\u00f6r att modellera elementen i den h\u00f6g-niv\u00e5 strukturen f\u00f6r spr\u00e5k som ing\u00e5r i 1C:Enterprise, s\u00e5som det inbyggda programmeringsspr\u00e5ket och fr\u00e5gespr\u00e5ket. Den andra produkten \u00e4r mindre k\u00e4nd f\u00f6r allm\u00e4nheten. Det \u00e4r <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, en integrerad milj\u00f6 f\u00f6r design av dom\u00e4nspecifika processorer (application-specific instruction-set processor, ASIP), som anv\u00e4nds b\u00e5de inom det tjeckiska f\u00f6retaget Codasip och av dess kunder, bland vilka <noindex>AMD<\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.avg.com\/\">AVG<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.mobileye.com\/\">Mobileye<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sigmadesigns.com\/\">Sigma Designs<\/a><\/noindex>. Codasip anv\u00e4nder Handly i produktion sedan 2015, med version Handly 0.2. Den senaste versionen av Codasip Studio anv\u00e4nder version 0.5, som sl\u00e4pptes i juni 2016. Ond\u0159ej Il\u010d\u00edk, som leder utvecklingen av IDE p\u00e5 Codasip, \u00e4r i kontakt med projektet och ger viktig feedback fr\u00e5n externa anv\u00e4ndare. Han lyckades till och med hitta lite fritid f\u00f6r att direkt delta i projektutvecklingen genom att implementera ett anv\u00e4ndargr\u00e4nssnitt (ungef\u00e4r 4000 rader kod) f\u00f6r ett av Handly-exemplen, en Java-modell. Mer information <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Framg\u00e5ngshistorier<\/a><\/noindex> f\u00f6r projektet.<\/p>\n<p>Vi hoppas att efter lanseringen av version 1.0 med garanti f\u00f6r API:ets stabilitet och projektets uttr\u00e4de ur inkubationsstaten, kommer Handly f\u00e5 nya anv\u00e4ndare. Tills dess forts\u00e4tter projektet att testa och f\u00f6rb\u00e4ttra API:t, med tv\u00e5 stora versioner som sl\u00e4pps varje \u00e5r \u2013 i juni (samma datum som den samtidiga utgivningen av Eclipse) och december, vilket ger ett f\u00f6ruts\u00e4gbart schema som anv\u00e4ndare kan lita p\u00e5. Dessutom \u00e4r buggrate f\u00f6r projektet stadig och Handly har p\u00e5litligt fungerat i produkterna hos tidiga anv\u00e4ndare sedan de f\u00f6rsta versionerna. F\u00f6r vidare k\u00e4nnedom om Eclipse Handly kan du anv\u00e4nda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Kom ig\u00e5ng-guide<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Arkitektonisk \u00f6versikt<\/a><\/noindex>.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 plattform f\u00f6r 1C:Enterprise-utvecklingsverktyg | ProHoster","description":"Eclipse beh\u00f6ver nog inte v\u00e5r presentation l\u00e4ngre.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}