Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks

Ilmselt, Eclipse ei vaja enam erilist tutvustamist. Paljud tunnevad Eclipse'i tĂ€nu Eclipse Java arendusvahenditele (JDT). Just see populaarne avatud lĂ€htekoodiga Java IDE seostatakse enamus arendajatega sĂ”naga “Eclipse”. Kuid Eclipse on ka laiendatav platvorm arendusvahendite integreerimiseks (Eclipse Platform) ning mitmed IDE-d, mis on vĂ€ljatöötatud selle baasil, sealhulgas JDT. Eclipse on ka Eclipse Project, tippprojekt, mis koordineerib Eclipse Platform ja JDT arendust ning Eclipse SDK – selle arenduse tulemus. LĂ”puks on Eclipse avatud allikas sihtasutus, millel on tohutu projektide kogukond, kusjuures mitte kĂ”ik need projektid ei ole kirjutatud Java's ega seotud arendusvahenditega (nt projektid Eclipse IoT ja Eclipse Science). Eclipse'i maailm on vĂ€ga mitmekesine.

KĂ€esolevas artiklis, mis on iseloomult ĂŒlevaatlik, proovime arutada mĂ”ningaid pĂ”hialuseid Eclipse'i arhitekturist kui platvormist integreeritud arendusvahendite loomiseks ja anda esmase ĂŒlevaate Eclipse'i komponentidest, mis moodustavad tehnoloogilise platvormi aluse “uuele Konfiguratorile” 1C: EttevĂ”tte, 1C:Enterprise Development Tools. Loomulikult on selline kĂ€sitlus paratamatult osaliselt pinnapealne ja ĂŒsna piiratud, sealhulgas seetĂ”ttu, et suunatakse mitte ainult Eclipse arendajatele kui sihtrĂŒhmale. Siiski loodame, et isegi kogenud Eclipse arendajad suudavad artiklist leida huvitavat teavet. NĂ€iteks rÀÀgime ĂŒhest “Eclipse'i saladusest”, suhteliselt uuest ja veel vĂ€he tuntud projektist Eclipse Handly, mis on loodud ja toetatud firma 1C.
Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks

Sissejuhatus Eclipse'i arhitektuuri

Arutame alguses mĂ”ned ĂŒldised aspektid Eclipse'i arhitektuurist nĂ€itena Eclipse Java arendusvahendid (JDT). JDT valik nĂ€itena ei ole juhuslik. See on esimene integreeritud arendus keskkond, mis ilmus Eclipse'is. Teised *DT Eclipse projektid, nagu nĂ€iteks Eclipse C/C++ Development Tooling (CDT), loodi hiljem ja laenasid nii pĂ”histruktuurid kui ka eraldi koodifragmente JDT-st. JDT-sse rajatud arhitektuuri alused kehtivad tĂ€napĂ€eval praktiliselt iga IDE puhul, mis on ehitatud Eclipse Platform'i peale, sealhulgas 1C:Enterprise Development Tools jaoks.

EelkĂ”ige tasub mĂ€rkida, et Eclipse'l on ĂŒsna selge arhitektuuriline kihistumine, kus eristatakse keelest sĂ”ltumatut funktsionaalsust konkreetsete programmeerimiskeelte toetamise funktsionaalsusest ning eristatakse UI-st sĂ”ltumatuid „tuum” komponente komponentidest, mis on seotud kasutajaliidese toe pakkumisega.

Nii mÀÀratleb Eclipse Platform ĂŒldise, keelest sĂ”ltumatu infrastruktuuri, samas kui Java arendustooted lisavad Eclipse'le tĂ€ieĂ”igusliku Java IDE. Nii Eclipse Platform kui ka JDT koosnevad mitmest komponendist, millest igaĂŒks kuulub kas UI-st sĂ”ltumatu „tuuma” vĂ”i UI kihisse (vt joonis 1).

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 1. Eclipse Platform ja JDT

Loetleme Eclipse Platformi pÔhikomponendid:

  • Runtime — MÀÀratleb pistikprogrammide infrastruktuuri. Eclipse'l on moodulaarne arhitektuur. PĂ”himĂ”tteliselt on Eclipse kogum „laiendamise punkte” ja „laiendusi”.
  • Workspace — Haldab ĂŒhte vĂ”i mitut projekti. Projekt koosneb kaustadest ja failidest, mis kuvatakse otse failisĂŒsteemis.
  • Standard Widget Toolkit (SWT) — Pakub baas kasutajaliidese elemente, mis on integreeritud operatsioonisĂŒsteemiga.
  • JFace — Pakub mitmeid UI raamistikke, mis on loodud SWT kĂ”rgemale.
  • Töölaud — MÀÀratleb Eclipse'i UI paradigmad: redigeerijad, vaated, perspektiivid.

