{"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\/ro\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Probabil c\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> nu mai are nevoie de o prezentare special\u0103. Mul\u021bi cunosc Eclipse datorit\u0103 Eclipse Java development tools (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Aceast\u0103 popular\u0103 IDE open-source de Java este asociat\u0103 de majoritatea dezvoltatorilor cu cuv\u00e2ntul \u201eEclipse\u201d. Totu\u0219i, Eclipse este \u0219i o platform\u0103 extensibil\u0103 pentru integrarea instrumentelor de dezvoltare (Eclipse Platform), precum \u0219i o \u00eentreag\u0103 serie de IDE-uri construite pe baza acesteia, inclusiv JDT. Eclipse este \u0219i Eclipse Project, un proiect de \u00eenalt nivel care coordoneaz\u0103 dezvoltarea Eclipse Platform \u0219i JDT, \u0219i Eclipse SDK, rezultatul furnizat al acestei dezvolt\u0103ri. \u00cen cele din urm\u0103, Eclipse este o funda\u021bie open-source cu o comunitate uria\u0219\u0103 de proiecte, dintre care nu toate sunt scrise \u00een Java sau au leg\u0103tur\u0103 cu instrumentele de dezvoltare (de exemplu, proiectele <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). Lumea Eclipse este foarte diversificat\u0103.<\/p>\n<p>\u00cen acest articol, care este de natur\u0103 revizional\u0103, vom \u00eencerca s\u0103 examin\u0103m c\u00e2teva aspecte fundamentale ale arhitecturii Eclipse ca platform\u0103 pentru construirea de instrumente de dezvoltare integrate \u0219i s\u0103 oferim o prim\u0103 impresie despre componentele Eclipse care constituie funda\u021bia platformei tehnologice pentru \u201enoul Configurator\u201d 1C:Enterprise, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">Uneltele de dezvoltare 1C:Enterprise<\/a><\/noindex>. Desigur, o astfel de examinare va fi inevitabil \u00een mare m\u0103sur\u0103 superficial\u0103 \u0219i destul de limitat\u0103, \u0219i din acest motiv, pentru c\u0103 ne orient\u0103m nu doar la dezvoltatorii Eclipse ca public \u021bint\u0103. Totu\u0219i, sper\u0103m c\u0103 chiar \u0219i dezvoltatorii experimenta\u021bi Eclipse vor putea g\u0103si informa\u021bii interesante \u00een articol. De exemplu, ne vom referi la unul dintre \u201esecretele Eclipse\u201d, un proiect relativ nou \u0219i pu\u021bin cunoscut deocamdat\u0103, <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, care a fost fondat \u0219i sus\u021binut de firma 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 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>Introducere \u00een arhitectura Eclipse<\/h2>\n<p>\nS\u0103 examin\u0103m mai \u00eent\u00e2i c\u00e2teva aspecte generale ale arhitecturii Eclipse pe exemplul <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java development tools<\/a><\/noindex> (JDT). Alegerea exact\u0103 a JDT ca exemplu nu este \u00eent\u00e2mpl\u0103toare. Aceasta este prima mediu integrat de dezvoltare care a ap\u0103rut \u00een Eclipse. Celelalte proiecte *DT ale Eclipse, cum ar fi Eclipse C\/C++ Development Tooling (CDT), au fost create mai t\u00e2rziu \u0219i au \u00eemprumutat at\u00e2t principii arhitecturale de baz\u0103, c\u00e2t \u0219i fragmente specifice de cod surs\u0103 din JDT. Principiile arhitecturale stabilite \u00een JDT sunt actuale \u0219i ast\u0103zi pentru practic orice IDE construit\u0103 pe baza Eclipse Platform, inclusiv pentru 1C:Enterprise Development Tools.<\/p>\n<p>\u00cen primul r\u00e2nd, trebuie men\u021bionat c\u0103 Eclipse are o arhitectur\u0103 clar stratificat\u0103, separ\u00e2nd func\u021bionalitatea independent\u0103 de limb\u0103 de func\u021bionalitatea destinat\u0103 suportului pentru anumite limbaje de programare, precum \u0219i separ\u00e2nd componentele 'de baz\u0103' (core) independente de UI de cele legate de suportul interfe\u021bei utilizator.<\/p>\n<p>Astfel, Eclipse Platform define\u0219te o infrastructur\u0103 general\u0103, independent\u0103 de limb\u0103, iar uneltele de dezvoltare Java adaug\u0103 o IDE Java complet func\u021bional\u0103 la Eclipse. At\u00e2t Eclipse Platform, c\u00e2t \u0219i JDT sunt compuse din mai multe componente, fiecare dintre acestea apar\u021bin\u00e2nd fie \"nucleului\" independent de UI, fie unei straturi UI (Fig. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/230825124962e721ecca7dfb7dee9a0c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 1. Eclipse Platform \u0219i JDT<\/b><\/p>\n<p>S\u0103 enumer\u0103m cele mai importante componente ale Eclipse Platform:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Define\u0219te infrastructura pluginurilor. Eclipse are o arhitectur\u0103 modular\u0103. Practic, Eclipse este o colec\u021bie de \"puncte de extensie\" \u0219i \"extensii\".<\/li>\n<li><b>Workspace<\/b> \u2014 Gestioneaz\u0103 unul sau mai multe proiecte. Un proiect const\u0103 din foldere \u0219i fi\u0219iere, care sunt mapate direct pe sistemul de fi\u0219iere.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Ofer\u0103 elementele de baz\u0103 ale interfe\u021bei utilizator, integrate cu sistemul de operare.<\/li>\n<li><b>JFace<\/b> \u2014 Ofer\u0103 o serie de cadre UI construite pe baza SWT.<\/li>\n<li><b>Workbench<\/b> \u2014 Define\u0219te paradigma UI a Eclipse: editori, vederi, perspective.<\/li>\n<\/ul>\n<p>\nTrebuie spus c\u0103 Eclipse Platform ofer\u0103 \u0219i multe alte componente utile pentru construirea de instrumente integrate de dezvoltare, printre care se num\u0103r\u0103 Debug, Compare, Search \u0219i Team. De asemenea, merit\u0103 men\u021bionat JFace Text \u2013 baza pentru construirea de \"editors inteligen\u021bi\" pentru codul surs\u0103. Din p\u0103cate, nici m\u0103car o privire de ansamblu asupra acestor componente, precum \u0219i a celor din stratul UI nu poate fi f\u0103cut\u0103 \u00een cadrul acestui articol, a\u0219a c\u0103 \u00een restul acestei sec\u021biuni ne vom limita la o prezentare general\u0103 a principalelor componente \"de baz\u0103\" ale Eclipse Platform \u0219i JDT.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nInfrastructura pluginurilor Eclipse se bazeaz\u0103 pe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> \u0219i este furnizat\u0103 de proiectul <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Fiecare plugin Eclipse este un pachet OSGi. Specifica\u021bia OSGi define\u0219te, printre altele, mecanismele de versionare \u0219i rezolvare a dependen\u021belor. Pe l\u00e2ng\u0103 aceste mecanisme standard, Equinox introduce conceptul de <i>punct de extensie<\/i>. Fiecare plugin poate defini propriile sale puncte de extensie, precum \u0219i aduce func\u021bionalitate suplimentar\u0103 \u00een sistem (\u201eextensii\u201d), folosind punctele de extensie definite de acest plugin sau de altele. O descriere detaliat\u0103 a mecanismelor OSGi \u0219i Equinox dep\u0103\u0219e\u0219te scopul acestui articol. Merit\u0103 men\u021bionat c\u0103 modularizarea \u00een Eclipse este total\u0103 (orice subsistem, inclusiv Runtime, const\u0103 dintr-unul sau mai multe pluginuri), \u0219i practic tot ce exist\u0103 \u00een Eclipse este o extensie. Aceste principii au fost integrate \u00een arhitectura Eclipse cu mult \u00eenainte de implementarea OSGi (atunci se folosea o tehnologie proprie, foarte asem\u0103n\u0103toare cu OSGi).<\/p>\n<h4>Spa\u021biul de lucru Core<\/h4>\n<p>\nPractically orice mediu integrat de dezvoltare, construit pe baza platformei Eclipse, lucreaz\u0103 cu spa\u021biul de lucru Eclipse. Anume spa\u021biul de lucru con\u021bine de obicei codul surs\u0103 al aplica\u021biei dezvoltate \u00een IDE. Spa\u021biul de lucru este mapat direct pe sistemul de fi\u0219iere \u0219i const\u0103 din proiecte care con\u021bin foldere \u0219i fi\u0219iere. Aceste proiecte, foldere \u0219i fi\u0219iere sunt numite <i>resurse<\/i> spa\u021biu de lucru. Implementarea spa\u021biului de lucru \u00een Eclipse serve\u0219te ca un fel de cache \u00een raport cu sistemul de fi\u0219iere, ceea ce permite accelerarea semnificativ\u0103 a travers\u0103rii arborelui de resurse. \u00cen plus, spa\u021biul de lucru ofer\u0103 o serie de servicii suplimentare, inclusiv <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">mecanismul de notificare a modific\u0103rilor resurselor<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">infrastructura construirilor incrementale<\/a><\/noindex>.<\/p>\n<p>Componenta Core Resources (pluginul org.eclipse.core.resources) este responsabil\u0103 pentru suportul spa\u021biului de lucru \u0219i al resurselor sale. \u00cen special, aceast\u0103 component\u0103 ofer\u0103 acces programatic la spa\u021biul de lucru sub form\u0103 de <i>model de resurse<\/i>. Pentru o utilizare eficient\u0103 a acestui model, clien\u021bii au nevoie de o modalitate simpl\u0103 de a reprezenta un link c\u0103tre resurs\u0103. \u00cen acest caz, obiectul care stocheaz\u0103 starea resursei \u00een model ar fi de dorit s\u0103 fie ascuns de accesul clientului. \u00cen caz contrar, de exemplu, \u00een cazul \u0219tergerii unui fi\u0219ier, clientul ar putea continua s\u0103 de\u021bin\u0103 un obiect care nu mai exist\u0103 \u00een model, cu problemele derivante. Eclipse rezolv\u0103 aceast\u0103 problem\u0103 folosind a\u0219a-numitul <i>handle<\/i> al resursei. Handle-ul joac\u0103 rolul de cheie (\u0219tie doar calea c\u0103tre resurs\u0103 \u00een spa\u021biul de lucru) \u0219i controleaz\u0103 complet accesul la obiectul intern al modelului, care stocheaz\u0103 direct informa\u021bii despre starea resursei. Acest design este o varia\u021bie a modelului <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>Fig. 2 ilustreaz\u0103 idiomul Handle\/Body aplicat modelului de resurse. Interfa\u021ba IResource reprezint\u0103 handle-ul resursei \u0219i este API-ul, spre deosebire de clasa Resource, care implementeaz\u0103 aceast\u0103 interfa\u021b\u0103, \u0219i clasa ResourceInfo, care reprezint\u0103 body-ul, care nu este API. Subliniem c\u0103 handle-ul cunoa\u0219te doar calea c\u0103tre resurs\u0103 \u00een raport cu r\u0103d\u0103cina workspace-ului \u0219i nu con\u021bine o referin\u021b\u0103 la resource info. Obiectele resource info formeaz\u0103 a\u0219a-numitul \u201earbore de elemente\u201d (element tree). Aceast\u0103 structur\u0103 de date este complet materializat\u0103 \u00een memorie. Pentru a g\u0103si o instan\u021b\u0103 de resource info, care corespunde unui anumit handle, arborele de elemente este traversat conform c\u0103ii stocate \u00een acest handle.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/9d17cd95be3730ab6b5b9e6e3ed71ace.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 2. IResource \u0219i ResourceInfo<\/b><\/p>\n<p>Dup\u0103 cum vom vedea mai departe, designul de baz\u0103 al modelului de resurse (pe care \u00eel putem numi bazat pe handle) este utilizat \u00een Eclipse \u0219i pentru alte modele. \u00centre timp, s\u0103 enumer\u0103m c\u00e2teva propriet\u0103\u021bi distincte ale acestui design:<\/p>\n<ul>\n<li>Handle-ul este un obiect-valoare (value object). Obiectele-valoare sunt obiecte imuabile (immutable), egalitatea acestora nefiind bazat\u0103 pe identitate. Aceste obiecte pot fi utilizate \u00een siguran\u021b\u0103 ca cheie \u00een containerele Hash. Mai multe instan\u021be de handle pot face referire la aceea\u0219i resurs\u0103. Pentru compararea acestora, trebuie folosit metoda equals(Object).<\/li>\n<li>Handle-ul define\u0219te comportamentul resursei, dar nu con\u021bine informa\u021bii despre starea resursei (singurele date pe care le stocheaz\u0103 sunt \u201echeia\u201d, calea c\u0103tre resurs\u0103).<\/li>\n<li>Handle-ul poate face referire la o resurs\u0103 inexistent\u0103 (fie la o resurs\u0103 care nu a fost \u00eenc\u0103 creat\u0103, fie la o resurs\u0103 care a fost deja eliminat\u0103). Existen\u021ba resursei poate fi verificat\u0103 prin metoda IResource.exists().<\/li>\n<li>Anumite opera\u021bii pot fi implementate av\u00e2nd \u00een vedere exclusiv informa\u021biile stocate \u00een handle (a\u0219a-numitele opera\u021bii handle-only). Exemplele includ IResource.getParent(), getFullPath() etc. Resursa nu trebuie s\u0103 existe pentru a finaliza cu succes o astfel de opera\u021bie. Opera\u021biile pentru care este necesar\u0103 existen\u021ba resursei arunc\u0103 o excep\u021bie (CoreException) dac\u0103 resursa nu exist\u0103.<\/li>\n<\/ul>\n<p>\nEclipse ofer\u0103 un mecanism eficient de notificare asupra modific\u0103rilor resurselor workspace (fig. 3). Resursele pot fi modificate at\u00e2t ca urmare a ac\u021biunilor efectuate \u00een cadrul Eclipse IDE, c\u00e2t \u0219i din executarea sincroniz\u0103rii cu sistemul de fi\u0219iere. \u00cen ambele cazuri, clien\u021bii abona\u021bi la notific\u0103ri primesc informa\u021bii detaliate despre modific\u0103ri sub form\u0103 de \u201edelta de resurs\u0103\u201d (resource delta). Delta descrie modific\u0103rile \u00eentre dou\u0103 st\u0103ri ale (sub-)arborelui de resurse din workspace \u0219i este ea \u00eens\u0103\u0219i un arbore, fiecare nod al c\u0103ruia descrie modificarea unei anumite resurse \u0219i con\u021bine o list\u0103 de delta de nivelul urm\u0103tor, descriind modific\u0103rile resurselor fiice.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/8af412412ee97d205137ab70c8444a50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 3. IResourceChangeEvent \u0219i IResourceDelta<\/b><\/p>\n<p>Mecanismul de notificare, bazat pe delta de resurse, are urm\u0103toarele caracteristici:<\/p>\n<ul>\n<li>O singur\u0103 modificare \u0219i multiple modific\u0103ri sunt descrise folosind aceea\u0219i structur\u0103, deoarece delta este construit\u0103 pe principiul compunerii recursive. Clien\u021bii abona\u021bi pot gestiona notific\u0103rile despre modific\u0103rile resurselor printr-o cobor\u00e2re recursiv\u0103 prin arborele delta.<\/li>\n<li>Delta con\u021bine informa\u021bii complete despre modificarea resursei, inclusiv mutarea acesteia \u0219i\/sau modificarea \u201emarkerilor\u201d asocia\u021bi (markerii pot reprezenta, de exemplu, erori de compilare).<\/li>\n<li>Deoarece referin\u021bele la resurs\u0103 sunt realizate prin handle, delta poate face referin\u021be naturale la o resurs\u0103 \u00eendep\u0103rtat\u0103.<\/li>\n<\/ul>\n<p>\nDup\u0103 cum vom vedea \u00een cur\u00e2nd, componentele fundamentale ale designului mecanismului de notificare a modific\u0103rilor modelului de resurse sunt relevante \u0219i pentru alte modele bazate pe handle.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nModelul de resurse Eclipse workspace este un model fundamental independent de limbaj. Componenta JDT Core (pluginul org.eclipse.jdt.core) ofer\u0103 API pentru navigarea \u0219i analiza structurii workspace-ului din perspectiva Java, denumit \u201emodelul Java\u201d (<i>Java model<\/i>). Acest API este definit \u00een termeni de elemente Java, spre deosebire de API-ul de baz\u0103 al modelului de resurse, care este definit \u00een termeni de foldere \u0219i fi\u0219iere. Interfe\u021bele principale ale arborelui de elemente Java sunt ilustrate \u00een fig. 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/67bfd31e93eaa66aa94b30281693a318.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 4. Elementele modelului Java<\/b><\/p>\n<p>Modelul Java utilizeaz\u0103 aceea\u0219i idiom\u0103 handle\/body ca modelul resurselor (fig. 5). IJavaElement este un handle, iar JavaElementInfo joac\u0103 rolul de body. Interfa\u021ba IJavaElement define\u0219te un protocol comun pentru toate elementele Java. Unele dintre metodele sale sunt doar handle: getElementName(), getParent() etc. Obiectul JavaElementInfo p\u0103streaz\u0103 starea elementului corespunz\u0103tor: structura \u0219i atributele sale.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 5. IJavaElement \u0219i JavaElementInfo<\/b><\/p>\n<p>Modelul Java are unele diferen\u021be \u00een implementarea designului de baz\u0103 handle\/body comparativ cu modelul resurselor. A\u0219a cum s-a men\u021bionat mai sus, \u00een modelul resurselor element tree, al c\u0103rei noduri sunt obiectele resource info, este complet p\u0103strat \u00een memorie. Dar \u00een modelul Java poate exista un num\u0103r semnificativ mai mare de elemente dec\u00e2t \u00een pomul resurselor, fiindc\u0103 \u00een el se reprezint\u0103, printre altele, \u0219i structura intern\u0103 a fi\u0219ierelor .java \u0219i .class: tipuri, c\u00e2mpuri \u0219i metode.<\/p>\n<p>Pentru a evita materializarea complet\u0103 a \u00eentregului arbore de elemente \u00een memorie, implementarea modelului Java utilizeaz\u0103 un cache LRU de dimensiune limitat\u0103 pentru element info, unde cheia este handle IJavaElement. Obiectele element info sunt create la cerere pe m\u0103sur\u0103 ce se navigheaz\u0103 prin arborele elementelor. \u00cen acest proces, cele mai pu\u021bin utilizate elemente sunt eliminate din cache, iar consumul de memorie al modelului r\u0103m\u00e2ne limitat la dimensiunea stabilit\u0103 a cache-ului. Aceasta este o alt\u0103 avantaj al designului bazat pe handle, care ascunde complet astfel de detalii de implementare de codul client.<\/p>\n<p>Mecanismul de notificare a modific\u0103rilor elementelor Java este, \u00een linii mari, similar cu mecanismul de urm\u0103rire a modific\u0103rilor resurselor workspace discutat mai sus. Clientul care dore\u0219te s\u0103 urm\u0103reasc\u0103 modific\u0103rile \u00een modelul Java se aboneaz\u0103 la notific\u0103rile care sunt prezentate sub form\u0103 de obiect ElementChangedEvent, care con\u021bine IJavaElementDelta (fig. 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 6. ElementChangedEvent \u0219i IJavaElementDelta<\/b><\/p>\n<p>Modelul Java nu con\u021bine informa\u021bii despre corpul metodelor sau rezolvarea numelui, astfel \u00eenc\u00e2t pentru o analiz\u0103 detaliat\u0103 a codului scris \u00een Java, JDT Core ofer\u0103 un model suplimentar (nu bazat pe handle): <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">arbore sintactic abstract<\/a><\/noindex> (abstract syntax tree, AST). AST reprezint\u0103 rezultatul analizei sintactice a textului surs\u0103. Nodurile AST corespund elementelor structurii modulului surs\u0103 (declar\u0103ri, operatori, expresii etc.) \u0219i con\u021bin informa\u021bii despre coordonatele elementului corespunz\u0103tor \u00een textul surs\u0103, precum \u0219i (op\u021bional) informa\u021bii despre rezolvarea numelui sub form\u0103 de referin\u021be la a\u0219a-numitele. <i>bindings<\/i>. Bindings sunt obiecte care reprezint\u0103 entit\u0103\u021bi denumite, cum ar fi tipuri, metode \u0219i variabile, cunoscute compilatorului. Spre deosebire de nodurile AST, care formeaz\u0103 un arbore, bindings sus\u021bin referin\u021be \u00eencruci\u0219ate \u0219i, \u00een general, formeaz\u0103 un graf. Clasa abstract\u0103 ASTNode este clasa de baz\u0103 comun\u0103 pentru toate nodurile AST. Subclasele ASTNode corespund anumitor construc\u021bii sintactice din limbajul Java.<\/p>\n<p>Deoarece arborii sintactici pot consuma o cantitate semnificativ\u0103 de memorie, JDT cacheaz\u0103 doar un singur AST pentru editorul activ. Spre deosebire de modelul Java, AST este de obicei considerat un model \u201eintermediar\u201d, \u201etemporar\u201d, la care clien\u021bii nu ar trebui s\u0103 men\u021bin\u0103 referin\u021be \u00een afara contextului opera\u021biunii care a dus la crearea AST-ului.<\/p>\n<p>Cele trei modele enumerate (modelul Java, AST, bindings) constituie \u00eempreun\u0103 baza pentru construirea \u201euneltelor inteligente de dezvoltare\u201d \u00een JDT, printre care un editor Java puternic cu diverse \u201easistente\u201d, diverse ac\u021biuni de procesare a codului surs\u0103 (printre care organizarea listei de importuri de denumiri \u0219i formatarea conform stilului configurat), instrumente de c\u0103utare \u0219i refactorizare. Modelul Java joac\u0103 un rol special, deoarece este folosit ca baz\u0103 pentru reprezentarea vizual\u0103 a structurii aplica\u021biei \u00een dezvoltare (de exemplu, \u00een Package Explorer, Outline, Search, Call Hierarchy \u0219i Type Hierarchy).<\/p>\n<h2>Componentele Eclipse utilizate \u00een 1C:Enterprise Developments Tools<\/h2>\n<p>\n\u00cen fig. 7 sunt prezentate componentele Eclipse care formeaz\u0103 funda\u021bia platformei tehnologice pentru 1C:Enterprise Development Tools.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 7. Eclipse ca platform\u0103 pentru 1C:Enterprise Development Tools<\/b><\/p>\n<p><b>Eclipse Platform<\/b> ofer\u0103 infrastructura de baz\u0103. Am examinat c\u00e2teva aspecte ale acestei infrastructuri \u00een sec\u021biunea anterioar\u0103.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Eclipse Modeling Framework<\/a><\/noindex><\/b> (<b>EMF<\/b>) ofer\u0103 instrumente generale pentru modelarea datelor structurate. EMF este integrat cu Eclipse Platform, dar poate fi folosit \u0219i separat, \u00een aplica\u021bii Java obi\u0219nuite. Adesea, dezvoltatorii \u00eencep\u0103tori de Eclipse sunt deja familiariza\u021bi cu EMF, chiar dac\u0103 nu \u00een\u021beleg pe deplin subtilit\u0103\u021bile platformei Eclipse. Una dintre cauzele popularit\u0103\u021bii sale bine meritate este designul s\u0103u universal, care include, printre altele, o API unificat\u0103 la nivel meta, ce permite lucrul generic cu orice model EMF. Implement\u0103rile de baz\u0103 oferite de EMF pentru obiectele modelului \u0219i subsistemul de generare a codului modelului pe baza meta-modelului cresc semnificativ viteza de dezvoltare \u0219i reduc num\u0103rul de erori. De asemenea, EMF include mecanisme pentru serializarea modelelor, urm\u0103rirea modific\u0103rilor \u00een model \u0219i multe altele. <\/p>\n<p>Ca orice instrument cu adev\u0103rat universal, EMF se potrive\u0219te pentru o gam\u0103 larg\u0103 de sarcini legate de modelare, dar unele clase de modele (de exemplu, modelele bazate pe handle discutate mai sus) pot necesita instrumente de modelare mai specializate. A vorbi despre EMF este o activitate nepl\u0103cut\u0103, mai ales \u00een limitele unei singure articole, deoarece este un subiect de carte separat\u0103 \u0219i destul de groas\u0103. S\u0103 subliniem doar c\u0103 sistemul de generaliz\u0103ri de calitate, pe care EMF se bazeaz\u0103, a permis apari\u021bia unui \u00eentreg spectru de proiecte dedicate model\u0103rii, care fac parte din proiectul de top. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Modelarea Eclipse<\/a><\/noindex> pe l\u00e2ng\u0103 EMF \u00een sine. Un astfel de proiect este Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> ofer\u0103 infrastructura pentru \u201emodelarea textului\u201d. Xtext folose\u0219te <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> pentru analiza sintactic\u0103 a textului surs\u0103 \u0219i EMF pentru reprezentarea ASG-ului (grafic abstract semantic, care, \u00een esen\u021b\u0103, este o combina\u021bie \u00eentre AST \u0219i bindings), cunoscut \u0219i sub denumirea de \u201emodel semantic\u201d. Gramatica limbajului modelat cu ajutorul Xtext este descris\u0103 \u00eentr-un limbaj propriu Xtext. Acest lucru permite nu doar generarea unei descrieri a gramaticii pentru ANTLR, ci \u0219i ob\u021binerea unui mecanism de serializare AST (adic\u0103 Xtext ofer\u0103 at\u00e2t parser, c\u00e2t \u0219i unparser), sugestii contextuale \u0219i o serie de alte componente lingvistice. Pe de alt\u0103 parte, limbajul de descriere a gramaticii utilizat \u00een Xtext este mai pu\u021bin flexibil \u00een compara\u021bie, s\u0103 zicem, cu limbajul de descriere a gramaticii din ANTLR. Prin urmare, uneori trebuie s\u0103 \u201e\u00eendoi\u201d limbajul implementat pentru Xtext, ceea ce de obicei nu constituie o problem\u0103 atunci c\u00e2nd este vorba despre un limbaj dezvoltat de la zero, dar poate fi inacceptabil pentru limbaje cu o sintax\u0103 deja stabilit\u0103. Cu toate acestea, Xtext este \u00een prezent cel mai matur, complet func\u021bional \u0219i universal instrument din Eclipse pentru construirea limbajelor de programare \u0219i a instrumentelor de dezvoltare pentru acestea. \u00cen special, acesta este un instrument ideal pentru prototiparea rapid\u0103. <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\">limbaje orientate pe subiect<\/a><\/noindex> (domain-specific language, DSL). Pe l\u00e2ng\u0103 men\u021bionatul \u201enuclee lingvistice\u201d bazate pe ANTLR \u0219i EMF, Xtext ofer\u0103 o multitudine de componente utile de nivel superior, inclusiv mecanisme de indexare, construire incremental\u0103, \u201eeditor inteligent\u201d \u0219i multe, multe altele, dar las\u0103 deoparte modelele lingvistice bazate pe handle. Ca \u0219i EMF, Xtext este un subiect care merit\u0103 o carte separat\u0103, \u0219i greu putem s\u0103 discut\u0103m chiar \u0219i \u00een treac\u0103t despre toate capacit\u0103\u021bile sale.<\/p>\n<p>1C:Enterprise Development Tools utilizeaz\u0103 activ at\u00e2t EMF-ul \u00een sine, c\u00e2t \u0219i o serie de alte proiecte Eclipse Modeling. \u00cen special, Xtext este una dintre bazele instrumentelor de dezvoltare pentru limbajele 1C:Enterprise, precum limbajul de programare \u00eencorporat \u0219i limbajul de interogare. O alt\u0103 baz\u0103 a acestor instrumente de dezvoltare este proiectul Eclipse Handly, la care ne vom opri mai \u00een detaliu (dintre componentele enumerate ale Eclipse, acesta este \u00een prezent cel mai pu\u021bin cunoscut).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, subproiectul proiectului de nivel superior Eclipse Technology, a ap\u0103rut ca urmare a contribu\u021biei ini\u021biale a codului \u00een cadrul Eclipse Foundation, realizat\u0103 de compania 1C \u00een 2014. De atunci, compania 1C continu\u0103 s\u0103 sus\u021bin\u0103 dezvoltarea proiectului: committers-ii Handly sunt angaja\u021bi ai companiei. Proiectul este mic, dar ocup\u0103 o ni\u0219\u0103 suficient de unic\u0103 \u00een Eclipse: principalul s\u0103u obiectiv este sprijinirea dezvolt\u0103rii modelelor bazate pe handle.<\/p>\n<p>Principiile arhitecturale de baz\u0103 ale modelelor bazate pe handle, cum ar fi idiomul handle\/body, au fost discutate mai sus folosind modelul resurselor \u0219i modelul Java ca exemple. S-a men\u021bionat de asemenea c\u0103 at\u00e2t modelul resurselor, c\u00e2t \u0219i modelul Java sunt fundamente importante pentru uneltele de dezvoltare Java Eclipse (JDT). \u0218i, av\u00e2nd \u00een vedere c\u0103 practic toate proiectele *DT din Eclipse au o arhitectur\u0103 similar\u0103 cu JDT, nu ar fi o exagerare s\u0103 spunem c\u0103 modelele bazate pe handle stau la baza multor, dac\u0103 nu tuturor IDE-urilor construite pe platforma Eclipse. De exemplu, \u00een Eclipse C\/C++ Development Tooling (CDT) exist\u0103 un model bazat pe handle pentru C\/C++, care joac\u0103 \u00een arhitectura CDT aceea\u0219i rol ca \u0219i modelul Java \u00een JDT.<\/p>\n<p>\u00cenainte de apari\u021bia Handly, Eclipse nu oferea biblioteci specializate pentru construirea modelelor lingvistice bazate pe handle. Modele existente acum au fost create \u00een principal prin adaptarea direct\u0103 a codului modelului Java (a.k.a. copy\/paste), <i>\u00een acele cazuri \u00een care acest lucru este permis<\/i> Eclipse Public License (EPL). (Este clar c\u0103, de exemplu, pentru proiectele \u00een sine ale Eclipse aceasta nu reprezint\u0103, de obicei, o problem\u0103 din punct de vedere juridic, ceea ce nu se poate spune despre produsele cu cod surs\u0103 \u00eenchis.) Pe l\u00e2ng\u0103 caracteristica sa dezorganizat\u0103, aceast\u0103 metod\u0103 conduce la probleme bine cunoscute: duplicarea codului, erorile introdus\u0103 prin adaptare etc. Ce este \u0219i mai r\u0103u, modelele rezultate r\u0103m\u00e2n \u201eobiecte \u00een sine\u201d \u0219i nu utilizeaz\u0103 poten\u021bialul existent pentru unificare. Totu\u0219i, identificarea conceptelor \u0219i protocoalelor generale pentru modelele lingvistice bazate pe handle ar putea duce la crearea unor componente reutilizabile pentru a lucra cu ele, similar cu ceea ce s-a \u00eent\u00e2mplat \u00een cazul EMF.<\/p>\n<p>Nu se poate spune c\u0103 \u00een Eclipse nu a existat o \u00een\u021belegere a acestor probleme. \u00cenc\u0103 din 2005 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, generaliz\u00e2nd experien\u021ba dezvolt\u0103rii prototipului CDT, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">a argumentat<\/a><\/noindex> necesitatea cre\u0103rii unei infrastructuri comune pentru modelele lingvistice, inclusiv modelele bazate pe handle. Dar, dup\u0103 cum se \u00eent\u00e2mpl\u0103 adesea, din cauza unor sarcini mai prioritare, aceste idei nu au fost puse \u00een aplicare. \u00centre timp, factorizarea codului DT-proiectelor r\u0103m\u00e2ne \u00een continuare unul dintre subiectele insuficient explorate \u00een Eclipse.<\/p>\n<p>\u00centr-un anumit sens, proiectul Handly are scopul de a aborda aproximativ acelea\u0219i probleme ca \u0219i EMF, dar pentru modelele bazate pe handle, av\u00e2nd ca prioritate modelele lingvistice (adic\u0103 cele care reprezint\u0103 elementele structurii unui anumit limbaj de programare). Mai jos sunt enumerate principalele obiective stabilite la proiectarea Handly:<\/p>\n<ul>\n<li>Identificarea principalelor abstrac\u021bii din domeniul de aplicare.<\/li>\n<li>Reducerea eforturilor \u0219i \u00eembun\u0103t\u0103\u021birea calit\u0103\u021bii implement\u0103rii modelelor lingvistice bazate pe handle prin reutilizarea codului.<\/li>\n<li>Oferirea unui API unificat la nivel meta pentru modelele rezultante, care s\u0103 faciliteze crearea de componente comune pentru IDE-uri ce lucreaz\u0103 cu modelele lingvistice bazate pe handle.<\/li>\n<li>Flexibilitate \u0219i scalabilitate.<\/li>\n<li>Integrarea cu Xtext (\u00eentr-un strat separat).<\/li>\n<\/ul>\n<p>\nPentru a identifica conceptele \u0219i protocoalele comune, au fost analizate implement\u0103rile existente ale modelelor lingvistice bazate pe handle. Interfe\u021bele cheie \u0219i implement\u0103rile de baz\u0103 oferite de Handly sunt prezentate \u00een fig. 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 8. Interfe\u021bele comune \u0219i implement\u0103rile de baz\u0103 ale elementelor Handly<\/b><\/p>\n<p>Interfa\u021ba IElement reprezint\u0103 handle-ul unui element \u0219i este comun\u0103 pentru elementele tuturor modelelor bazate pe Handly. Clasa abstract\u0103 Element implementeaz\u0103 un mecanism generalizat handle\/body (fig. 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 9. IElement \u0219i implementarea generalizat\u0103 handle\/body<\/b><\/p>\n<p>\u00cen plus, Handly ofer\u0103 un mecanism generalizat de notificare a modific\u0103rilor elementelor modelului (fig. 10). A\u0219a cum se poate observa, \u00een linii mari, este similar mecanismelor de notificare implementate \u00een modelul de resurse \u0219i modelul Java \u0219i folose\u0219te IElementDelta pentru a prezenta informa\u021biile despre modificarea unui element \u00eentr-un mod unificat.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Fig. 10. Interfe\u021bele comune \u0219i implement\u0103rile de baz\u0103 ale mecanismului de notificare Handly<\/b><\/p>\n<p>Partea discutat\u0103 anterior a Handly (fig. 9 \u0219i 10) poate fi utilizat\u0103 pentru a reprezenta practic orice modele bazate pe handle. Pentru a crea <i>modele lingvistice<\/i> proiectul ofer\u0103 func\u021bionalitate suplimentar\u0103 \u2013 \u00een special, interfe\u021be comune \u0219i implement\u0103ri de baz\u0103 pentru elementele structurii textului surs\u0103, denumite <i>elemente surs\u0103<\/i> (fig. 8). Interfa\u021ba ISourceFile reprezint\u0103 fi\u0219ierul surs\u0103, iar ISourceConstruct \u2013 un element din interiorul fi\u0219ierului surs\u0103. Clasele abstracte SourceFile \u0219i SourceConstruct implementeaz\u0103 mecanisme generalizate pentru a sprijini lucrul cu fi\u0219ierele surs\u0103 \u0219i cu elementele acestora, cum ar fi gestionarea bufferelor de text, legarea la coordonatele unui element din textul surs\u0103, reconcilierea modelului cu con\u021binutul actual al bufferului de lucru etc. Implementarea acestor mecanisme este de obicei o sarcin\u0103 destul de complex\u0103, iar Handly poate reduce semnificativ eforturile de dezvoltare a modelelor bazate pe handle, oferind implement\u0103ri de baz\u0103 de calitate.<\/p>\n<p>Pe l\u00e2ng\u0103 mecanismele principale men\u021bionate mai sus, Handly ofer\u0103 infrastructura pentru bufferurile de text \u0219i \u00abinstantanee\u00bb (snapshots), suport pentru integrarea cu editoarele de cod surs\u0103 (inclusiv integrarea realizat\u0103 \u201edin cutie\u201d cu editorul Xtext), precum \u0219i unele componente UI comune care func\u021bioneaz\u0103 cu modelele bazate pe Handly, cum ar fi framework-ul outline. Pentru a ilustra capabilit\u0103\u021bile sale, proiectul ofer\u0103 c\u00e2teva exemple, inclusiv implementarea unui model Java pe Handly. (Comparativ cu implementarea complet\u0103 a modelului Java \u00een JDT, acest model este inten\u021bionat doar u\u0219or simplificat pentru o mai bun\u0103 claritate.)<\/p>\n<p>Dup\u0103 cum s-a men\u021bionat anterior, un accent serios \u00een proiectarea ini\u021bial\u0103 a Handly \u0219i \u00een dezvoltarea continu\u0103 a fost \u0219i r\u0103m\u00e2ne pus pe scalabilitate \u0219i flexibilitate. <\/p>\n<p>\u00cen principiu, modelele bazate pe handle se scalaz\u0103 destul de bine \u201eprin design\u201d. De exemplu, idiomul handle\/body permite restric\u021bionarea cantit\u0103\u021bii de memorie consumate de model. Dar exist\u0103 \u0219i subtilit\u0103\u021bi. Astfel, la testarea Handly pentru scalabilitate a fost descoperit\u0103 o problem\u0103 \u00een implementarea mecanismului de notificare \u2013 la modificarea unui num\u0103r mare de elemente, construirea delta dura prea mult timp. S-a dovedit c\u0103 aceea\u0219i problem\u0103 exist\u0103 \u0219i \u00een modelul Java JDT, din care codul respectiv a fost adaptat. Am corectat eroarea \u00een Handly \u0219i am preg\u0103tit un patch similar pentru JDT, care a fost primit cu recuno\u0219tin\u021b\u0103. Aceasta este doar unul dintre exemplele \u00een care implementarea Handly \u00een realiz\u0103rile existente ale modelelor ar putea fi poten\u021bial benefic\u0103, deoarece \u00een acest caz o asemenea eroare ar putea fi corectat\u0103 dintr-un singur loc.<\/p>\n<p>Pentru a face integrarea Handly \u00een implement\u0103rile existente de modele tehnic posibil\u0103, biblioteca trebuie s\u0103 aib\u0103 o flexibilitate semnificativ\u0103. Principala problem\u0103 const\u0103 \u00een p\u0103strarea compatibilit\u0103\u021bii API-ului modelului. Aceast\u0103 sarcin\u0103 a fost rezolvat\u0103 prin <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> prin separarea clar\u0103 a API-ului specific modelului, definit \u0219i controlat complet de dezvoltator, de API-ul unificat de nivel meta, furnizat de bibliotec\u0103. Aceasta nu doar c\u0103 face tehnic posibil\u0103 integrarea Handly \u00een implement\u0103rile existente, dar ofer\u0103, de asemenea, dezvoltatorului unui model nou o libertate semnificativ\u0103 \u00een proiectarea API-ului.<\/p>\n<p>Flexibilitatea are \u0219i alte aspecte. De exemplu, Handly impune aproape niciun fel de restric\u021bii asupra structurii modelului \u0219i poate fi utilizat at\u00e2t pentru modelarea limbajelor de programare de uz general, c\u00e2t \u0219i pentru limbaje orientate pe subiect. \u00cen construirea structurii fi\u0219ierului surs\u0103, Handly nu impune o anumit\u0103 form\u0103 de reprezentare AST \u0219i nu necesit\u0103, \u00een principiu, nici m\u0103car existen\u021ba unui AST, asigur\u00e2nd astfel compatibilitatea cu practic orice mecanism de analiz\u0103 sintactic\u0103. \u00cen cele din urm\u0103, Handly suport\u0103 integrarea complet\u0103 cu spa\u021biul de lucru Eclipse, dar poate func\u021biona \u0219i direct cu sistemele de fi\u0219iere, datorit\u0103 integr\u0103rii cu <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/EFS\">Eclipse File System<\/a><\/noindex> (EFS).<\/p>\n<p>Versiunea curent\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/projects.eclipse.org\/projects\/technology.handly\/releases\/0.6\">Handly 0.6<\/a><\/noindex> a fost lansat\u0103 \u00een decembrie 2016. De\u0219i \u00een prezent proiectul se afl\u0103 \u00een stare de incubare \u0219i API-ul nu este definitiv stabilit, Handly este deja utilizat \u00een dou\u0103 produse comerciale mari, care au \u00eendr\u0103znit s\u0103 se apuce de rolul de \u00abpionieri\u00bb \u0219i, trebuie spus, p\u00e2n\u0103 acum nu regret\u0103 acest lucru.<\/p>\n<p>Dup\u0103 cum s-a men\u021bionat mai sus, unul dintre aceste produse este 1C:Enterprise Development Tools, unde Handly este folosit de la \u00eenceput pentru modelarea elementelor structurii de \u00eenalt nivel a limbajelor 1C:Enterprise, cum ar fi limbajul de programare \u00eencorporat \u0219i limbajul de interogare. Cel\u0103lalt produs este mai pu\u021bin cunoscut publicului larg. Este <noindex><a rel=\"nofollow\" href=\"https:\/\/www.codasip.com\/custom-processor\/\">Codasip Studio<\/a><\/noindex>, un mediu integrat de proiectare pentru procesoare specific pentru aplica\u021bii (application-specific instruction-set processor, ASIP), utilizat at\u00e2t \u00een cadrul companiei cehe Codasip, c\u00e2t \u0219i de clien\u021bii s\u0103i, printre care se num\u0103r\u0103 <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 folose\u0219te Handly \u00een produc\u021bie din 2015, \u00eencep\u00e2nd cu versiunea Handly 0.2. Ultima versiune a Codasip Studio utilizeaz\u0103 versiunea 0.5, lansat\u0103 \u00een iunie 2016. Ond\u0159ej Il\u010d\u00edk, care conduce dezvoltarea IDE-ului la Codasip, este \u00een contact cu proiectul, oferind un feedback esen\u021bial din partea \u201eadoptrilor externi\u201d. Chiar a reu\u0219it s\u0103 g\u0103seasc\u0103 pu\u021bin timp liber pentru a participa direct la dezvoltarea proiectului, implement\u00e2nd un strat UI (~ 4000 de linii de cod) pentru unul dintre exemplele Handly, un model Java. Informa\u021bii mai detaliate \u201edin prima m\u00e2n\u0103\u201d despre utilizarea Handly de c\u0103tre adoptri pot fi g\u0103site pe pagina <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Studii de caz<\/a><\/noindex> a proiectului.<\/p>\n<p>Sper\u0103m c\u0103 dup\u0103 lansarea versiunii 1.0, cu o garan\u021bie a stabilit\u0103\u021bii API-ului \u0219i ie\u0219irea proiectului din starea de incubare, Handly va atrage \u0219i noi adoptri. P\u00e2n\u0103 atunci, proiectul continu\u0103 s\u0103-\u0219i testeze \u0219i s\u0103 \u00eembun\u0103t\u0103\u021beasc\u0103 API-ul, lans\u00e2nd c\u00e2te dou\u0103 \u201elans\u0103ri mari\u201d pe an \u2013 \u00een iunie (\u00een aceea\u0219i dat\u0103 cu lansarea simultan\u0103 Eclipse) \u0219i \u00een decembrie, asigur\u00e2nd un program predictibil pe care adoptri se pot baza. De asemenea, se poate men\u021biona c\u0103 rata de erori a proiectului r\u0103m\u00e2ne constant sc\u0103zut\u0103 \u0219i Handly func\u021bioneaz\u0103 fiabil \u00een produsele adoptrilor timpurii \u00eenc\u0103 din primele sale versiuni. Pentru o familiarizare suplimentar\u0103 cu Eclipse Handly, se poate utiliza <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Tutorial de \u00eenceput<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Prezentare arhitectural\u0103<\/a><\/noindex>.<br \/>\n<br \/>Sursa: <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.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, Eclipse \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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 ca platform\u0103 tehnologic\u0103 pentru 1C:Enterprise Development Tools | ProHoster","description":"Probabil c\u0103 Eclipse nu mai are nevoie de o introducere special\u0103.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}