{"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\/hr\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","title":{"rendered":"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Vjerojatno, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/\">Eclipse<\/a><\/noindex> ve\u0107 dugo ne treba posebno predstavljanje. Mnogi su poznati s Eclipse-om zahvaljuju\u0107i Eclipse Java razvojnim alatima (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/jdt\/\">JDT<\/a><\/noindex>). Ova popularna open-source Java IDE ve\u0107ini programera povezuje se sa rije\u010dju \u201cEclipse\u201d. Me\u0111utim, Eclipse je i pro\u0161iriva platforma za integraciju razvojnih alata (Eclipse Platform), kao i niz IDE-ova izgra\u0111enih na temelju iste, uklju\u010duju\u0107i i JDT. Eclipse obuhva\u0107a i Eclipse Project, projekt na vi\u0161em nivou koji koordinira razvoj Eclipse Platforme i JDT-a, kao i Eclipse SDK \u2013 isporu\u010deni rezultat tog razvoja. Na kraju, Eclipse je i open-source Fondacija s ogromnom zajednicom projekata, od kojih mnogi nisu napisani na Javi ili nemaju veze s razvojnim alatima (na primjer, projekti <noindex><a rel=\"nofollow\" href=\"https:\/\/iot.eclipse.org\/\">Eclipse IoT<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/science.eclipse.org\/\">Eclipse Science<\/a><\/noindex>). Svijet Eclipse-a je vrlo raznolik.<\/p>\n<p>U ovom \u010dlanku, koji je preglednog karaktera, poku\u0161at \u0107emo razmotriti neke osnove arhitekture Eclipse kao platforme za izgradnju integriranih razvojnih alata i dati po\u010detnu predstavu o komponentama Eclipse-a koje \u010dine temelj tehnolo\u0161ke platforme za \u201enovi Konfigurator\u201c 1C: Poduze\u0107e, <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/release_IDE\/\">1C:Enterprise Development Tools<\/a><\/noindex>. Naravno, takvo razmatranje neizbje\u017eno \u0107e biti u mnogim aspektima povr\u0161no i prili\u010dno ograni\u010deno, dijelom i zato \u0161to se ne usredoto\u010dujemo samo na Eclipse-programere kao ciljanu publiku. Ipak, nadamo se da \u0107e \u010dak i iskusni Eclipse programeri mo\u0107i prona\u0107i zanimljive informacije u ovom \u010dlanku. Na primjer, ispri\u010dat \u0107emo o jednom od \u201etajni Eclipse-a\u201c, relativno novom i jo\u0161 slabo poznatom projektu <noindex><a rel=\"nofollow\" href=\"http:\/\/eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex>, koji je osnovan i podr\u017eava tvrtka 1C.<br \/>\n<img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" 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 u arhitekturu Eclipse<\/h2>\n<p>\nNajprije \u0107emo razmotriti neke op\u0107e aspekte arhitekture Eclipse-a na primjeru <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/jdt\/overview.php\">Eclipse Java development tools<\/a><\/noindex> (JDT). Odabir JDT-a kao primjera nije slu\u010dajan. To je prva integrirana razvojna sredina koja se pojavila u Eclipse-u. Ostali *DT projekti Eclipse-a, poput Eclipse C\/C++ Development Toolinga (CDT), stvoreni su kasnije i posudili su kako osnovne arhitektonske principe, tako i pojedine dijelove izvornog koda iz JDT-a. Osnove arhitekture postavljene u JDT-u relevantne su do danas za prakti\u010dki sve IDE-e izgra\u0111ene na Eclipse Platformi, uklju\u010duju\u0107i i 1C:Enterprise Development Tools.<\/p>\n<p>Prvo treba napomenuti da se Eclipse odlikuje jasno definiranim arhitektonskim slojevanjem, s odvajanjem jeziku neovisne funkcionalnosti od funkcionalnosti namijenjene podr\u0161ci odre\u0111enim programskim jezicima, te odvajanjem UI-neovisnih \u201ejezgrenih\u201c (core) komponenti od komponenti povezanih s podr\u0161kom korisni\u010dkom su\u010delju.<\/p>\n<p>Eclipse Platform definira zajedni\u010dku, jeziku neovisnu infrastrukturu, dok alati za razvoj u Javi dodaju u Eclipse punu funkcionalnost Java IDE-a. I Eclipse Platform i JDT sastoje se od nekoliko komponenti, od kojih svaka pripada ili UI-neovisnom \u201ejezgru\u201c ili UI sloju (sl. 1).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" 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>Nabrojimo glavne komponente Eclipse Platforme:<\/p>\n<ul>\n<li><b>Runtime<\/b> \u2014 Definira infrastrukturu dodataka. Eclipse se odlikuje modularnom arhitekturom. U su\u0161tini, Eclipse je zbirka \u201eto\u010daka pro\u0161irenja\u201c i \u201epro\u0161irenja\u201c.<\/li>\n<li><b>Workspace<\/b> \u2014 Upravljanje jednim ili vi\u0161e projekata. Projekt se sastoji od mapa i datoteka koje se izravno prikazuju na datote\u010dnom sustavu.<\/li>\n<li><b>Standard Widget Toolkit (SWT)<\/b> \u2014 Pru\u017ea osnovne elemente korisni\u010dkog su\u010delja, integrirane s operativnim sustavom.<\/li>\n<li><b>JFace<\/b> \u2014 Pru\u017ea niz UI okvira izgra\u0111enih na temelju SWT-a.<\/li>\n<li><b>Radna povr\u0161ina<\/b> \u2014 Definira UI paradigmu Eclipse-a: ure\u0111iva\u010de, prikaze, perspektive.<\/li>\n<\/ul>\n<p>\nTreba napomenuti da Eclipse Platform nudi i mnogo drugih korisnih komponenti za izgradnju integriranih razvojnih alata, me\u0111u kojima se isti\u010du Debug, Compare, Search i Team. Tako\u0111er se mora spomenuti JFace Text \u2013 osnova za izgradnju \u201epametnih ure\u0111iva\u010da\u201c izvornog koda. Na\u017ealost, \u010dak je i povr\u0161inski pregled ovih komponenti, kao i komponenti UI sloja, van okvira ovog \u010dlanka, stoga \u0107emo se u preostalom dijelu ovog odjeljka ograni\u010diti na pregled glavnih \u201ejezgrenih\u201c komponenti Eclipse Platforme i JDT-a.<\/p>\n<h4>Core Runtime<\/h4>\n<p>\nInfrastruktura dodataka Eclipse temelji se na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.osgi.org\/developer\/specifications\/\">OSGi<\/a><\/noindex> i pru\u017ea je projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/equinox\/\">Eclipse Equinox<\/a><\/noindex>. Svaki dodatak Eclipse-a je OSGi paket. OSGi specifikacija definira, izme\u0111u ostalog, mehanizme verzioniranja i rje\u0161avanja ovisnosti. Pored ovih standardnih mehanizama, Equinox uvodi koncept <i>to\u010dke pro\u0161irenja<\/i>. Svaki plugin mo\u017ee definirati svoje to\u010dke pro\u0161irenja, kao i dodati dodatnu funkcionalnost u sustav (\u00abpro\u0161irenja\u00bb), koriste\u0107i to\u010dke pro\u0161irenja definirane tim ili drugim pluginima. Detaljno obja\u0161njenje mehanizama OSGi i Equinoxa izlazi iz okvira ovog \u010dlanka. Nagla\u0161avamo samo da modularizacija u Eclipseu ima sveobuhvatan karakter (svaka podsustav, uklju\u010duju\u0107i Runtime, sastoji se od jednog ili vi\u0161e pluginova), i prakti\u010dno sve u Eclipseu je pro\u0161irenje. Ovi principi su ugra\u0111eni u arhitekturu Eclipsea mnogo prije implementacije OSGi (tada se koristila vlastita tehnologija, koja je u mnogim aspektima sli\u010dna OSGi).<\/p>\n<h4>Osnovni radni prostor<\/h4>\n<p>\nGotovo svaki integrirani razvoJNI sustav temeljen na Eclipse platformi radi s Eclipse radnim prostorom. Upravo radni prostor obi\u010dno sadr\u017ei izvorni kod razvijanog aplikacija u IDE-u. Radni prostor izravno se preslikava na datote\u010dni sustav i sastoji se od projekata koji sadr\u017ee mape i datoteke. Ovi projekti, mape i datoteke nazivaju se <i>resursima<\/i> radni prostor. Implementacija radnog prostora u Eclipseu slu\u017ei kao neka vrsta predmemorije u odnosu na datote\u010dni sustav, \u0161to zna\u010dajno ubrzava prolazak kroz stablo resursa. Osim toga, radni prostor pru\u017ea niz dodatnih usluga, uklju\u010duju\u0107i <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Resource-deltas\/resource-deltas.html\">mehanizam obavijesti o promjenama resursa<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/articles\/Article-Builders\/builders.html\">infrastrukturu inkrementalnih graditelja<\/a><\/noindex>.<\/p>\n<p>Za podr\u0161ku radnom prostoru i njegovim resursima odgovorna je komponenta Core Resources (plugin org.eclipse.core.resources). Konkretno, ova komponenta pru\u017ea programski pristup radnom prostoru u obliku <i>modela resursa<\/i>. Za u\u010dinkovito rad s ovim modelom klijentima je potreban jednostavan na\u010din predstavljanja veze na resurs. Pri tome bi bilo po\u017eeljno sakriti objekt koji izravno pohranjuje stanje resursa u modelu od pristupa klijenta. Ina\u010de, u slu\u010daju, na primjer, brisanja datoteke, klijent bi mogao nastaviti zadr\u017eavati objekt koji vi\u0161e nije prisutan u modelu, \u0161to bi moglo dovesti do problema. Eclipse rje\u0161ava ovaj problem koriste\u0107i takozvani <i>handle<\/i> resursa. Handle djeluje kao klju\u010d (on zna samo put do resursa u radnom prostoru) i potpuno kontrolira pristup unutarnjem modelskom objektu koji izravno pohranjuje informacije o stanju resursa. Ovaj dizajn predstavlja varijaciju obrasca <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.c2.com\/?HandleBodyPattern\">Handle\/Body<\/a><\/noindex>.<\/p>\n<p>Slika 2 ilustrira idiom Handle\/Body u kontekstu modela resursa. Su\u010delje IResource predstavlja handle resursa i slu\u017ei kao API, za razliku od klase Resource koja implementira ovo su\u010delje, kao i klase ResourceInfo koja predstavlja body, a nije API. Nagla\u0161avamo da handle poznaje samo put do resursa u odnosu na korijen workspace-a i ne sadr\u017ei referencu na resource info. Objekti resource info tvore takozvano \u201establo elemenata\u201c (element tree). Ova struktura podataka je potpuno materijalizirana u memoriji. Kako bi se prona\u0161ao primjerak resource info koji odgovara odre\u0111enom handle-u, element tree se pretra\u017euje prema putu pohranjenom u tom handle-u.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" 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>Kako \u0107emo vidjeti kasnije, osnovni dizajn modela resursa (mo\u017eemo ga nazvati dizajnom temeljenim na handle-ima) koristi se u Eclipse-u i za druge modele. A sada nabrojimo neka od karakteristi\u010dnih svojstava ovog dizajna:<\/p>\n<ul>\n<li>Handle je objekt-vrijednost (value object). Objekti-vrijednosti su nemutabilni (immutable) objekti \u010dija se jednakost ne temelji na identitetu. Takvi objekti mogu se sigurno koristiti kao klju\u010devi u ha\u0161iranim kontejnerima. Nekoliko instanci handle-a mo\u017ee referencirati na isti resurs. Za njihovo uspore\u0111ivanje treba koristiti metodu equals(Object).<\/li>\n<li>Handle definira pona\u0161anje resursa, ali ne sadr\u017ei informacije o stanju resursa (jedini podaci koje pohranjuje su \u201eklju\u010d\u201c, put do resursa).<\/li>\n<li>Handle mo\u017ee referencirati na nepostoje\u0107i resurs (ili resurs koji jo\u0161 nije stvoren, ili resurs koji je ve\u0107 uklonjen). Postojanje resursa mo\u017ee se provjeriti pomo\u0107u metode IResource.exists().<\/li>\n<li>Neke operacije mogu se implementirati isklju\u010divo na temelju informacija pohranjenih u samom handle-u (takozvane handle-only operacije). Primjeri su IResource.getParent(), getFullPath() i sli\u010dno. Resurs ne mora nu\u017eno postojati za uspje\u0161no izvr\u0161enje takve operacije. Operacije za koje je za uspje\u0161no izvr\u0161enje potrebno da resurs postoji, bacaju iznimku (CoreException) ako resurs ne postoji.<\/li>\n<\/ul>\n<p>\nEclipse pru\u017ea u\u010dinkovit mehanizam obavje\u0161tavanja o promjenama resursa radnog prostora (sl. 3). Resursi se mogu mijenjati bilo kao rezultat radnji unutar samog Eclipse IDE-a ili kao rezultat izvr\u0161avanja sinkronizacije s datote\u010dnim sustavom. U oba slu\u010daja, klijentima koji su se prijavili za obavijesti pru\u017ea se detaljna informacija o promjenama u obliku \u201eresursnih delta\u201c (resource delta). Delta opisuje promjene izme\u0111u dva stanja (pod-)stabla resursa radnog prostora i sama je stablo, pri \u010demu svaki \u010dvor opisuje promjenu nekog resursa i sadr\u017ei popis delta sljede\u0107e razine koje opisuju promjene podre\u0111enih resursa.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" 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>Mehanizam obavje\u0161tavanja temeljen na resursnim deltatama ima sljede\u0107e karakteristike:<\/p>\n<ul>\n<li>Jedna promjena i vi\u0161e promjena opisuju se pomo\u0107u iste strukture, budu\u0107i da se delta gradi prema na\u010delu rekurzivne kompozicije. Klijenti pretplatnici mogu obra\u0111ivati obavijesti o promjenama resursa pomo\u0107u rekurzivnog silaska kroz stablo delta.<\/li>\n<li>Delta sadr\u017ei potpune informacije o promjeni resursa, uklju\u010duju\u0107i njegovo premje\u0161tanje i\/ili promjenu povezanih \u201eoznake\u201c (kao \u0161to su markeri koji predstavljaju, na primjer, gre\u0161ke kompajliranja).<\/li>\n<li>Budu\u0107i da se reference na resurs vr\u0161e putem handlea, delta mo\u017ee prirodno referirati na udaljeni resurs.<\/li>\n<\/ul>\n<p>\nKao \u0161to \u0107emo ubrzo vidjeti, osnovne komponente dizajna mehanizma obavje\u0161tavanja o promjeni modela resursa relevantne su i za druge modele temeljene na handleu.<\/p>\n<h4>JDT Core<\/h4>\n<p>\nModel resursa Eclipse radnog prostora temeljna je jezi\u010dno neovisna shema. Komponenta JDT Core (plugin org.eclipse.jdt.core) pru\u017ea API za navigaciju i analizu strukture radnog prostora s gledi\u0161ta Jave, takozvani \u201emodel Jave\u201c (<i>Java model<\/i>). Ovaj API definiran je u terminima Java elemenata, za razliku od donjeg API-ja modela resursa, koji je definiran u terminima mapa i datoteka. Glavni su\u010delja stabla elemenata Jave prikazana su na sl. 4.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" 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 koristi istu idiomu handle\/body kao i model resursa (slika 5). IJavaElement je handle, dok JavaElementInfo igra ulogu body. Su\u010delje IJavaElement definira protokol zajedni\u010dki za sve Java elemente. Neki od njegovih metoda su samo handle: getElementName(), getParent() i sli\u010dno. Objekt JavaElementInfo pohranjuje stanje pripadaju\u0107eg elementa: njegovu strukturu i atribute.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" src=\"\/wp-content\/uploads\/2019\/04\/5b473cccfc8f258d563033ce334cb94f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Slika 5. IJavaElement i JavaElementInfo<\/b><\/p>\n<p>Java model ima neka odstupanja u implementaciji osnovnog dizajna handle\/body u usporedbi s modelom resursa. Kao \u0161to je ranije spomenuto, u modelu resursa tree elementa, \u010diji su \u010dvorovi objekti resource info, potpuno se nalazi u memoriji. No u Java modelu mo\u017ee postojati zna\u010dajno ve\u0107i broj elemenata nego u treeu resursa, jer obuhva\u0107a i unutarnju strukturu .java i .class datoteka: tipove, polja i metode.<\/p>\n<p>Kako bi se izbjegla potpuna materializacija cijelog stabla elemenata u memoriji, implementacija Java modela koristi ograni\u010den LRU cache element info, gdje je klju\u010d handle IJavaElement. Objekti element info kreiraju se na zahtjev dok se navigira kroz stablo elemenata. Pri tome, najmanje \u010desto kori\u0161teni elementi se istiskuju iz cachea, a potro\u0161nja memorije modela ostaje ograni\u010dena zadanim veli\u010dinom cachea. To je jo\u0161 jedna prednost handle-based dizajna, koji potpuno skriva takve detalje implementacije od klijentskog koda.<\/p>\n<p>Mehanizam obavje\u0161tavanja o promjenama elemenata Java u osnovi je sli\u010dan prethodno razmatranom mehanizmu pra\u0107enja promjena resursa radnog prostora. Klijent koji \u017eeli pratiti promjene u Java modelu pretpla\u0107uje se na obavijesti koje se predstavljaju u obliku objekta ElementChangedEvent, koji sadr\u017ei IJavaElementDelta (slika 6).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" src=\"\/wp-content\/uploads\/2019\/04\/0402ec362078eaf50f47756e7f24de01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Slika 6. ElementChangedEvent i IJavaElementDelta<\/b><\/p>\n<p>Java model ne sadr\u017ei informacije o tijelu metoda ili razrje\u0161avanju imena, stoga za detaljnu analizu koda napisanog u Javi, JDT Core pru\u017ea dodatni (ne handle-based) model: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/articles\/Article-JavaCodeManipulation_AST\/index.html\">apstraktno sintakti\u010dko stablo<\/a><\/noindex> (apstraktna sintakti\u010dka struktura, AST). AST predstavlja rezultat sintakti\u010dke analize izvor teksta. \u010cvorovi AST-a odgovaraju elementima strukture izvor modula (deklaracijama, operatorima, izrazima itd.) i sadr\u017ee informacije o koordinatama odgovaraju\u0107eg elementa u izvoru, kao i (po izboru) informacije o razrje\u0161avanju imena u obliku referenci na takozvane <i>povezivanja<\/i>. Veze su objekti koji predstavljaju imenovane entitete, kao \u0161to su tipovi, metode i varijable poznate prevodilac. Za razliku od \u010dvorova AST-a koji \u010dine stablo, veze podr\u017eavaju me\u0111ureferiranje i u op\u0107em slu\u010daju \u010dine graf. Apstraktna klasa ASTNode je zajedni\u010dka osnovna klasa za sve \u010dvorove AST-a. Podklase ASTNode odgovaraju odre\u0111enim sintakti\u010dkim konstrukcijama jezika Java.<\/p>\n<p>Budu\u0107i da sintakti\u010dka stabla mogu tro\u0161iti zna\u010dajnu koli\u010dinu memorije, JDT ke\u0161ira samo jedno AST za aktivni ure\u0111iva\u010d. Za razliku od modela Java, AST se obi\u010dno smatra 'intermedijarnim', 'privremenim' modelom, na \u010dije elemente klijenti ne bi trebali zadr\u017eavati reference van konteksta operacije koja je dovela do stvaranja AST-a.<\/p>\n<p>Tri navedena modela (Java model, AST, veze) zajedno \u010dine osnovu za izgradnju 'inteligentnih razvojnog alata' u JDT, me\u0111u kojima je mo\u0107an Java ure\u0111iva\u010d s raznim 'asistentima', razli\u010ditim radnjama obrade izvor kod (me\u0111u kojima su organizacija liste uvoznika imena i formatiranje prema pode\u0161enom stilu), alati za pretra\u017eivanje i refaktoring. Pritom, model Java igra posebnu ulogu jer se upravo on koristi kao osnova za vizualno predstavljanje strukture razvijanog aplikacije (npr. u Package Exploreru, Outline-u, Search-u, Call Hierarchy-u i Type Hierarchy-u).<\/p>\n<h2>Komponente Eclipse, kori\u0161tene u 1C:Enterprise Development Tools<\/h2>\n<p>\nNa slici 7 prikazane su komponente Eclipse koje \u010dine osnovu tehnolo\u0161ke platforme za 1C:Enterprise Development Tools.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" src=\"\/wp-content\/uploads\/2019\/04\/248cceea47ee507b9ad22d6964738ee7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Slika 7. Eclipse kao platforma za 1C:Enterprise Development Tools<\/b><\/p>\n<p><b>Eclipse Platform<\/b> osigurava osnovnu infrastrukturu. Razmotrili smo some aspekte ove infrastrukture u prethodnom poglavlju.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/modeling\/emf\/\">Eclipse Modeling Framework<\/a><\/noindex><\/b> (<b>EMF<\/b>) pru\u017ea op\u0107e alate za modeliranje strukturiranih podataka. EMF je integriran s Eclipse Platform, ali se mo\u017ee koristiti i odvojeno, u uobi\u010dajenim Java aplikacijama. \u010cesto, po\u010detnici u Eclipse razvoju ve\u0107 su dobro upoznati s EMF-om, iako jo\u0161 uvijek ne razumiju sve nijanse Eclipse Platforme. Jedan od razloga njegove zaslu\u017eene popularnosti je univerzalni dizajn, koji uklju\u010duje, me\u0111u ostalim, i unificirani API meta-nivoa, koji omogu\u0107ava op\u0107enito rad s bilo kojim EMF modelom. EMF nudi osnovne implementacije za objekte modela i podsustav generacije koda modela prema meta-modelu, \u0161to zna\u010dajno ubrzava razvoj i smanjuje broj gre\u0161aka. Tako\u0111er, EMF sadr\u017ei mehanizme za serijalizaciju modela, pra\u0107enje promjena u modelu i mnogo vi\u0161e. <\/p>\n<p>Kao i svaki zaista univerzalni alat, EMF je prikladan za rje\u0161avanje \u0161irokog spektra zadataka vezanih uz modeliranje, ali neki tipovi modela (na primjer, modeli temeljenih na handle-u spomenuti gore) mogu zahtijevati specijaliziranije alate za modeliranje. Govoriti o EMF-u je zahvalan posao, posebno u ograni\u010denim okvirima jednog \u010dlanka, budu\u0107i da je to tema opse\u017ene knjige, i to prili\u010dno debele. Nagla\u0161avamo samo da je kvaliteta sustava generalizacija, koja le\u017ei u osnovi EMF-a, omogu\u0107ila ra\u0111anje \u010ditavog spektra projekata posve\u0107enih modeliranju, koji su dio vi\u0161eg projekta. <noindex><a rel=\"nofollow\" href=\"https:\/\/eclipse.org\/modeling\/\">Eclipse Modeliranje<\/a><\/noindex> uz sam EMF. Jedan od takvih projekata je Eclipse Xtext.<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/Xtext\/\">Eclipse Xtext<\/a><\/noindex><\/b> nudi infrastrukturu za 'tekstualno modeliranje'. Xtext koristi <noindex><a rel=\"nofollow\" href=\"http:\/\/www.antlr.org\/\">ANTLR<\/a><\/noindex> za sintakti\u010dku analizu izvornog teksta i EMF za predstavljanje rezultantnog ASG (apstraktni semanti\u010dki graf, koji je u su\u0161tini kombinacija AST-a i poveznica), tako\u0111er poznatog kao \"semanti\u010dki model\". Gramatika modeliranog jezika pomo\u0107u Xtext-a opisuje se na vlastitom jeziku Xtext. To ne samo da omogu\u0107ava generiranje opisa gramatike za ANTLR, ve\u0107 i dobivanje mehanizma za serijalizaciju AST-a (tj. Xtext pru\u017ea i parser i unparser), kontekstne savjete i niz drugih jezi\u010dnih komponenti. S druge strane, jezik za opis gramatike kori\u0161ten u Xtext-u manje je fleksibilan u usporedbi, recimo, s jezikom za opis gramatike u ANTLR-u. Stoga ponekad treba \"prilagoditi\" jezik koji se implementira Xtext-u, \u0161to obi\u010dno nije problem kada se radi o jeziku koji se razvija ispo\u010detka, ali mo\u017ee biti neprihvatljivo za jezike s ve\u0107 uspostavljenom sintaksom. Unato\u010d tome, Xtext je trenutno najzreliji, funkcionalno najpotpuniji i najuniverzalniji alat u Eclipse-u za izradu programskih jezika i razvojnih alata za njih. Konkretno, predstavlja idealan alat za brzo prototipiranje. <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\">predmetno orijentirani jezici<\/a><\/noindex> (domain-specific language, DSL). Osim gore spomenutog \"jezi\u010dnog jezgra\" temeljenog na ANTLR-u i EMF-u, Xtext nudi brojne korisne komponente vi\u0161eg nivoa, uklju\u010duju\u0107i mehanizme indeksiranja, inkrementalne izrade, \"pametni ure\u0111iva\u010d\", i jo\u0161 mnogo, mnogo toga, ali izostavlja jezi\u010dne modele temeljene na rukovanju. Kao i EMF, Xtext je predmet koji zaslu\u017euje posebnu knjigu, i malo je vjerojatno da \u0107emo mo\u0107i \u010dak i ukratko raspraviti o svim njegovim mogu\u0107nostima.<\/p>\n<p>1C:Enterprise Development Tools aktivno koriste kako EMF sam po sebi, tako i niz drugih Eclipse Modeling projekata. Konkretno, Xtext je jedna od osnovnih komponenti alata za razvoj za jezike 1C:Preduze\u0107e, poput ugra\u0111enog programskog jezika i jezika upita. Druga osnova ovih razvojnih alata je projekt Eclipse Handly, o kojem \u0107emo detaljnije govoriti (od navedenih komponenti Eclipse-a, on trenutno nije najpoznatiji).<\/p>\n<p><b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/handly\/\">Eclipse Handly<\/a><\/noindex><\/b>, potprojekt glavnog projekta Eclipse Technology, pojavilo se kao rezultat inicijalne doprinose koda u Eclipse Foundation, kojeg je izvr\u0161ila tvrtka 1C 2014. godine. Od tada tvrtka 1C nastavlja podr\u017eavati razvoj projekta: committeri Handly su zaposlenici tvrtke. Projekt je mali, ali zauzima prili\u010dno jedinstvenu ni\u0161u unutar Eclipse-a: njegova glavna svrha je podr\u017eati razvoj modela temeljenih na rukohvatima.<\/p>\n<p>Glavni arhitektonski principi modela temeljenih na rukohvatima, poput idioma rukohvat\/tijelo, razmatrani su ranije na primjeru modela resursa i Java modela. Tako\u0111er je napomenuto da su i model resursa i Java model va\u017ene osnove za Eclipse Java razvojne alate (JDT). A budu\u0107i da prakti\u010dki svi *DT projekti Eclipse imaju arhitekturu sli\u010dnu JDT-u, ne bi bilo preuveli\u010davanje re\u0107i da modeli temelji na rukohvatima le\u017ee u osnovi mnogih, ako ne i svih IDE-a, izgra\u0111enih na Eclipse Platformi. Na primjer, u Eclipse C\/C++ razvojnim alatima (CDT) postoji model temeljen na rukohvatima za C\/C++, koji igra u arhitekturi CDT istu ulogu kao i Java model u JDT-u.<\/p>\n<p>Prije pojave Handly, Eclipse nije nudio specijalizirane biblioteke za izradu jezika temeljenog na rukohvatima. Postoje\u0107i modeli stvoreni su uglavnom neposrednom prilagodbom koda Java modela (poznatog kao kopiraj\/zalijepi), <i>u slu\u010dajevima kada to dopu\u0161ta<\/i> Eclipse javna licenca (EPL). (O\u010digledno je da, recimo, za projekte samog Eclipse-a to obi\u010dno nije pravni problem, \u0161to se ne mo\u017ee re\u0107i za proizvode s vlasni\u010dkim kodom.) Osim karakteristi\u010dnog kaosa, ova metoda dovodi do dobro poznatih problema: dupliciranja koda, gre\u0161aka uvedenih tijekom prilagodbe, itd. \u0160to je jo\u0161 gore, rezultantni modeli ostaju 'stvar u sebi' i ne koriste postoje\u0107i potencijal za unifikaciju. Ipak, isticanje zajedni\u010dkih pojmova i protokola za modele jezika temeljenog na rukohvatima moglo bi dovesti do stvaranja ponovo upotrebljivih komponenti za rad s njima, sli\u010dno onome kako je to postignuto s EMF-om.<\/p>\n<p>Ne mo\u017ee se re\u0107i da u Eclipse-u nije bilo razumijevanja ovih problema. Jo\u0161 2005. godine <noindex><a rel=\"nofollow\" href=\"https:\/\/www.xing.com\/profile\/Martin_Aeschlimann\">Martin Aeschlimann<\/a><\/noindex>, generaliziraju\u0107i iskustvo razvoja prototipa CDT-a, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.eclipse.org\/org\/langsymp\/position_paper_martin_aeschlimann.html\">argumentirao<\/a><\/noindex> potreba za stvaranjem zajedni\u010dke infrastrukture za jezi\u010dne modele, uklju\u010duju\u0107i i modele temeljene na handleu. No, kao \u0161to to obi\u010dno biva, zbog prioritetnijih zadataka ove ideje nikada nisu realizirane. U me\u0111uvremenu, faktorizacija koda *DT-projekata i dalje ostaje jedna od nedovoljno obra\u0111enih tema u Eclipseu.<\/p>\n<p>U odre\u0111enom smislu, projekt Handly ima za cilj rje\u0161avati otprilike iste probleme kao EMF, ali za modele temeljene na handleu, a prvenstveno jezi\u010dne (tj. one koje predstavljaju elemente strukture nekog programskog jezika). U nastavku su navedeni osnovni ciljevi koji su postavljeni prilikom projektiranja Handlyja:<\/p>\n<ul>\n<li>Izdvajanje glavnih apstrakcija oblasti interesa.<\/li>\n<li>Smanjenje napora i pobolj\u0161anje kvalitete implementacije jezi\u010dnih modela temeljenih na handleu kroz ponovnu upotrebu koda.<\/li>\n<li>Pru\u017eanje unificiranog API-ja na meta-nivou za rezultantne modele, koji omogu\u0107uje stvaranje zajedni\u010dkih komponenti IDE-a koje rade s jezi\u010dnim modelima temeljenim na handleu.<\/li>\n<li>Fleksibilnost i skalabilnost.<\/li>\n<li>Integracija s Xtextom (u zasebnoj sloju).<\/li>\n<\/ul>\n<p>\nZa identifikaciju zajedni\u010dkih pojmova i protokola analizirane su postoje\u0107e implementacije jezi\u010dnih modela temeljenih na handleu. Glavni su su\u010delja i osnovne implementacije koje pru\u017ea Handly, prikazani na slici 8.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" src=\"\/wp-content\/uploads\/2019\/04\/47f4bf74093245334b8d67b149734dfc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Slika 8. Zajedni\u010dka su\u010delja i osnovne implementacije elemenata Handly<\/b><\/p>\n<p>Su\u010delje IElement predstavlja handle elementa i zajedni\u010dko je za elemente svih modela temeljenih na Handly. Apstraktna klasa Element implementira generi\u010dki mehanizam handle\/body (slika 9).<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" src=\"\/wp-content\/uploads\/2019\/04\/0651c1f284b7edfa36313d4b51d72f08.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Slika 9. IElement i generi\u010dka implementacija handle\/body<\/b><\/p>\n<p>Osim toga, Handly pru\u017ea generi\u010dki mehanizam obavje\u0161tavanja o promjenama elemenata modela (slika 10). Kao \u0161to se mo\u017ee vidjeti, u cjelini je sli\u010dan mehanizmima obavje\u0161tavanja implementiranim u modelu resursa i Java modelu, te koristi IElementDelta za unificirano predstavljanje informacija o promjenama elementa.<\/p>\n<p><img decoding=\"async\" alt=\"Eclipse kao tehnolo\u0161ka platforma za 1C:Enterprise razvojne alate\" src=\"\/wp-content\/uploads\/2019\/04\/cbdec8cf874308e0fa9dd96d04f62703.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Slika 10. Zajedni\u010dka su\u010delja i osnovne implementacije mehanizma obavje\u0161tavanja Handly<\/b><\/p>\n<p>Gore opisani dio Handlyja (slike 9 i 10) mo\u017ee se koristiti za predstavljanje gotovo bilo kojih modela temeljenih na handleu. Za stvaranje <i>jezi\u010dnih<\/i> modela, projekt nudi dodatnu funkcionalnost \u2013 posebno, zajedni\u010dka su\u010delja i osnovne implementacije za elemente strukture izvornog teksta, takozvane <i>izvorne elemente<\/i> (slika 8). Su\u010delje ISourceFile predstavlja izvorni datoteku, dok ISourceConstruct predstavlja element unutar izvorne datoteke. Apstraktne klase SourceFile i SourceConstruct implementiraju generi\u010dke mehanizme za podr\u0161ku radu s izvorim datotekama i njihovim elementima, kao \u0161to su rad s tekstualnim me\u0111uspremnicima, vezivanje na koordinate elementa u izvornoj datoteci, uskla\u0111ivanje modela s trenutnim sadr\u017eajem me\u0111uspremnika radne kopije, itd. Implementacija ovih mehanizama obi\u010dno predstavlja dovoljno slo\u017een zadatak, a Handly mo\u017ee zna\u010dajno smanjiti napore u razvoju jezi\u010dnih modela koji se temelje na handle-ima pru\u017eaju\u0107i kvalitetne osnovne implementacije.<\/p>\n<p>Osim osnovnih mehanizama navedenih gore, Handly nudi infrastrukturu za tekstualne me\u0111uspremnike i 'snapshot-ove', podr\u0161ku za integraciju s urednicima izvorne kodove (uklju\u010duju\u0107i ugra\u0111enu integraciju s Xtext editorom), kao i neke op\u0107e UI komponente koje rade s modelima temeljenim na Handly-ju, poput outline framework-a. Za ilustraciju svojih mogu\u0107nosti, projekt pru\u017ea nekoliko primjera, uklju\u010duju\u0107i implementaciju Java modela na Handly-ju. (U usporedbi s punom implementacijom Java modela u JDT-u, ovaj model je namjerno pojednostavljen radi ve\u0107e preglednosti.)<\/p>\n<p>Kao \u0161to je ranije napomenuto, ozbiljna pa\u017enja prilikom inicijalnog dizajniranja Handly-ja i daljnjeg razvoja posve\u0107ena je i nastavlja se posve\u0107ivati skalabilnosti i fleksibilnosti. <\/p>\n<p>U principu, modeli temeljen na handle-ima su prili\u010dno dobro skalabilni 'po dizajnu'. Na primjer, idiom handle\/body omogu\u0107ava ograni\u010davanje koli\u010dine memorije koju model koristi. Me\u0111utim, postoje i odre\u0111ene nijanse. Tako je prilikom ispitivanja Handly-a na skalabilnost otkriven problem u implementaciji mehanizma obavje\u0161tavanja \u2013 pri promjeni velikog broja elemenata, izgradnja delta trajala je predugo. Ispostavilo se da isti problem postoji i u Java modelu JDT-a, iz kojeg je u svoje vrijeme adaptiran odgovaraju\u0107i kod. Popravili smo gre\u0161ku u Handly-ju i pripremili sli\u010dan patch za JDT, koji je s zahvalno\u0161\u0107u prihva\u0107en. To je samo jedan od primjera gdje bi implementacija Handly-a u postoje\u0107e realizacije modela mogla biti potencijalno korisna, jer bi u tom slu\u010daju takvu gre\u0161ku bilo mogu\u0107e ispraviti na samo jednom mjestu.<\/p>\n<p>Kako bi se implementacija Handly u postoje\u0107e modele u\u010dinila tehni\u010dki mogu\u0107om, knji\u017enica mora imati zna\u010dajnu fleksibilnost. Glavni problem je o\u010duvanje unazadne kompatibilnosti API modela. Ovaj zadatak je re\u0161en <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/NewIn05\">Handly 0.5<\/a><\/noindex> jasnim odvojenjem model-specifi\u010dnog API-ja, koji defini\u0161e i potpuno kontroli\u0161e programer, od unificiranog API-ja meta-nivoa koji pru\u017ea knji\u017enica. To ne samo da omogu\u0107ava tehni\u010dku implementaciju Handly-a u postoje\u0107e realizacije, ve\u0107 tako\u0111er pru\u017ea programeru novog modela zna\u010dajnu slobodu u dizajniranju API-ja.<\/p>\n<p>Fleksibilnost ima i druge aspekte. Na primer, Handly gotovo ne postavlja ograni\u010denja na strukturu modela i mo\u017ee se koristiti kako za modeliranje jezika op\u0107e namene, tako i za jezike usmerene na specifi\u010dne domene. Pri izgradnji strukture izvornog fajla, Handly ne propisuje odre\u0111eni oblik predstavljanja AST-a i u principu ne zahteva \u010dak ni postojanje AST-a, \u010dime osigurava kompatibilnost sa prakti\u010dno bilo kojim mehanizmima sintakti\u010dke analize. Na kraju, Handly podr\u017eava potpunu integraciju s Eclipse radnim okru\u017eenjem, ali tako\u0111er mo\u017ee raditi i direktno s datote\u010dnim sistemima, 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 uvek nije kona\u010dno definisan, Handly se ve\u0107 koristi u dva velika komercijalna proizvoda koja su rizikovala da postanu \u201erani usvojitelji\u201c, i moram re\u0107i, za sada nemaju razloga za \u017ealjenje.<\/p>\n<p>Kao \u0161to je ranije navedeno, jedan od tih proizvoda je 1C:Enterprise Development Tools, gde se Handly od samog po\u010detka koristi za modelovanje elemenata visokog nivoa strukture jezika 1C:Enterprise, 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 aplikacije (application-specific instruction-set processor, ASIP), kori\u0161\u0107eno 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 koristi Handly u produkciji od 2015. godine, po\u010dev\u0161i od verzije Handly 0.2. Najnovija verzija Codasip Studija koristi verziju 0.5, objavljenu u lipnju 2016. godine. Ond\u0159ej Il\u010d\u00edk, koji vodi razvoj IDE-a u Codasipu, u kontaktu je s projektom, pru\u017eaju\u0107i izuzetno va\u017enu povratnu informaciju od strane \"eksternog adutera\". \u010cak je uspio prona\u0107i malo slobodnog vremena da se izravno uklju\u010di u razvoj projekta, implementiraju\u0107i UI sloj (~ 4000 linija koda) za jedan od primjera Handly, model Java. Detaljnije informacije \"iz prve ruke\" o kori\u0161tenju Handly od strane adutera mogu se prona\u0107i na stranici <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.eclipse.org\/Handly\/Adopters\">Pri\u010de o uspjehu<\/a><\/noindex> projekta.<\/p>\n<p>Nadamo se da \u0107e nakon izdanja verzije 1.0 s jamstvom stabilnosti API-ja i izlaska projekta iz stanja inkubacije, Handly dobiti nove adutere. Za sada, projekt nastavlja s ispitivanjem i daljnjim unapre\u0111enjem API-ja, izdaju\u0107i po dva \"velika\" izdanja godi\u0161nje \u2013 u lipnju (na isti datum kao i istovremeno izdanje Eclipse) i prosincu, osiguravaju\u0107i predvidljiv raspored na koji se aduteri mogu osloniti. Tako\u0111er, va\u017eno je napomenuti da stopa gre\u0161aka projekta ostaje stabilno niska, a Handly od samih prvih verzija pouzdano radi u proizvodima ranih adutera. Za daljnje upoznavanje s Eclipse Handly mo\u017eete koristiti <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pisv\/gethandly\/wiki\">Uvodni vodi\u010d<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"http:\/\/www.eclipse.org\/downloads\/download.php?file=\/handly\/docs\/handly-overview.pdf&amp;r=1\">Arhitektonski 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\/hr\/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=\"hr_HR\" \/>\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\/hr\/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 kao tehnolo\u0161ka platforma za 1C:Enterprise Development Tools | ProHoster","description":"Vjerojatno Eclipse ve\u0107 dugo ne treba posebno predstavljanje.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/eclipse-kak-tehnologicheskaya-platforma-dlya-1c-enterprise-development-tools","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/32464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=32464"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/32464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/24268"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=32464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=32464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=32464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}