Tasub mainida, et Eclipse Platform pakub ka palju teisi kasulikke komponente integreeritud arendusvahendite loomiseks, sealhulgas Debug, Compare, Search ja Team. Eraldi peaksite pöörama tĂ€helepanu JFace Textile – alusele „nutikate redigeerijate” loomisel. Kahjuks ei ole sellel artiklil vĂ”imalust vaadata neid komponente, samuti UI-kihti, seetĂ”ttu piirame selle osa ĂŒlevaadet Eclipse Platformi ja JDT peamistest „tuuma” komponentidest.

Core Runtime

Eclipse'i pistikprogrammide infrastruktuur pĂ”hineb OSGi ja seda pakub projekt Eclipse Equinox.Iga Eclipse'i pistikprogramm on OSGi-bundle. OSGi spetsifikatsioon mÀÀratleb muuhulgas versioonimise ja sĂ”ltuvuste lahendamise mehhanisme. Lisaks nendele standardsetele mehhanismidele toob Equinox sisse mĂ”iste laiendamise punkt. Iga plugin saab mÀÀrata oma laienduspunkte ja tuua sĂŒsteemi tĂ€iendavat funktsionaalsust ("laiendused"), kasutades selle sama vĂ”i teiste pluginatega mÀÀratud laienduspunkte. Üksikasjalik OSGi ja Equinox mehhanismide kirjeldus ĂŒletab selle artikli ulatuse. Tuleb mĂ€rkida, et Eclipse'i modulariseerimine on pĂ”hjalik (iga alamsĂŒsteem, sealhulgas kĂ€itusaeg, koosneb ĂŒhest vĂ”i mitmest pluginast) ning praktiliselt kĂ”ik Eclipse'is on laiendus. Need pĂ”himĂ”tted olid sisseehitatud Eclipse'i arhitektuuri juba ammu enne OSGi rakendamist (sel ajal kasutati oma tehnoloogiat, mis oli suurte sarnane OSGi-le).

Tuumiku tööruum

Praktiselt iga integreeritud arenduskeskkond, mis on loodud Eclipse'i platvormi pĂ”hjal, töötab Eclipse'i tööruumiga. Tööruum sisaldab tavaliselt IDE-s arendatava rakenduse lĂ€htekoodi. Tööruum peegeldab otse failisĂŒsteemi ja koosneb projektidest, mis sisaldavad kaustu ja faile. Need projektid, kaustad ja failid nimetatakse ressurssideks . Tööruumi rakendamine Eclipse'is toimib kui vahemĂ€lu failisĂŒsteemi suhtes, mis vĂ”imaldab oluliselt kiirendada ressursside puu lĂ€bimist. Lisaks pakub tööruum mitmeid tĂ€iendavaid teenuseid, sealhulgas ressursside muutuste teavitamise mehhanismi ja inkrementaalsete koostajate infrastruktuuri.

Tööruumi ja selle ressursside eest vastutab komponent Core Resources (plugin org.eclipse.core.resources). Konkreetselt pakub see komponent programmilist juurdepÀÀsu tööruumile kujul ressursside mudel. Selle mudeliga tĂ”husaks töötamiseks vajavad kliendid lihtsat viisi ressursi viite esitamiseks. Sel juhul oleks soovitav varjata objekt, mis otse hoiab ressursi olekut mudelis, kliendi juurdepÀÀsu eest. Vastasel juhul, nĂ€iteks faili kustutamisel, vĂ”ib klient jĂ€tkuvalt hoida objekti, mis ei ole enam mudelis olemas, tekitades sellega seotud probleeme. Eclipse lahendab selle ĂŒlesande, kasutades nn handle'i ressursi. Handle toimib vĂ”tmena (ta teab ainult teed ressursile tööruumis) ja kontrollib tĂ€ielikult juurdepÀÀsu mudeli sisemisele objekti, mis otse hoiab teavet ressursi oleku kohta. Antud disain on variatsioon mustrist Handle/Body.

Joonis 2 illustreerib Handle/Body idioomi ressursimudeli kontekstis. IResource liides esindab ressursi handle'it ja on API, erinevalt Resource klassist, mis rakendab seda liidest, ning ResourceInfo klassist, mis esindab body't ja ei ole API. TĂ”stame esile, et handle teab vaid tee ressursini vĂ”rreldes workspace'i juurega ega hoia endas viidet resource info'le. Resource info objektid moodustavad nn "elementide puu" (element tree). See andmestruktuur on tĂ€ielikult mĂ€lus materialiseeritud. Korrektse resource info eksemplari leidmiseks, mis vastab mĂ”nele handle'ile, kĂ€iakse element tree'd ĂŒle vastavalt sellele handle'ist salvestatud teele.

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 2. IResource ja ResourceInfo

