{"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\/sl\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Verjetno, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> \u017ee dolgo \u010dasa ne potrebuje posebne predstavitve. Mnogi poznajo Eclipse zahvaljujo\u010d orodjem za razvoj Java (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Ta priljubljena odprtokodna Java IDE ve\u010dini razvijalcev asociira z besedo 'Eclipse'. Vendar pa je Eclipse tudi raz\u0161irljiva platforma za integracijo razvojnih orodij (Eclipse Platform) in celoten nabor IDE, ki temeljijo nanjo, vklju\u010dno z JDT. Eclipse je tudi Eclipse Project, projekt najvi\u0161je ravni, ki usklajuje razvoj Eclipse Platform in JDT, ter Eclipse SDK \u2013 dobavljeni rezultat te razvojne poti. Kon\u010dno je Eclipse tudi odprtokodna fundacija z ogromno skupnostjo projektov, ki niso nujno napisani v Javi ali povezanih z razvojnimi orodji (na primer projekti <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). Svet Eclipse je zelo raznolik.<\/p>\n<p>V tem \u010dlanku, ki je po svoji naravi preglednega zna\u010daja, bomo posku\u0161ali obravnavati nekatere osnove arhitekture Eclipse kot platforme za izgradnjo integriranih razvojnih orodij ter dati za\u010detno predstavo o komponentah Eclipse, ki tvorijo temelj tehnolo\u0161ke platforme za 'novi Konfigurator' 1C: Podjetje, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">1C:Orodja za razvoj podjetij<\/a><\/noindex>. Seveda bo to razmi\u0161ljanje neizbe\u017eno povr\u0161insko in precej omejeno, tudi zato, ker se ne osredoto\u010damo le na razvijalce Eclipse kot ciljno publiko. Kljub temu upamo, da bodo tudi izku\u0161eni razvijalci Eclipse na\u0161li v \u010dlanku zanimive informacije. Na primer, povedali bomo o enem izmed 'skrivnosti Eclipse', v zvezi s sorazmerno novim in \u0161e slabo znanim projektom <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, ki ga je ustanovila in podpira podjetje 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 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>Uvod v arhitekturo Eclipse<\/h2>\n<p>\nNa za\u010detku si oglejmo nekatere splo\u0161ne vidike arhitekture Eclipse na primeru <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java development tools<\/a><\/noindex> (JDT). Izbira prav JDT kot primera ni naklju\u010dna. To je prva integrirana razvojna okolica, ki se je pojavila v Eclipse. Ostali *DT projekti Eclipse, kot je Eclipse C\/C++ Development Tooling (CDT), so bili ustvarjeni kasneje in so prevzeli tako osnovne arhitekturne principe kot posamezne dele izvirne kode iz JDT. Osnove arhitekture, ki so bile zasnovane v JDT, so \u0161e danes relevantne za skoraj vsak IDE, zgrajen na podlagi Eclipse Platform, vklju\u010dno z orodji za razvoj 1C:Podjetje.<\/p>\n<p>Prvo je potrebno napomenuti da Eclipse karakteri\u0161e dovoljno jasno arhitektonsko razdvajanje, s odvojenom funkcionalno\u0161\u0107u nezavisnom od jezika od funkcionalnosti namenjene podr\u0161ci specifi\u010dnim programskim jezicima, kao i odvojenjem UI-nezavisnih 'jezgrenih' (core) komponenti od komponenti vezanih za podr\u0161ku korisni\u010dkom interfejsu.<\/p>\n<p>Tako Eclipse Platform defini\u0161e zajedni\u010dku, jeziku nezavisnu infrastrukturu, dok Java development tools dodaju Eclipse-u punu funkcionalnost Java IDE-a. Kako Eclipse Platform, tako i JDT se sastoji od vi\u0161e komponenti, od kojih se svaka odnosi na ili UI-nezavisno 'jezgro', ili na UI sloj (sl. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Sl. 1. Eclipse Platform i JDT<\/b><\/p>\n<p>Nabrajamo osnovne komponente Eclipse Platform:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Defini\u0161e infrastrukturu modula. Eclipse se odlikuje modularnom arhitekturom. U su\u0161tini, Eclipse je kolekcija 'ta\u010daka pro\u0161irenja' i 'pro\u0161irenja'.<\/li>\n<li><b>Workspace<\/b> \u2014 Upravljaju jednim ili vi\u0161e projekata. Projekat se sastoji od foldera i datoteka koje su direktno prikazane u datote\u010dnom sistemu.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Pru\u017ea osnovne elemente korisni\u010dkog interfejsa, integrisane sa operativnim sistemom.<\/li>\n<li><b>JFace<\/b> \u2014 Pru\u017ea niz UI frejmova koji su izgra\u0111eni na SWT-u.<\/li>\n<li><b>Delovni prostor<\/b> \u2014 Defini\u0161e UI paradigmu Eclipse-a: editori, prikazi, perspektive.<\/li>\n<\/ul>\n<p>\nTreba napomenuti da Eclipse Platform pru\u017ea i mnoge druge korisne komponente za izgradnju integrisanih razvojnih alata, me\u0111u kojima se mogu pomenuti Debug, Compare, Search i Team. Pojedina\u010dno se mora spomenuti i JFace Text \u2013 osnova za izgradnju 'pametanih editora' izvornih kodova. Na\u017ealost, \u010dak ni povr\u0161inski pregled ovih komponenti, kao i komponenti UI sloja, nije mogu\u0107e obraditi u okviru ovog \u010dlanka, stoga \u0107emo se u preostalom delu ovog poglavlja ograni\u010diti na pregled osnovnih 'jezgrenih' komponenti Eclipse Platform i JDT.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nInfrastruktura modula Eclipse zasniva se na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi.<\/a><\/noindex> i obezbe\u0111uje ga projekat <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Svaki modul Eclipse-a je OSGi-bundl. OSGi specifikacija defini\u0161e, izme\u0111u ostalog, mehanizme verzioniranja i re\u0161avanja zavisnosti. Pored ovih standardnih mehanizama, Equinox uvodi pojam <i>ta\u010dke pro\u0161irenja<\/i>. Vsaka vti\u010dnica lahko dolo\u010di svoje to\u010dke raz\u0161iritve in doda dodatno funkcionalnost v sistem (\u00abraz\u0161iritve\u00bb), s pomo\u010djo to\u010dk raz\u0161iritve, ki jih dolo\u010dajo ta ali drugi vti\u010dniki. Podrobnej\u0161i opis mehanizmov OSGi in Equinox presega obseg tega \u010dlanka. Omeniti velja, da je modularizacija v Eclipse popolna (vsaka podsistem, vklju\u010dno z Runtime, je sestavljena iz enega ali ve\u010d vti\u010dnikov), in skoraj vse v Eclipse je raz\u0161iritev. Ti principi so bili vklju\u010deni v arhitekturo Eclipse \u0161e dolgo pred uvedbo OSGi (takrat je bila uporabljena lastni\u0161ka tehnologija, ki je bila po mnogo\u010dem podobna OSGi).<\/p>\n<h4>Osrednji delovni prostor<\/h4>\n<p>\nSkoraj vsak integrirani razvojni okolje, zgrajeno na osnovi Eclipse Platform, deluje z Eclipse delovnim prostorom. Prav delovni prostor obi\u010dajno vsebuje izvorno kodo aplikacije, ki se razvija v IDE. Delovni prostor se neposredno prikazuje na datote\u010dni sistem in je sestavljen iz projektov, ki vsebujejo mape in datoteke. Ti projekti, mape in datoteke se imenujejo <i>viri<\/i> delovni prostor. Izvedba delovnega prostora v Eclipse slu\u017ei kot nekak\u0161na predpomnilnik v odnosu na datote\u010dni sistem, kar omogo\u010da znatno pospe\u0161itev prehoda po drevesu virov. Poleg tega delovni prostor nudi vrsto dodatnih storitev, vklju\u010dno z <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">mehanizmom obve\u0161\u010danja o spremembah virov<\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">infrastrukturo inkrementalnih graditeljev<\/a><\/noindex>.<\/p>\n<p>Za vzdr\u017eevanje delovnega prostora in njegovih virov je odgovorna komponenta Core Resources (vti\u010dnik org.eclipse.core.resources). Ta komponenta predvsem nudi programski dostop do delovnega prostora v obliki <i>modela virov<\/i>. Za u\u010dinkovito delo s tem modelom potrebujejo stranke preprost na\u010din za predstavitev sklice na vir. Pri tem bi bilo za\u017eeleno skriti objekt, ki neposredno hrani stanje vira v modelu, pred dostopom stranke. V nasprotnem primeru, na primer, ob brisanju datoteke, bi stranka \u0161e naprej lahko imela objekt, ki ga v modelu \u017ee ni, kar vodi do te\u017eav. Eclipse re\u0161uje to nalogo s tako imenovanim <i>handle<\/i> vira. Handle deluje kot klju\u010d (pozna le pot do vira v delovnem prostoru) in v celoti nadzira dostop do notranjega objekta modela, ki neposredno hrani informacije o stanju vira. Ta zasnova je razli\u010dica vzorca <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>Slika 2 ilustruje idiom Handle\/Body u kontekstu modela resursa. Interfejs IResource predstavlja handle resursa i deluje kao API, dok klasa Resource implementira ovaj interfejs, zajedno sa klasom ResourceInfo koja predstavlja body, koja nije API. Va\u017eno je napomenuti da handle zna samo putanju do resursa u odnosu na koren workspace-a i ne sadr\u017ei referencu na resource info. Objekti resource info formiraju takozvano \"drvo elemenata\" (element tree). Ova struktura podataka je potpuno materializovana u memoriji. Da bismo prona\u0161li instancu resource info koja odgovara odre\u0111enom handle-u, element tree se pretra\u017euje prema putanji koja se \u010duva u tom handle-u.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Slika 2. IResource i ResourceInfo<\/b><\/p>\n<p>Kao \u0161to \u0107emo dalje videti, osnovni dizajn modela resursa (mo\u017ee se nazvati dizajnom zasnovanim na handle-u) koristi se u Eclipse-u i za druge modele. A sada \u0107emo navesti neka od karakteristi\u010dnih svojstava ovog dizajna:<\/p>\n<ul>\n<li>Handle je objekat-vrednost (value object). Objekti-vrednosti su nemutable (immutable) objekti, \u010dija jednakost nije zasnovana na identitetu. Ovi objekti mogu se sigurno koristiti kao klju\u010devi u he\u0161iranim kontejnerima. Vi\u0161e instanci handle-a mo\u017ee se referencirati na isti resurs. Da bi ih uporedili, koristi se metoda equals(Object).<\/li>\n<li>Handle defini\u0161e pona\u0161anje resursa, ali ne sadr\u017ei informacije o stanju resursa (jedini podaci koje \u010duva su \"klju\u010d\", put do resursa).<\/li>\n<li>Handle mo\u017ee referencirati nepostoje\u0107i resurs (ili resurs koji jo\u0161 nije kreiran, ili resurs koji je ve\u0107 obrisan). Postojanje resursa mo\u017ee se proveriti metodom IResource.exists().<\/li>\n<li>Neke operacije mogu se realizovati isklju\u010divo na osnovu informacija koje se \u010duvaju u samom handle-u (takozvane handle-only operacije). Primeri uklju\u010duju IResource.getParent(), getFullPath(), itd. Resurs ne mora nu\u017eno postojati za uspe\u0161no izvr\u0161enje takve operacije. Operacije za koje je potrebno da resurs postoji za uspe\u0161no izvr\u0161enje bacaju izuzetak (CoreException) ako resurs ne postoji.<\/li>\n<\/ul>\n<p>\nEclipse nudi u\u010dinkovit mehanizam obave\u0161tavanja o promenama resursa radnog prostora (sl. 3). Resursi se mogu menjati kako kao rezultat radnji u samoj Eclipse IDE, tako i kao rezultat sinhronizacije sa datote\u010dkim sistemom. U oba slu\u010daja klijentima koji su se pretplatili na obave\u0161tenja pru\u017eaju se detaljne informacije o promenama u obliku \u00abresursnih delta\u00bb (resource delta). Delta opisuje promene izme\u0111u dva stanja (pod-)stabla resursa radnog prostora i sama je stablo, pri \u010demu svaki \u010dvor opisuje promenu odre\u0111enog resursa i sadr\u017ei listu delta slede\u0107eg nivoa, koja opisuje promene podre\u0111enih resursa.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/8af412412ee97d205137ab70c8444a50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Sl. 3. IResourceChangeEvent i IResourceDelta<\/b><\/p>\n<p>Osnovane na resursnim delta, mehanizam obave\u0161tavanja ima slede\u0107e karakteristike:<\/p>\n<ul>\n<li>Jedna promena i vi\u0161e promena opisane su pomo\u0107u iste strukture, jer se delta gradi prema principu rekurzivne kompozicije. Klijenti-pretplatnici mogu obraditi obave\u0161tenja o promenama resursa pomo\u0107u rekurzivnog spu\u0161tanja po stablu delta.<\/li>\n<li>Delta sadr\u017ei potpunu informaciju o promeni resursa, uklju\u010duju\u0107i njegovo premje\u0161tanje i\/ili promenu povezanih \u00abmarkera\u00bb (npr. gre\u0161ke u kompajliranju predstavljaju se kao markeri).<\/li>\n<li>Budu\u0107i da se veze na resurs prave kroz handle, delta mo\u017ee prirodno upu\u0107ivati na udaljeni resurs.<\/li>\n<\/ul>\n<p>\nKao \u0161to \u0107emo uskoro videti, osnovni sastavni delovi dizajna mehanizma obave\u0161tavanja o promeni modela resursa relevantni su i za druge modele zasnovane na handle.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nModel resursa Eclipse radnog prostora je temeljni model nezavistan od jezika. JDT Core komponenta (plugin org.eclipse.jdt.core) pru\u017ea API za navigaciju i analizu strukture radnog prostora sa stanovi\u0161ta Jave, poznatu kao \u00abmodel Jave\u00bb (<i>Java model<\/i>). Ovaj API je definisan u terminima Java elemenata, za razliku od ni\u017eerazine API-ja modela resursa, koji je definisan u terminima mapa i datoteka. Osnovni interfejsi stabla Java elemenata prikazani su na sl. 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Sl. 4. Elementi modela Jave<\/b><\/p>\n<p>Java model uses the same handle\/body idiom as the resource model (see Fig. 5). IJavaElement is the handle, and JavaElementInfo serves as the body. The IJavaElement interface defines a protocol that is common to all Java elements. Some of its methods are handle-only: getElementName(), getParent(), etc. The JavaElementInfo object stores the state of the corresponding element: its structure and attributes.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 5. IJavaElement and JavaElementInfo<\/b><\/p>\n<p>The Java model has some differences in the implementation of the basic handle\/body design compared to the resource model. As noted above, in the resource model, the element tree, whose nodes are resource info objects, is fully kept in memory. However, in the Java model, there can be significantly more elements than in the resource tree, as it also represents the internal structure of .java and .class files: types, fields, and methods.<\/p>\n<p>To avoid fully materializing the entire element tree in memory, the Java model implementation uses a size-limited LRU cache for element info, where the key is the handle IJavaElement. Element info objects are created on demand as navigation through the element tree occurs. The least frequently used elements are evicted from the cache, keeping the memory consumption of the model limited to the specified cache size. This is another advantage of the handle-based design, which completely hides such implementation details from client code.<\/p>\n<p>The notification mechanism for changes in Java elements is generally similar to the resource workspace change tracking mechanism discussed above. A client wanting to track changes in the Java model subscribes to notifications, which are presented as an ElementChangedEvent object that contains IJavaElementDelta (see Fig. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 6. ElementChangedEvent and IJavaElementDelta<\/b><\/p>\n<p>The Java model does not contain information about method bodies or name resolution, so for detailed analysis of Java code, JDT Core provides an additional (not handle-based) model: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">abstraktno sintakti\u010dno drevo<\/a><\/noindex> (abstract syntax tree, AST). The AST represents the result of parsing the source text. The nodes of the AST correspond to elements of the structure of the source module (declarations, operators, expressions, etc.) and contain information about the coordinates of the corresponding element in the source text, and optionally, information about name resolution in the form of references to so-called <i>veze<\/i>Bindings so objekti, ki predstavljajo poimenovane entitete, kot so tipi, metode in spremenljivke, znane prevajalniku. V nasprotju z vozli\u0161\u010di AST, ki tvorijo drevo, bindings podpirajo medsebojne povezave in na splo\u0161no tvorijo graf. Abstraktni razred ASTNode je skupni osnovni razred za vsa vozli\u0161\u010da AST. Podrazredi ASTNode ustrezajo dolo\u010denim sintakti\u010dnim konstrukcijam programskega jezika Java.<\/p>\n<p>Ker sintakti\u010dna drevesa lahko porabijo znatno koli\u010dino pomnilnika, JDT predpomni le eno AST za aktivni urejevalnik. V nasprotju z Java modelom se AST obi\u010dajno obravnava kot 'vmesni', '\u010dasovni' model, na katerega stranke ne bi smele obdr\u017eati povezav zunaj konteksta operacije, ki je povzro\u010dila ustvarjanje AST.<\/p>\n<p>Na\u0161tete tri modele (Java model, AST, bindings) skupaj predstavljajo osnovo za gradnjo 'inteligentnih razvojnih orodij' v JDT, med katerimi je mo\u010dan Java urejevalnik z razli\u010dnimi 'pomo\u010dniki', razli\u010dne akcije za obdelavo izvorne kode (med katerimi so organizacija seznama uvoza imen in formatiranje v skladu z nastavljeno stilom), orodja za iskanje in preoblikovanje. Pri tem ima Java model posebno vlogo, saj se uporablja kot osnova za vizualno predstavitev strukture razvijane aplikacije (npr. v Package Explorer, Outline, Search, Call Hierarchy in Type Hierarchy).<\/p>\n<h2>Komponente Eclipse, uporabljene v 1C:Enterprise Developments Tools<\/h2>\n<p>\nNa sl. 7 so prikazane komponente Eclipse, ki tvorijo temelj tehnolo\u0161ke platforme za 1C:Enterprise Development Tools.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Sl. 7. Eclipse kot platforma za 1C:Enterprise Development Tools<\/b><\/p>\n<p><b>Eclipse Platform<\/b> nudi osnovno infrastrukturo. Nekatere vidike te infrastrukture smo obravnavali v prej\u0161njem razdelku.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Eclipse Modeling Framework<\/a><\/noindex><\/b> (<b>EMF<\/b>) zagotavlja splo\u0161na orodja za modeliranje strukturiranih podatkov. EMF je vgrajen v Eclipse Platformo, a se lahko uporablja tudi samostojno, v obi\u010dajnih Java aplikacijah. Pogosto so za\u010detniki Eclipse razvijalci \u017ee dobro seznanjeni z EMF, \u010deprav \u0161e niso popolnoma obvladali natan\u010dnosti Eclipse Platforme. Eden od razlogov za to zaslu\u017eeno priljubljenost je univerzalna zasnova, ki vklju\u010duje tudi poenoten API meta-nivoja, ki omogo\u010da splo\u0161no delo z vsakim EMF modelom. Osnovne implementacije EMF za modele objektov in podsystem za generacijo kode modela po meta-modelu bistveno pove\u010dujejo hitrost razvoja in zmanj\u0161ujejo \u0161tevilo napak. EMF prav tako vsebuje mehanizme za serializacijo modelov, sledenje spremembam v modelu in \u0161e ve\u010d. <\/p>\n<p>Kot vsako resni\u010dno univerzalno orodje, EMF ustreza \u0161irokemu spektru nalog, povezanih z modeliranjem, vendar nekateri razredi modelov (na primer obravnavani zgoraj modeli, ki temeljijo na ro\u010dajih) morda potrebujejo bolj specializirana orodja za modeliranje. Govoriti o EMF je neprijetno delo, zlasti v omejenih okvirih enega \u010dlanka, saj je to tematika, ki zahteva lo\u010deno knjigo, in to kar debelo. Omeniti velja, da je kakovostni sistem generalizacij, ki je osnova EMF, omogo\u010dil pojav celotnega spektra projektov, posve\u010denih modeliranju, ki so vklju\u010deni v projekt vi\u0161jega nivoja. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Eclipse Modeling<\/a><\/noindex> poleg samega EMF. Eden od takih projektov je Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> zagotavlja infrastrukturo 'besedilnega modeliranja'. Xtext uporablja <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 EMF \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e ASG (abstract semantic graph, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 AST \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a), \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0430\u043a\u0436\u0435 \u00ab\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e\u00bb. \u0413\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Xtext \u044f\u0437\u044b\u043a\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 Xtext. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0434\u043b\u044f ANTLR, \u043d\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 AST (\u0442.\u0435. Xtext \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043f\u0430\u0440\u0441\u0435\u0440, \u0438 \u0430\u043d\u043f\u0430\u0440\u0441\u0435\u0440), \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u044f\u0437\u044b\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 Xtext, \u043c\u0435\u043d\u0435\u0435 \u0433\u0438\u0431\u043e\u043a \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e, \u0441\u043a\u0430\u0436\u0435\u043c, \u0441 \u044f\u0437\u044b\u043a\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0432 ANTLR. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u00ab\u043f\u043e\u0434\u0433\u0438\u0431\u0430\u0442\u044c\u00bb \u043f\u043e\u0434 Xtext \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0439 \u044f\u0437\u044b\u043a, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0435\u0441\u043b\u0438 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u0441 \u043d\u0443\u043b\u044f \u044f\u0437\u044b\u043a\u0435, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u043e\u0432 \u0441 \u0443\u0436\u0435 \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0438\u043c\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u044d\u0442\u043e, Xtext \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0440\u0435\u043b\u044b\u043c, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u043d\u044b\u043c \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432 Eclipse \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u043d\u0438\u0445. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. <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\">\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432<\/a><\/noindex> (domain-specific language, DSL). \u041a\u0440\u043e\u043c\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u00ab\u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u044f\u0434\u0440\u0430\u00bb \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 ANTLR \u0438 EMF, Xtext \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f, \u00ab\u0443\u043c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u00bb \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435, \u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041a\u0430\u043a \u0438 EMF, Xtext \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c, \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u0438, \u0438 \u043c\u044b \u0432\u0440\u044f\u0434 \u043b\u0438 \u0441\u043c\u043e\u0436\u0435\u043c \u0434\u0430\u0436\u0435 \u0431\u0435\u0433\u043b\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445.<\/p>\n<p>1\u0421:Enterprise Development Tools \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0430\u043a EMF, \u0442\u0430\u043a \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 Eclipse Modeling. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, Xtext \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435, \u043a\u0430\u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u044f\u0437\u044b\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0414\u0440\u0443\u0433\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u044d\u0442\u0438\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442 Eclipse Handly, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e (\u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Eclipse \u043e\u043d \u043f\u043e\u043a\u0430 \u043d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, podprojekt visokog nivoa Eclipse Technology, nastao je kao rezultat inicijalne doprinose koda Eclipse Foundation, kojeg je izvr\u0161ila kompanija 1C 2014. godine. Od tada, kompanija 1C nastavlja da podr\u017eava razvoj projekta: komitenti Handly su zaposleni u firmi. Projekat je mali, ali zauzima dovoljno jedinstvenu ni\u0161u u Eclipse-u: njegova glavna svrha je podr\u0161ka razvoju modela zasnovanih na handle-u.<\/p>\n<p>Osnovni arhitektonski principi modela zasnovanih na handle-u, kao \u0161to su idiom handle\/body, razmatrani su ranije na primeru modela resursa i Java modela. Tako\u0111e je napomenuto da su i model resursa i model Java va\u017eni temelji za Eclipse Java development tools (JDT). S obzirom na to da gotovo svi *DT projekti Eclipse imaju arhitekturu sli\u010dnu JDT-u, ne bi bilo preterano re\u0107i da modeli zasnovani na handle-u le\u017ee u osnovi mnogih, ako ne i svih IDE-ova izgra\u0111enih na Eclipse Platformi. Na primer, u Eclipse C\/C++ Development Tooling (CDT) postoji model C\/C++ zasnovan na handle-u, koji u arhitekturi CDT igra istu ulogu koju ima Java model u JDT-u.<\/p>\n<p>Pre nego \u0161to je Handly nastao, Eclipse nije nudio specijalizovane biblioteke za izgradnju jezika zasnovanih na handle-u. Postoje\u0107i modeli su mahom kreirani direktnom adaptacijom koda Java modela (t. j. copy\/paste), <i>u slu\u010dajevima kada to omogu\u0107ava<\/i> Eclipse Public License (EPL). (Jasno je da, recimo, za projekte same Eclipse to obi\u010dno nije pravni problem, \u0161to se ne mo\u017ee re\u0107i za proizvode sa zatvorenim izvorom.) Pored karakteristi\u010dne nekonzistentnosti, takva metodologija dovodi do dobro poznatih problema: dupliciranja koda, gre\u0161aka unetih prilikom adaptacije, itd. \u0160to je jo\u0161 gore, rezultantni modeli ostaju \u201estvar za sebe\u201c i ne koriste postoje\u0107i potencijal za unifikaciju. A izdvajanje zajedni\u010dkih pojmova i protokola za modele jezika zasnovane na handle-u moglo bi dovesti do stvaranja ponovo upotrebljivih komponenti za rad s njima, sli\u010dno onome \u0161to se dogodilo sa EMF-om.<\/p>\n<p>Ne mo\u017ee se re\u0107i da u Eclipse-u nije postojalo razumevanje ovih problema. Ve\u0107 2005. godine <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, sa\u017eimaju\u0107i iskustvo razvoja prototipa CDT-a, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">argumentovao je<\/a><\/noindex> potreba ustvarjanja skupne infrastrukture za jezikovne modele, vklju\u010dno z modeli, temelje\u010dimi na ro\u010dicah. Vendar pa, kot to pogosto biva, zaradi prioritetnej\u0161ih nalog do realizacije teh idej nato nikoli ni pri\u0161lo. Medtem pa ostaja faktorizacija kode *DT-projektov \u0161e vedno ena izmed premalo obdelanih tem v Eclipse.<\/p>\n<p>V nekem smislu je projekt Handly namenjen re\u0161evanju pribli\u017eno istih nalog kot EMF, vendar za modele, temelje\u010dih na ro\u010dicah, predvsem jezikovnih (tj. predstavljajo elemente strukture dolo\u010denega programskega jezika). Spodaj so navedeni glavni cilji, ki so bili postavljeni pri na\u010drtovanju Handly:<\/p>\n<ul>\n<li>Izlo\u010ditev osnovnih abstrakcij predmetne podro\u010dja.<\/li>\n<li>Zmanj\u0161anje prizadevanj in pove\u010danje kakovosti izvajanja jezikovnih modelov, temelje\u010dih na ro\u010dicah, z omogo\u010danjem ponovne uporabe kode.<\/li>\n<li>Nudenje poenotene API meta-nivoja k rezultantnim modelom, kar omogo\u010da ustvarjanje skupnih komponent IDE, ki delujejo z jezikovnimi modeli, temelje\u010dimi na ro\u010dicah.<\/li>\n<li>Prilagodljivost in skalabilnost.<\/li>\n<li>Integracija z Xtext (v lo\u010denem sloju).<\/li>\n<\/ul>\n<p>\nZa izlo\u010ditev skupnih pojmov in protokolov so bile analizirane obstoje\u010de realizacije jezikovnih modelov, temelje\u010dih na ro\u010dicah. Glavni vmesniki in osnovne realizacije, ki jih nudi Handly, so prikazane na sl. 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Sl. 8. Skupni vmesniki in osnovne realizacije elementov Handly<\/b><\/p>\n<p>Vmesnik IElement predstavlja ro\u010dico elementa in je skupen za elemente vseh modelov, temelje\u010dih na Handly. Abstraktna klasa Element implementira poenoteni mehanizem ro\u010dica\/telo (sl. 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Sl. 9. IElement in poenotena realizacija ro\u010dica\/telo<\/b><\/p>\n<p>Poleg tega Handly nudi poenoten mehanizem obve\u0161\u010danja o spremembi elementov modela (sl. 10). Kot je razvidno, je v splo\u0161nem podoben mehanizmom obve\u0161\u010danja, implementiranim v modelu virov in Java-modelu, ter uporablja IElementDelta za poenoteno predstavitev informacij o spremembi elementa.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Sl. 10. Skupni vmesniki in osnovne realizacije mehanizma obve\u0161\u010danja Handly<\/b><\/p>\n<p>Obravnavani del Handly (sl. 9 in 10) se lahko uporablja za predstavitev prakti\u010dno vseh modelov, temelje\u010dih na ro\u010dicah. Za ustvarjanje <i>jezikovnih<\/i> modelov projekt ponuja dodatne funkcionalnosti \u2013 zlasti skupne vmesnike in osnovne realizacije za elemente strukture izvornega besedila, tako imenovane <i>izvorne elemente<\/i> (sl. 8). Vmesnik ISourceFile predstavlja izvorno datoteko, medtem ko ISourceConstruct predstavlja element znotraj izvorne datoteke. Abstraktni razredi SourceFile in SourceConstruct implementirajo splo\u0161ne mehanizme za podporo delu z izvorno datoteko in njenimi elementi, kot so upravljanje s tekstovnimi bufferji, povezovanje z koordinatami elementa v izvoru ter usklajevanje modela s trenutnim vsebinskim bufferjem delovne kopije itd. Izvajanje teh mehanizmov je obi\u010dajno dovolj zapletena naloga, Handly pa lahko znatno skraj\u0161a napore pri razvoju jezikovnih modelov, temelje\u010dih na upravljanju, s kvalitativnimi osnovnimi implementacijami.<\/p>\n<p>Poleg zgoraj na\u0161tetih osnovnih mehanizmov Handly nudi infrastrukturo za tekstovne bufferje in \"posnetke\" (snapshots), podporo za integracijo z urejevalniki izvorne kode (vklju\u010dno z \u017ee implementirano \"iz \u0161katle\" integracijo z urejevalnikom Xtext), ter nekatere splo\u0161ne UI-komponente, ki delujejo z modeli, temelje\u010dimi na Handly, kot je okvir za outline. Da bi prikazali svoje zmo\u017enosti, projekt nudi ve\u010d primerov, vklju\u010dno z implementacijo modela Java na Handly. (V primerjavi s popolno implementacijo Java-modela v JDT je ta model namenoma nekoliko poenostavljen za ve\u010djo preglednost.)<\/p>\n<p>Kot je bilo \u017ee omenjeno, je bila pri za\u010detnem oblikovanju Handly in nadaljnjem razvoju posve\u010dena in se \u0161e naprej posve\u010da resna pozornost skalabilnosti in prilagodljivosti. <\/p>\n<p>Na splo\u0161no se modeli, temelje\u010di na upravljanju, dobro skalirajo \"po oblikovanju\". Na primer, idiom handle\/body omogo\u010da omejitev koli\u010dine pomnilnika, ki ga model porabi. Vendar pa obstajajo tudi posebnosti. Tako je pri testiranju Handly za skalabilnost bila odkrita te\u017eava v implementaciji mehanizma obve\u0161\u010danja \u2013 pri spreminjanju velikega \u0161tevila elementov je gradnja deltat vzela preve\u010d \u010dasa. Izkazalo se je, da je ista te\u017eava prisotna tudi v Java-modelu JDT, iz katerega je bil takrat prilagojen ustrezen koda. Popravili smo napako v Handly in pripravili podoben popravek za JDT, ki je bil s strani prejet s hvale\u017enostjo. To je le en primer, ko bi uvedba Handly v obstoje\u010de implementacije modelov lahko bila potencialno koristna, saj bi v tem primeru to napako lahko popravili na enem mestu.<\/p>\n<p>Da bi se implementacija Handly u postoje\u0107e modele u\u010dinila tehni\u010dki mogu\u0107om, biblioteka mora imati zna\u010dajnu fleksibilnost. Glavni problem je o\u010duvanje unazadne kompatibilnosti API-ja modela. Ovaj problem je re\u0161en <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> jasnim odvajanje specifi\u010dnog API-ja modela, kojeg defini\u0161e i u potpunosti kontroli\u0161e programer, od ujedna\u010denog API-ja meta-nivoa, koji obezbe\u0111uje biblioteka. To ne samo da \u010dini tehni\u010dku implementaciju Handly mogu\u0107om u postoje\u0107im modelima, ve\u0107 tako\u0111e daje programeru novog modela zna\u010dajnu slobodu u dizajnu API-ja.<\/p>\n<p>Fleksibilnost ima i druge aspekte. Na primer, Handly gotovo da ne name\u0107e ograni\u010denja na strukturu modela i mo\u017ee se koristiti za modelovanje jezika op\u0161te namene, kao i jezika specijalizovanih za odre\u0111ene domene. Prilikom izrade strukture izvornog fajla, Handly ne propisuje odre\u0111eni oblik prikaza AST-a i u principu ne zahteva \u010dak ni postojanje AST-a, \u010dime se osigurava kompatibilnost s prakti\u010dno svim mehanizmima sintakti\u010dke analize. Na kraju, Handly podr\u017eava potpunu integraciju s Eclipse radnim prostorom, ali tako\u0111e mo\u017ee raditi i direktno s sistemima datoteka, zahvaljuju\u0107i integraciji s <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>Trenutna verzija <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> objavljena je u decembru 2016. godine. Iako je projekat trenutno u fazi inkubacije i API jo\u0161 nije kona\u010dno utvr\u0111en, Handly se ve\u0107 koristi u dva zna\u010dajna komercijalna proizvoda koja su rizikovala da postanu 'rani usvaja\u010di', i, treba re\u0107i, za sada se ne \u017eale zbog toga.<\/p>\n<p>Kao \u0161to je ranije napomenuto, jedan od tih proizvoda je 1C:Enterprise Development Tools, gde se Handly od samog po\u010detka koristi za modelovanje elemenata visoko-nivoe strukture jezika kao \u0161to su ugra\u0111eni programski jezik i jezik upita. Drugi proizvod je manje poznat \u0161iroj javnosti. To je <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, integrisano okru\u017eenje za projektovanje procesora specifi\u010dnih za odre\u0111ene aplikacije (application-specific instruction-set processor, ASIP), koje se koristi kako unutar same \u010de\u0161ke kompanije Codasip, tako i od strane njenih klijenata, me\u0111u kojima su <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 uporablja Handly v produkciji od leta 2015, za\u010delo se je z razli\u010dico Handly 0.2. Zadnja na voljo razli\u010dica Codasip Studio uporablja razli\u010dico 0.5, izdano junija 2016. Ond\u0159ej Il\u010d\u00edk, ki vodi razvoj IDE pri Codasipu, ostaja v stiku s projektom in zagotavlja izjemno pomembne povratne informacije s strani \"zunanjega adoperatorja\". Uspe\u0161no je na\u0161el malo prostega \u010dasa, da se osebno vklju\u010di v razvoj projekta in implementira UI plast (~ 4000 vrstic kode) za enega od primerov Handly, model Java. Ve\u010d informacij <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Zgodbe o uspehu<\/a><\/noindex> projekta.<\/p>\n<p>Upamo, da bo po izdaji razli\u010dice 1.0, ki bo zagotavljala stabilnost API, in zaklju\u010denju inkubacijskega obdobja, Handly pridobil nove adoperatorje. Projekt \u0161e naprej poteka in se dodatno razvija API ter izda dve \"veliki\" razli\u010dici letno \u2013 junija (na isti datum, ko izide Eclipse) in decembra, kar zagotavlja predvidljiv urnik, na katerega se lahko adoperatorji zanesete. Mogo\u010de je \u0161e dodati, da se \"stopnja napak\" pri projektu ohranja na stabilno nizki ravni, Handly pa od prvih razli\u010dic zanesljivo deluje v izdelkih zgodnjih adoperatorjev. Za nadaljnje spoznavanje Eclipse Handly lahko uporabite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Vadnica za za\u010detek<\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Arhitekturni pregled<\/a><\/noindex>.<br \/>\n<br \/>Izvor: <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\/sl\/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=\"sl_SI\" \/>\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\/sl\/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 kot tehnolo\u0161ka platforma za 1C:Enterprise Development Tools | ProHoster","description":"Verjetno Eclipse \u017ee dolgo ne potrebuje posebne predstavitve.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}