Nagu me hiljem nÀeme, kasutatakse ressursimudeli pÔhistruktuuri (mida vÔib nimetada handle-pÔhiseks) ka Eclipse'is ja teiste mudelite puhul. Praegu toome vÀlja mÔned sellele disainile iseloomulikud omadused:

  • Handle on vÀÀrtusobjekt (value object). VÀÀrtusobjektid on immutable objektid, mille vĂ”rdsus ei pĂ”hine identiteedil. Selliseid objekte saab ohutult kasutada vĂ”tmetena hashitud konteinerites. Mitmed handle'i eksemplarid vĂ”ivad viidata samale ressursile. Nende vĂ”rdlemiseks tuleb kasutada meetodit equals(Object).
  • Handle mÀÀratleb ressursi kĂ€itumise, kuid ei hoia ressursi olekuteavet (ainukesed andmed, mida ta hoiab, on "vĂ”ti", tee ressursini).
  • Handle vĂ”ib viidata mitteeksisteerivale ressursile (kas ressursile, mida veel ei ole loodud, vĂ”i ressursile, mis on juba eemaldatud). Ressursi olemasolu saab kontrollida meetodi IResource.exists() abil.
  • MĂ”ned operatsioonid vĂ”ivad pĂ”hineda ainult informatsioonil, mis on salvestatud ise handle'i (nn handle-only operatsioonid). NĂ€iteks on IResource.getParent(), getFullPath jne. Ressurss ei pea tingimata eksisteerima sellise operatsiooni edukaks teostamiseks. Operatsioonid, milleks on vajalik ressursi olemasolu, viskavad erandi (CoreException), kui ressurs ei eksisteeri.

Eclipse pakub tĂ”husat mehhanismi workspace'i ressursside muudatuste teavitamiseks (vt joonis 3). Ressursse vĂ”ib muuta nii Eclipse IDE enda tegevuste kaudu kui ka failisĂŒsteemiga sĂŒnkroniseerimise kĂ€igus. MĂ”lemal juhul antakse teavitustele registreerunutele ĂŒksikasjalik teave muudatuste kohta "ressursi delta" vormis. Delta kirjeldab muutusi kahe oleku (al-)puu vahel ja on ise puu, mille iga sĂ”lm kirjeldab mĂ”ne ressursi muudatust ja sisaldab loendit jĂ€rgmise taseme deltadest, mis kirjeldavad alamressursside muudatusi.

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 3. IResourceChangeEvent ja IResourceDelta

Ressursidelt poolt vÀlja töötatud teavituste mehhanism omab jÀrgmisi omadusi:

  • Ühtne muudatus ja mitu muudatust kirjeldatakse sama struktuuri kaudu, kuna delta ehitatakse rekursiivse koostamise pĂ”himĂ”tte kohaselt. Klientide tellijad saavad hallata ressursimuudatuste teavitusi, jĂ€rgides delta puu rekursiivset allakĂ€iku.
  • Delta sisaldab tĂ€ielikku teavet ressursi muudatuse kohta, sealhulgas selle edasiviimist ja/vĂ”i sellega seotud "markerite" muudatusi (millena esitatakse nĂ€iteks kompileerimise vead).
  • Kuna viidatakse ressurssidele kĂ€sitsemise kaudu, saab delta loomulikult viidata eemalolevale ressursile.

Kuid nagu me peagi nÀeme, on ressursside mudeli muudatuste teavitamise mehhanismi peamised koostisosad asjakohased ka muude kÀsitsemise mehaanika mudelite jaoks.

JDT Core

Eclipse workspace'i ressursside mudel on pĂ”hiseadmeline keele- sĂ”ltumatu mudel. JDT Core komponent (plugin org.eclipse.jdt.core) pakub API-t workspace'i struktuuri navigatsiooniks ja analĂŒĂŒsiks Java perspektiivist, nii nimetatud "Java mudel" (Java model). See API on mÀÀratletud Java elementide terminoloogiaga, erinevalt ressursside mudeli pĂ”hisisust API-st, mis on mÀÀratletud kaustade ja failide mĂ”istes. Java elementide puu pĂ”hiinterfacid on kujutatud joonisel 4.

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 4. Java mudeli elemendid

Java mudel kasutab sama handle/body idiomi nagu ressursside mudel (joonis 5). IJavaElement on handle ja JavaElementInfo mĂ€ngib body rolli. IJavaElementliides mÀÀratleb protokolli, mis on ĂŒhine kĂ”ikidele Java elementidele. MĂ”ned selle meetoditest on ainult handle'i pĂ”hised: getElementName(), getParent() jne. JavaElementInfo objekt salvestab vastava elemendi oleku: selle struktuuri ja atribuudid.

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 5. IJavaElement ja JavaElementInfo

Java mudelil on mĂ”ned erinevused handle/body pĂ”hikujunduse rakenduses vĂ”rreldes ressursside mudeliga. Nagu eespool mainitud, on ressursside mudeli elementide puu, mille sĂ”lmedeks on resource info objektid, tĂ€ielikult mĂ€lus. Kuid Java mudelis vĂ”ib elementide arv olla oluliselt suurem kui ressursside puus, kuna see hĂ”lmab ka .java ja .class failide sisemist struktuuri: tĂŒĂŒbid, vĂ€ljad ja meetodid.

Kogu elementide puu tĂ€ielik materialiseerimine mĂ€lus vĂ€ltimiseks kasutab Java mudeli rakendus piiratud suurusega LRU-cache element info jaoks, kus vĂ”tmena on IJavaElement handle. Element info objekte luuakse nĂ”udmisel, kui toimub navigatsioon elementide puus. Samuti tĂ”rjutakse harva kasutatud elemendid vahelt, hoides mĂ€lutarbimist mudeli jaoks mÀÀratud kassa suurusega. See on veel ĂŒks eelis handle-pĂ”hisest disainist, mis varjab sellised rakenduse ĂŒksikasjad tĂ€ielikult kliendikoodilt.

Java elementide muutmise teavitamise mehhanism on ĂŒldjoontes sarnane ĂŒlaltoodud ressursside tööruumi muutuste jĂ€lgimise mehhanismiga. Klient, kes soovib jĂ€lgida Java mudelis toimuvaid muudatusi, registreerib end teavituste saamiseks, mis esitatakse ElementChangedEvent objekti kujul, mis sisaldab IJavaElementDelta (joonis 6).

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 6. ElementChangedEvent ja IJavaElementDelta

Java mudel ei sisalda teavet meetodite kehade vĂ”i nimede lahendamise kohta, seetĂ”ttu pakub JDT Core tĂ€iendavat (mitte handle-pĂ”hist) mudelit Java-koodide ĂŒksikasjalikuks analĂŒĂŒsiks: abstraktne sĂŒntaksipuu (abstraktne sĂŒntaksipuu, AST). AST esindab algteksti sĂŒntaktilise analĂŒĂŒsi tulemust. AST sĂ”lmed vastavad lĂ€hteaine struktuuri elementidele (deklareerimisele, operaatoritele, avald Pintusele jne) ning sisaldavad teavet vastava elemendi koordinaatide kohta algses tekstis, samuti (valikuliselt) teavet nimede lahendamise kohta, ese viidatud nii-öelda sidemed. Sidemed on objektid, mis esindavad nimetatud entiteete, nagu tĂŒĂŒbid, meetodid ja muutujad, mille kohta kompilaatoril on teave. Erinevalt AST sĂ”lmedest, mis moodustavad puu, toetavad sidemed ristviiteid ja tavaliselt moodustavad nad graafi. Abstraktne klass ASTNode on kĂ”igi AST sĂ”lmede ĂŒhine aluseks olev klass. ASTNode alamsĂ”lmed vastavad keele Java sĂŒntaktilistele konstruktsioonidele.

Kuna sĂŒntaktilised puud vĂ”ivad tarbida mĂ€rkimisvÀÀrselt palju mĂ€lu, siis JDT vahemĂ€lustab ainult ĂŒhte AST-d aktiivse redaktori jaoks. Erinevalt Java mudelist, kĂ€sitletakse AST-d tavaliselt kui "vahe-", "ajutist" mudelit, mille elementidele ei tohiks kliendid viidata vĂ€ljaspool konteksti, milles AST loodi.

Loetletud kolm mudelit (Java mudel, AST, sidemed) koos moodustavad aluse JDT-s "intelligentsete arendustööriistade" loomiseks, sealhulgas vÔimas Java redaktor koos mitmesuguste "abiainetega", erinevad allika töötlemise toimingud (sealhulgas nimede impordi nimekirja organiseerimine ja vormindamine vastavalt seadistatud stiilile), otsimise ja refaktoreerimise tööriistad. Samal ajal mÀngib Java mudel erilist rolli, kuna just seda kasutatakse arendatava rakenduse struktuuri visuaalse esitamise aluseks (nt Package Explorer, Outline, Search, Call Hierarchy ja Type Hierarchy).

Eclipse'i komponendid, mida kasutatakse 1C:Enterprise arendusvahendites

Joonisel 7 on nÀidatud Eclipse'i komponente, mis moodustavad 1C:Enterprise Development Tools tehnoloogilise platvormi aluse.

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 7. Eclipse platvorm 1C:Enterprise Development Tools jaoks

Eclipse platform pakub pÔhistruktuuri. Oleme kÀsitlenud mÔningaid selle infrastruktuuri aspekte eelnevas jaotises.

Eclipse'i modelleerimisraamistik (EMF) pakub ĂŒldisi vahendeid struktureeritud andmete modelleerimiseks. EMF on integreeritud Eclipse Platformiga, kuid seda saab kasutada ka iseseisvalt tavalistes Java rakendustes. Algajad Eclipse arendajad on sageli EMF'ga juba hĂ€sti kursis, kuigi nad ei pruugi veel tĂ€ielikult mĂ”ista Eclipse Platformi nĂŒansse. Üks pĂ”hjusi, miks see on nii tuntud, on universaalne disain, mis hĂ”lmab ka ĂŒhtset API meta-tasandil, mis vĂ”imaldab ĂŒldiselt töötada iga EMF mudeliga. EMF pakutavad baasteostused mudeliobjektide jaoks ja meta-mudeli pĂ”hine mudelikoode genereerimise alam-sĂŒsteem suurendavad mĂ€rkimisvÀÀrselt arenduskiirust ja vĂ€hendavad vigade arvu. Samuti sisaldab EMF mehhanisme mudelite serialiseerimiseks, mudeli muudatuste jĂ€lgimiseks ja palju muud.

Nagu iga tĂ”eliselt universaalne tööriist, sobib EMF laia valiku modelleerimisĂŒlesannete lahendamiseks, kuid mĂ”ned mudeliklassid (nĂ€iteks eespool kĂ€sitletud handle-pĂ”hised mudelid) vĂ”ivad vajada spetsiifilisemaid modelleerimisvahendeid. RÀÀkida EMF'ist on tĂ€namatu ettevĂ”tmine, eriti ĂŒhe artikli piirides, kuna see on teema eraldi raamatu jaoks, ja ĂŒsna mahuka. TĂ”stame esile vaid seda, et EMF'i aluseks olev kvaliteetne ĂŒldistuste sĂŒsteem on vĂ”imaldanud luua terve hulga modelleerimisprojekte, mis kuuluvad ĂŒlemise taseme projekti. Eclipse Modelleerimine koos EMF'iga. Üks selline projekt on Eclipse Xtext.

Eclipse Xtext pakub 'teksti modelleerimise' infrastruktuuri. Xtext kasutab ANTLR sĂŒntaktilise analĂŒĂŒsi jaoks lĂ€hteteksti ja EMF-i tulemuse ASG (abstraktse semantilise graafiku, mis sisuliselt on AST ja bind’ide kombinatsioon), mida nimetatakse ka "semantilise mudelina". Xtext abil modelleeritud keele grammatika kirjeldatakse Xtexti omas keeles. See vĂ”imaldab mitte ainult genereerida grammatika kirjelduse ANTLR-ile, vaid ka saada AST serialiseerimise mehhanismi (st Xtext pakub nii parserit kui ka unparsereid), konteksti nĂ€punĂ€iteid ja mitmeid teisi keelekomponente. Teisest kĂŒljest on Xtextis kasutatav grammatika kirjeldamise keel vĂ€hem paindlik vĂ”rreldes nĂ€iteks ANTLR-i grammatika kirjeldamise keelega. SeetĂ”ttu tuleb mĂ”nikord Xtextile kĂŒlge „painutada” rakendatavat keelt, mis ei ole tavaliselt probleem, kui tegu on nullist arendatava keelega, kuid vĂ”ib olla vastuvĂ”etamatu juba vĂ€ljakujunenud sĂŒntaksiga keelte puhul. Sellest hoolimata on Xtext praegu kĂ”ige kĂŒpsem, funktsionaalselt tĂ€ielik ja universaalne tööriist Eclipse’is programmeerimiskeelte ja nende arendustööriistade loomise jaoks. EelkĂ”ige on see ideaalne vahend kiireks prototĂŒĂŒpimiseks. ainepĂ”hised keeled (domain-specific language, DSL). Peale eelpool mainitud ANTLR ja EMF pĂ”hist "keele tuuma" pakub Xtext palju kasulikke kĂ”rgema taseme komponente, sealhulgas indekseerimise mehhanisme, inkrimenteerimise ehitust, "nutikat redigeerijat" ja palju, palju muud, kuid jĂ€tab kĂ”rvale keele handle-pĂ”hised mudelid. Nagu EMF, on Xtext eraldi raamatu vÀÀriline teema, ja me ei suuda isegi ĂŒlevaatlikult rÀÀkida kĂ”igist selle vĂ”imalustest.

1C:Enterprise Development Tools kasutavad aktiivselt nii EMF-i iseenesest kui ka mitmeid teisi Eclipse Modeling projekte. EelkĂ”ige on Xtext ĂŒks 1C:EttevĂ”tte arenduskeelte, nagu sisseehitatud programmeerimiskeel ja pĂ€ringukeel, arendusvahendite aluseid. Teine nende arendusvahendite alus on Eclipse Handly projekt, millele keskendume lĂ€hemalt (loetletud Eclipse'i komponentidest on see praegu kĂ”ige vĂ€hem tuntud).

Eclipse Handly, ĂŒlemprojekti Eclipse Technology alaprojekt, sai alguse koodide algsest sisendamisest Eclipse Foundationi, mille viis ellu ettevĂ”te 1C 2014. aastal. Sellest ajast alates jĂ€tkab ettevĂ”te 1C projekti arendamise toetamisega: committer'id Handly on ettevĂ”tte töötajad. Projekt on vĂ€ike, kuid omab ĂŒsna unikaalset niĆĄi Eclipse'is: selle peamine eesmĂ€rk on toetada handle-pĂ”histe mudelite arendamist.

Handle-pÔhiste mudelite pÔhistruktuuri pÔhimÔtted, nagu handle/body idiom, on juba varem kÀsitletud ressursside mudeli ja Java mudeli nÀitel. Samuti on mÀrgitud, et nii ressursside mudel kui ka Java mudel on olulised aluspÔhjad Eclipse Java arendusvahendite (JDT) jaoks. Kuna praktiliselt kÔik Eclipse'i *DT projektid jÀrgivad sarnast arhitektuuri nagu JDT, ei ole liialdus öelda, et handle-pÔhised mudelid kujundavad paljude, kui mitte kÔikide Eclipse Platformi peal ehitatud IDE-de aluse. NÀiteks Eclipse C/C++ Development Tooling (CDT) sisaldab handle-pÔhist C/C++ mudelit, mis mÀngib CDT arhitektuuris sama rolli, mis Java mudel JDT-s.

Enne Handly ilmumist ei pakkunud Eclipse spetsialiseeritud raamatukogusid keeleliste handle-pĂ”histe mudelite loomiseks. Praegu eksisteerivad mudelid on peamiselt loodud Java mudeli koodi otsese kohandamise (a.k.a. copy/paste) abil, neis olukordades, kus see on lubatud Eclipse'i avalik litsents (EPL). (MĂ”istetav, et nĂ€iteks Eclipse'i enda projektide puhul ei ole see tavaliselt Ă”iguste poolest probleem, mida ei saa öelda suletud lĂ€htekoodiga toodete kohta.) Lisaks sellele iseloomulikule sĂŒsteemituslikusele, toob selline meetod esile hĂ€sti tuntud probleemid: kopeerimise ja kohandamise kĂ€igus tekkinud koodi dubleerimine ning sellega seotud vead jne. Veelgi hullem, saadud mudelid jÀÀvad "asjaks iseeneses" ning ei kasuta olemasolevat potentsiaali ĂŒhtsuse saavutamiseks. Ometi vĂ”iks ĂŒhiste mĂ”istete ja protokollide esiletoomine handle-pĂ”histe mudelite jaoks viia taaskasutatavate komponentide loomisele, nagu see juhtus EMF-i puhul.

Ei saa öelda, et Eclipse'is ei mĂ”istetud neid probleeme. Juba 2005. aastal Martin Aeschlimann, kokkuvĂ”ttes CDT prototĂŒĂŒbi arendamise kogemus, tĂ”i vĂ€lja argumendid ĂŒldise infrastruktuuri loomise vajadus keelemudelite jaoks, sealhulgas ka handle-pĂ”histe mudelite jaoks. Kuid nagu tihti juhtub, jĂ€i nende ideede elluviimise aeg kĂ”rpriority ĂŒlesannete tĂ”ttu tulemata. Sellegipoolest jÀÀb koodi faktoriseerimine *DT-projektide jaoks endiselt ĂŒheks piisavalt arendamata teemaks Eclipse'is.

Teatud mĂ”ttes on projekt Handly suunatud sarnastele ĂŒlesannetele nagu EMF, kuid handle-pĂ”histe mudelite jaoks, eelkĂ”ige keelelistele (st, mis esindavad mĂ”ne programmeerimiskeele struktuuri elemente). Allpool on loetletud peamised eesmĂ€rgid, mis olid Handly kavandamisel.

  • Peamiste teemaalaste abstraktsioonide esiletoomine.
  • Keerukuse vĂ€hendamine ja keeleliste handle-pĂ”histe mudelite realiseerimise kvaliteedi tĂ”stmine koodi taaskasutamise kaudu.
  • Ühtse API pakkumine meta-tasandil tulemusk mudelite jaoks, mis vĂ”imaldab luua ĂŒhised IDE komponendid, mis töötavad keeleliste handle-pĂ”histe mudelitega.
  • Paindlikkus ja skaleeritavus.
  • Integratsioon Xtextiga (eraldises kihis).

Ühiste mĂ”istete ja protokollide esiletoomiseks analĂŒĂŒsiti olemasolevaid keelelisi handle-pĂ”hiseid mudelite realiseerimisi. Peamised liidesed ja baasseosed, mida Handly pakub, on esitatud joonisel 8.

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 8. Ühised liidesed ja baasseosed Handly elementidest

IElement liides esindab elemendi handle'it ja on ĂŒhine kĂ”igi Handly pĂ”histe mudelite elementide jaoks. Abstraktne Element klass realiseerib ĂŒldise handle/body mehhanismi (joonis 9).

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 9. IElement ja ĂŒldine handle/body realiseerimine

Lisaks pakub Handly ĂŒldist mehhanismi mudeli elementide muutmise teadete edastamiseks (joonis 10). Nagu nĂ€ha, on see ĂŒldiselt sarnane muutuste teavitamise mehhanismidega, mis on realiseeritud ressursi mudelis ja Java mudelis, ning kasutab IElementDelta't teabe ĂŒhtseks esitamiseks elemendi muutusest.

Eclipse kui tehnoloogia platvorm 1C:Enterprise arendustööriistade jaoks
Joonis 10. Ühised liidesed ja baasseosed Handly teavitamise mehhanismi jaoks

Eeltoodud Handly osa (joonis 9 ja 10) saab kasutada praktiliselt mis tahes handle-pĂ”histe mudelite esindamiseks. Keelestruktuuride mudelite loomiseks pakub projekt tĂ€iendavat funktsionaalsust - eelkĂ”ige ĂŒhiseid liideseid ja baasseoseid lĂ€htekoodi struktuuri elementide jaoks, nii nimetatud keelelistele mudelitele projekt pakub tĂ€iendavaid funktsioone - nimelt ĂŒhised liidesed ja baasseosed lĂ€htekoodi struktuuri elementide jaoks, nii nimetatud source elements (kujund 8). ISourceFile liides esindab lĂ€htefaili, samas kui ISourceConstruct on element lĂ€htefailis. Abstraktsed klassid SourceFile ja SourceConstruct rakendavad ĂŒldiselt mehhanisme lĂ€htefailide ja nende elementide töötamiseks, nĂ€iteks tekstibufferite haldamise, elemendi koordinaatide sidumise lĂ€htekstis, mudeli ĂŒhtlustamise töökopi hetke sisuga jne. Nende mehhanismide rakendamine on tavaliselt piisavalt keeruline ĂŒlesanne ja Handly vĂ”ib oluliselt vĂ€hendada keelepĂ”histe kĂ€sitlemismudelite arendamiseks vajalikku tööjĂ”udu, pakkudes kvaliteetseid pĂ”hiraamistikke.

Peale ĂŒlaltoodud pĂ”himehhanismide pakub Handly tekstibufferite ja „snapshot'ide” infrastruktuuri, toega lĂ€htekoodi redigeerijate integreerimisele (sealhulgas rakendatud „kastist vĂ€ljas” integreerimine Xtext redigeerijaga) ning mĂ”ned ĂŒldised UI-komponendid, mis töötavad Handly mudelitega, nagu outline framework. Oma vĂ”imaluste illustreerimiseks esitab projekt mitu nĂ€idet, sealhulgas Handly pĂ”hine Java mudel. (VĂ”rreldes tĂ€israkendusega Java mudel JDT-s, on see mudel ÀÀrmiselt lihtsustatud, et oleks kergem arusaada.)

Nagu eelnevalt mainitud, on Handly algse projekteerimise ja edasise arenduse kÀigus olnud tÔsine tÀhelepanu pööratud skaleeritavusele ja paindlikkusele.

PĂ”himĂ”tteliselt on handle-pĂ”hised mudelid “disaini” tĂ”ttu piisavalt hĂ€sti skaleeritavad. NĂ€iteks handle/body idiom vĂ”imaldab piirata mudeli tarbitavat mĂ€lu. Kuid on ka nĂŒansse. NĂ€iteks Handsy skaleeritavuse testimisel avastati probleem teavitamismehhanismi rakenduses - suure hulga elementide muutmisel vĂ”ttis delta genereerimine liiga palju aega. Selgus, et sama probleem esines ka Java mudelis JDT-s, millest vastav kood kunagi kohandati. Parandasime Handlys vea ja valmistasime sarnase patĆĄi JDT-le, mis vĂ”eti tĂ€nuga vastu. See on vaid ĂŒks nĂ€ide, kus Handly rakendamine olemasolevates mudelite rakendustes vĂ”iks olla potentsiaalselt kasulik, kuna sellisel juhul oleks sellise vea parandamine vĂ”imalik vaid ĂŒhes kohas.

Kuna Handly implementeerimine olemasolevates tehnilistes mudelites oleks tehniliselt vĂ”imalik, peab raamatukogu olema mĂ€rkimisvÀÀrselt paindlik. Peamine probleem on sĂ€ilitada API mudeli tagasipööratavus. See ĂŒlesanne on lahendatud Handly 0.5 spetsiaalselt mudeli API selge jaotumise kaudu, mida mÀÀratleb ja kontrollib tĂ€ielikult arendaja, universaalse meta-tasandi API eristamise kaudu, mida raamatukogu pakub. See mitte ainult ei muuda Handly rakendamist olemasolevates implementatsioonides tehniliselt vĂ”imalikuks, vaid annab ka uue mudeli arendajale mĂ€rkimisvÀÀrse vabaduse API projekteerimisel.

Paindlikkusel on ka muid aspekte. NĂ€iteks ei sea Handly praktiliselt mingeid piiranguid mudeli struktuurile ning seda saab kasutada nii ĂŒldkeeleline mudeldamine kui ka valdkondade spetsiifilised keeled. Algfaili struktuuri loomisel ei kehtesta Handly mingit kindlat AST esitusvormi ja pĂ”himĂ”tteliselt ei nĂ”ua ta isegi AST olemasolu, tagades seelĂ€bi ĂŒhilduvuse peaaegu kĂ”ikide sĂŒntakside analĂŒĂŒsi mehhanismidega. LĂ”puks toetab Handly tĂ€ielikku integratsiooni Eclipse tööruumiga, kuid vĂ”ib töötada ka otse failisĂŒsteemidega, tĂ€nu integratsioonile Eclipse File System (EFS).

Praegune versioon Handly 0.6 vĂ€lja anti 2016. aasta detsembris. Kuigi projekt on praegu inkubeerimisfaasis ja API ei ole veel lĂ”plikult kindlaks mÀÀratud, kasutatakse Handly juba kahes suures kaubanduslikus tootes, mis julgevad astuda „varajaste adopteerijate“ rolli, ning tuleb öelda, et nad ei kahetse.

Nagu eelnevalt mainitud, on ĂŒks neist toodetest – 1C:Enterprise Development Tools, kus Handly on algusest peale kasutusel kĂ”rgetasemeliste struktuuride mudeldamiseks 1C:EttevĂ”te keelte, nagu sisseehitatud programmeerimiskeel ja pĂ€ringukeel. Teine toode on ĂŒldiselt vĂ€hem tuntud. See on Codasip Studio, integreeritud keskkond probleemipĂ”histe protsessorite (application-specific instruction-set processor, ASIP) projekteerimiseks, mida kasutatakse nii TĆĄehhi ettevĂ”ttes Codasip kui ka selle klientide seas, keda on AMD, AVG, Mobileye, Sigma Designs. Codasip kasutab Handly't tootmises alates 2015. aastast, alustades versioonist Handly 0.2. Viimane praegune vĂ€ljaanne Codasip Studio kasutab versiooni 0.5, mis ilmus 2016. aasta juunis. Ondƙej Ilčík, kes juhib IDE arendust Codasipis, on projektiga kontaktis, esitades ÀÀrmiselt olulist tagasisidet „kolmanda osapoole adopteerijana“. Tal Ă”nnestus isegi leida veidi vaba aega, et otseselt osaleda projekti arenduses, rakendades UI kihti (umbes 4000 rida koodi) ĂŒhe Handly nĂ€ite, Java mudeli, jaoks. Rohkem ĂŒksikasju „esimese allika“ kohta Handly kasutamisest adopteerijate seas on saadaval lehelt Edukad lood projekti.

Loodame, et pĂ€rast versiooni 1.0 vĂ€ljalaskmist, millega kaasneb API stabiilsuse garantii ja projekti inkubatsioonist vĂ€ljaviimine, tuleb Handlyle juurde uusi adopteerijaid. Seni jĂ€tkab projekt API testimist ja edasist tĂ€iustamist, vĂ€ljastades aastas kaks „suurte“ vĂ€ljaannet – juunis (samal kuupĂ€eval, mil toimub ka Eclipse'i samal ajal toimuva vĂ€ljaande vĂ€ljalaskmine) ja detsembris, tagades ennustatava ajakava, millele adopteerijad saavad toetuda. VĂ”ib lisada, et projekti „veavoolu“ nĂ€itaja pĂŒsib pidevalt madalal tasemel ja Handly töötab usaldusvÀÀrselt varajaste adopteerijate toodetes alates esimestest versioonidest. Edasi tutvumiseks Eclipse Handly'ga saab kasutada Alustamise juhend ja Arhitektuuri ĂŒlevaade.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster