Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools

Var bÅ«t, Aptumsums jau sen nav vajadzÄ«gs Ä«paÅ”s ievads. Daudzi cilvēki ir iepazinuÅ”ies ar Eclipse, pateicoties Eclipse Java izstrādes rÄ«kiem (JDT). TieÅ”i Å”o populāro atvērtā pirmkoda Java IDE vairums izstrādātāju saista ar vārdu ā€œEclipseā€. Tomēr Eclipse ir gan paplaÅ”ināma platforma izstrādes rÄ«ku integrÄ“Å”anai (Eclipse platforma), gan vairākas uz tās bāzes veidotas IDE, tostarp JDT. Eclipse ir gan Eclipse projekts, augstākā lÄ«meņa projekts, kas koordinē Eclipse platformas un JDT izstrādi, gan Eclipse SDK, kas ir Ŕīs izstrādes rezultāts. Visbeidzot, Eclipse ir atvērtā pirmkoda fonds ar milzÄ«gu projektu kopienu, no kuriem ne visi ir rakstÄ«ti Java vai saistÄ«ti ar izstrādes rÄ«kiem (piemēram, projektiem Eclipse IoT Šø Aptumsuma zinātne). Eclipse pasaule ir ļoti daudzveidÄ«ga.

Å ajā rakstā, kas ir pārskats, mēs mēģināsim aplÅ«kot dažus Eclipse arhitektÅ«ras pamatus kā platformu integrētu izstrādes rÄ«ku izveidei un sniegsim sākotnējo priekÅ”statu par Eclipse komponentiem, kas veido tehnoloÄ£ijas pamatu. platforma ā€œjaunajam konfiguratoramā€ 1C: Enterprise. 1C: uzņēmuma attÄ«stÄ«bas rÄ«ki. Protams, Ŕāds apskats neizbēgami bÅ«s lielā mērā virspusējs un diezgan ierobežots, tostarp tāpēc, ka mēs koncentrējamies ne tikai uz Eclipse izstrādātājiem kā mērÄ·auditoriju. Tomēr mēs ceram, ka pat pieredzējuÅ”i Eclipse izstrādātāji rakstā varēs atrast interesantu informāciju. Piemēram, mēs runāsim par vienu no ā€œAptumsuma noslēpumiemā€, salÄ«dzinoÅ”i jaunu un mazpazÄ«stamu projektu. Eclipse Handly, kuru dibināja un atbalstÄ«ja 1C.
Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools

Ievads Eclipse arhitektūrā

Vispirms apskatÄ«sim dažus vispārÄ«gus Eclipse arhitektÅ«ras aspektus, izmantojot piemēru Eclipse Java izstrādes rÄ«ki (JDT). JDT kā piemēra izvēle nav nejauÅ”a. Å Ä« ir pirmā integrētā izstrādes vide, kas parādās Eclipse. Citi *DT Eclipse projekti, piemēram, Eclipse C/C++ Development Tooling (CDT), tika izveidoti vēlāk un aizņēmās gan arhitektÅ«ras pamatprincipus, gan atseviŔķus pirmkoda fragmentus no JDT. ArhitektÅ«ras pamati, kas noteikti JDT, mÅ«sdienās ir aktuāli gandrÄ«z jebkuram IDE, kas izveidots uz Eclipse platformas, tostarp 1C: Enterprise Development Tools.

Pirmkārt, jāatzÄ«mē, ka Eclipse ir raksturÄ«gs diezgan skaidrs arhitektoniskais slāņojums, no valodas neatkarÄ«gas funkcionalitātes nodalÄ«Å”ana no funkcionalitātes, kas paredzēta konkrētu programmÄ“Å”anas valodu atbalstam, un no lietotāja saskarnes neatkarÄ«go ā€œpamataā€ komponentu atdalÄ«Å”anu no saistÄ«tajiem komponentiem. ar atbalsta lietotāja interfeisu.

Tādējādi Eclipse platforma definē kopÄ«gu, no valodas neatkarÄ«gu infrastruktÅ«ru, un Java izstrādes rÄ«ki Eclipse pievieno pilnvērtÄ«gu Java IDE. Gan Eclipse platforma, gan JDT sastāv no vairākiem komponentiem, no kuriem katrs pieder vai nu no UI neatkarÄ«gam ā€œkodolamā€ vai lietotāja saskarnes slānim (1. attēls).

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
RÄ«si. 1. Eclipse Platform un JDT

Uzskaitīsim Eclipse platformas galvenās sastāvdaļas:

  • Runtime ā€” definē spraudņa infrastruktÅ«ru. Eclipse raksturo modulāra arhitektÅ«ra. BÅ«tÄ«bā Eclipse ir "paplaÅ”inājuma punktu" un "paplaÅ”inājumu" kolekcija.
  • Darbvieta ā€” pārvalda vienu vai vairākus projektus. Projekts sastāv no mapēm un failiem, kas ir tieÅ”i saistÄ«ti ar failu sistēmu.
  • Standarta logrÄ«ku rÄ«kkopa (SWT) - NodroÅ”ina pamata lietotāja interfeisa elementus, kas integrēti operētājsistēmā.
  • JFace ā€” NodroÅ”ina vairākas lietotāja saskarnes ietvarus, kas izveidoti uz SWT.
  • Workbench ā€” Definē Eclipse UI paradigmu: redaktorus, skatus, perspektÄ«vas.

Jāsaka, ka Eclipse platforma nodroÅ”ina arÄ« daudzus citus noderÄ«gus komponentus integrētu izstrādes rÄ«ku, tostarp atkļūdoÅ”anas, salÄ«dzināŔanas, meklÄ“Å”anas un komandas izveidei. ÄŖpaÅ”i jāpiemin JFace Text - pamats avota koda ā€œviedo redaktoruā€ izveidei. Diemžēl pat virspusēja Å”o komponentu, kā arÄ« lietotāja interfeisa slāņa komponentu pārbaude Ŕī raksta ietvaros nav iespējama, tāpēc atlikuÅ”ajā Ŕīs sadaļas daļā mēs aprobežosimies ar galveno ā€œpamatkomponentuā€ pārskatu. Eclipse platforma un JDT.

Galvenais izpildlaiks

Eclipse spraudņu infrastruktÅ«ra ir balstÄ«ta uz OSGi un ko nodroÅ”ina projekts Eklipse Equinox. Katrs Eclipse spraudnis ir OSGi komplekts. OSGi specifikācija jo Ä«paÅ”i nosaka mehānismus versiju veidoÅ”anai un atkarÄ«bas izŔķirÅ”anai. Papildus Å”iem standarta mehānismiem Equinox ievieÅ” Å”o koncepciju izpleÅ”anās punkti. Katrs spraudnis var definēt savus paplaÅ”inājuma punktus, kā arÄ« ieviest sistēmā papildu funkcionalitāti (ā€œpaplaÅ”inājumusā€), izmantojot paplaÅ”inājuma punktus, ko nosaka tas pats vai citi spraudņi. JebkurÅ” detalizēts OSGi un Equinox mehānismu apraksts ir ārpus Ŕī raksta darbÄ«bas jomas. Ņemsim vērā tikai to, ka Eclipse modularizācija ir pilnÄ«ga (jebkura apakÅ”sistēma, ieskaitot Runtime, sastāv no viena vai vairākiem spraudņiem), un gandrÄ«z viss Eclipse ir paplaÅ”inājums. Turklāt Å”ie principi tika iestrādāti Eclipse arhitektÅ«rā ilgi pirms OSGi ievieÅ”anas (tajā laikā viņi izmantoja savu tehnoloÄ£iju, kas bija daudz lÄ«dzÄ«ga OSGi).

Galvenā darbvieta

GandrÄ«z jebkura integrētā izstrādes vide, kas izveidota uz Eclipse platformas, darbojas ar Eclipse darbvietu. Tā ir darbvieta, kurā parasti ir IDE izstrādātās lietojumprogrammas pirmkods. Darbvieta tiek kartēta tieÅ”i uz failu sistēmu un sastāv no projektiem, kuros ir mapes un faili. Å ie projekti, mapes un faili tiek izsaukti resursus darbvieta. Darbvietas ievieÅ”ana programmā Eclipse kalpo kā keÅ”atmiņa saistÄ«bā ar failu sistēmu, kas ļauj ievērojami paātrināt resursu koka pārvietoÅ”anos. Turklāt darbvieta nodroÅ”ina vairākus papildu pakalpojumus, tostarp paziņoÅ”anas mehānisms par resursu izmaiņām Šø pakāpeniska celtnieka infrastruktÅ«ra.

Pamatresursu komponents (org.eclipse.core.resources spraudnis) ir atbildÄ«gs par darbvietas un tās resursu atbalstu. Jo Ä«paÅ”i Å”is komponents nodroÅ”ina programmatisku piekļuvi darbvietai veidlapā resursu modeļi. Lai efektÄ«vi strādātu ar Å”o modeli, klientiem ir nepiecieÅ”ams vienkārÅ”s veids, kā parādÄ«t saiti uz resursu. Å ajā gadÄ«jumā bÅ«tu vēlams no klienta piekļuves paslēpt objektu, kas modelÄ« tieÅ”i saglabā resursa stāvokli. Pretējā gadÄ«jumā, piemēram, faila dzÄ“Å”anas gadÄ«jumā klients var turpināt turēt objektu, kas modelÄ« vairs nav, ar no tā izrietoŔām problēmām. Eclipse atrisina Å”o problēmu, izmantojot kaut ko sauc rokturis resursu. Rokturis darbojas kā atslēga (tas zina tikai ceļu uz resursu darbvietā) un pilnÄ«bā kontrolē piekļuvi iekŔējā modeļa objektam, kas tieÅ”i glabā informāciju par resursa stāvokli. Å is dizains ir modeļa variācija Rokturis/korpuss.

RÄ«si. 2. attēlā ir parādÄ«ta roktura/Ä·ermeņa idioma, kas tiek piemērota resursu modelim. IResource interfeiss attēlo resursa rokturi un ir API, atŔķirÄ«bā no Resource klases, kas ievieÅ” Å”o saskarni, un ResourceInfo klases, kas apzÄ«mē pamattekstu, kas nav API. Mēs uzsveram, ka rokturis zina tikai ceļu uz resursu attiecÄ«bā pret darbvietas sakni un nesatur saiti uz resursa informāciju. Resursu informācijas objekti veido tā saukto ā€œelementu kokuā€. Å Ä« datu struktÅ«ra ir pilnÄ«bā materializēta atmiņā. Lai atrastu resursa informācijas instanci, kas atbilst rokturim, elementu koks tiek Ŕķērsots atbilstoÅ”i Å”ajā rokturā saglabātajam ceļam.

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
RÄ«si. 2. IResource un ResourceInfo

Kā redzēsim vēlāk, resursa modeļa (mēs to varētu saukt par roktura bāzes) pamata dizains tiek izmantots Eclipse arÄ« citiem modeļiem. Pagaidām uzskaitÄ«sim dažas Ŕī dizaina atŔķirÄ«gās Ä«paŔības:

  • Rokturis ir vērtÄ«bas objekts. VērtÄ«bu objekti ir nemainÄ«gi objekti, kuru vienlÄ«dzÄ«ba nav balstÄ«ta uz identitāti. Šādus objektus var droÅ”i izmantot kā atslēgu sajauktos konteineros. Vairāki roktura gadÄ«jumi var atsaukties uz vienu un to paÅ”u resursu. Lai tos salÄ«dzinātu, jāizmanto metode vienāds (Object).
  • Rokturis nosaka resursa uzvedÄ«bu, bet nesatur informāciju par resursa stāvokli (vienÄ«gie dati, ko tas glabā, ir "atslēga", ceļŔ uz resursu).
  • Rokturis var attiekties uz resursu, kas neeksistē (vai nu uz resursu, kas vēl nav izveidots, vai uz resursu, kas jau ir dzēsts). Resursa esamÄ«bu var pārbaudÄ«t, izmantojot metodi IResource.exists().
  • Dažas darbÄ«bas var Ä«stenot, pamatojoties tikai uz informāciju, kas glabājas paŔā rokturÄ« (tā sauktās tikai roktura darbÄ«bas). Piemēri ir IResource.getParent(), getFullPath() utt. Lai Ŕāda darbÄ«ba izdotos, resursam nav jābÅ«t. Ja resurss neeksistē, operācijas, kuru veiksmÄ«gai darbÄ«bai ir nepiecieÅ”ams resurss, rada CoreException.

Eclipse nodroÅ”ina efektÄ«vu mehānismu, lai paziņotu par darbvietas resursu izmaiņām (3. attēls). Resursi var mainÄ«ties vai nu paŔā Eclipse IDE veikto darbÄ«bu rezultātā, vai arÄ« sinhronizācijas ar failu sistēmu rezultātā. Abos gadÄ«jumos klientiem, kuri abonē paziņojumus, tiek sniegta detalizēta informācija par izmaiņām ā€œresursu deltaā€ veidā. Delta apraksta izmaiņas starp diviem darbvietas resursa (apakÅ”)koka stāvokļiem un pats par sevi ir koks, kura katrs mezgls apraksta izmaiņas resursā un satur delta sarakstu nākamajā lÄ«menÄ«, kas apraksta izmaiņas pakārtotajos resursos.

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
RÄ«si. 3. IResourceChangeEvent un IResourceDelta

PaziņoÅ”anas mehānismam, kura pamatā ir resursu deltas, ir Ŕādas Ä«paŔības:

  • Viena un daudzas izmaiņas ir aprakstÄ«tas, izmantojot vienu un to paÅ”u struktÅ«ru, jo delta tiek veidota, izmantojot rekursÄ«vās kompozÄ«cijas principu. Abonentu klienti var apstrādāt resursu maiņas paziņojumus, izmantojot rekursÄ«vu nolaiÅ”anos caur delta koku.
  • Delta satur pilnÄ«gu informāciju par izmaiņām resursā, ieskaitot tā kustÄ«bu un/vai izmaiņas ar to saistÄ«tajos ā€œmarÄ·ierosā€ (piemēram, kompilācijas kļūdas tiek attēlotas kā marÄ·ieri).
  • Tā kā atsauces uz resursiem tiek veiktas, izmantojot rokturi, delta, protams, var atsaukties uz attālo resursu.

Kā mēs drÄ«z redzēsim, galvenās resursu modeļa izmaiņu paziņoÅ”anas mehānisma konstrukcijas sastāvdaļas attiecas arÄ« uz citiem modeļiem, kuru pamatā ir rokturi.

JDT kodols

Eclipse darbvietas resursu modelis ir pamata valodas agnostisks modelis. JDT Core komponents (spraudnis org.eclipse.jdt.core) nodroÅ”ina API, lai pārvietotos un analizētu darbvietas struktÅ«ru no Java perspektÄ«vas, tā sauktais "Java modelis" (Java modelis). Å Ä« API ir definēta Java elementu izteiksmē pretstatā pamata resursa modeļa API, kas ir definēts kā mapes un faili. Java elementu koka galvenās saskarnes ir parādÄ«tas attēlā. 4.

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
Rīsi. 4. Java modeļa elementi

Java modelÄ« tiek izmantota tāda pati roktura/Ä·ermeņa idioma kā resursa modelÄ« (5. attēls). IJavaElement ir rokturis, un JavaElementInfo spēlē korpusa lomu. IJavaElement saskarne definē protokolu, kas ir kopÄ«gs visiem Java elementiem. Dažas no tā metodēm ir tikai apstrādājamas: getElementName(), getParent() utt. JavaElementInfo objekts saglabā atbilstoŔā elementa stāvokli: tā struktÅ«ru un atribÅ«tus.

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
RÄ«si. 5. IJavaElement un JavaElementInfo

Java modelim ir dažas atŔķirÄ«bas pamata roktura/korpusa dizaina ievieÅ”anā salÄ«dzinājumā ar resursa modeli. Kā minēts iepriekÅ”, resursu modelÄ« elementu koks, kura mezgli ir resursa informācijas objekti, ir pilnÄ«bā ietverts atmiņā. Bet Java modelim var bÅ«t ievērojami lielāks elementu skaits nekā resursu kokā, jo tas arÄ« atspoguļo .java un .class failu iekŔējo struktÅ«ru: tipus, laukus un metodes.

Lai izvairÄ«tos no visa atmiņā esoÅ”o elementu koka pilnÄ«gas materializācijas, Java modeļa ievieÅ”ana izmanto ierobežota izmēra LRU elementu informācijas keÅ”atmiņu, kur atslēga ir rokturis IJavaElement. elementu informācijas objekti tiek izveidoti pēc pieprasÄ«juma, pārvietojoties elementu kokā. Å ajā gadÄ«jumā no keÅ”atmiņas tiek izlikti retāk izmantotie vienumi, un modeļa atmiņas patēriņŔ paliek ierobežots lÄ«dz norādÄ«tajam keÅ”atmiņas izmēram. Å Ä« ir vēl viena uz roktura balstÄ«ta dizaina priekÅ”rocÄ«ba, kas pilnÄ«bā slēpj Ŕādas ievieÅ”anas detaļas no klienta koda.

Java elementu izmaiņu paziņoÅ”anas mehānisms kopumā ir lÄ«dzÄ«gs iepriekÅ” apspriestajam darbvietas resursu izmaiņu izsekoÅ”anas mehānismam. Klients, kurÅ” vēlas pārraudzÄ«t Java modeļa izmaiņas, abonē paziņojumus, kas tiek attēloti kā ElementChangedEvent objekts, kas satur IJavaElementDelta (6. attēls).

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
RÄ«si. 6. ElementChangedEvent un IJavaElementDelta

Java modelÄ« nav informācijas par metožu korpusiem vai nosaukumu izŔķirtspēju, tāpēc detalizētai Java valodā rakstÄ«ta koda analÄ«zei JDT Core nodroÅ”ina papildu (neuz roktura balstÄ«tu) modeli: abstrakts sintakses koks (abstrakts sintakses koks, AST). AST apzÄ«mē avota teksta parsÄ“Å”anas rezultātu. AST mezgli atbilst avota moduļa struktÅ«ras elementiem (deklarācijas, operatori, izteiksmes utt.) un satur informāciju par atbilstoŔā elementa koordinātām avota tekstā, kā arÄ« (pēc izvēles) nosaukumu izŔķirtspējas informāciju saiÅ”u veidā uz ts stiprinājumi. SaistÄ«bas ir objekti, kas pārstāv kompilatoram zināmas nosauktas entÄ«tijas, piemēram, tipus, metodes un mainÄ«gos. AtŔķirÄ«bā no AST mezgliem, kas veido koku, saistÄ«jumi atbalsta savstarpējas atsauces un parasti veido grafiku. Abstraktā klase ASTNode ir kopējā bāzes klase visiem AST mezgliem. ASTNode apakÅ”klases atbilst specifiskām Java valodas sintaktiskām konstrukcijām.

Tā kā sintakses koki var patērēt ievērojamu daudzumu atmiņas, JDT aktÄ«vajam redaktoram saglabā tikai vienu AST. AtŔķirÄ«bā no Java modeļa, AST parasti tiek uzskatÄ«ts par "starpposma", "pagaidu" modeli, kura locekļiem nevajadzētu atsaukties uz klientiem ārpus operācijas konteksta, kuras rezultātā tika izveidots AST.

UzskaitÄ«tie trÄ«s modeļi (Java modelis, AST, saistÄ«jumi) kopā veido pamatu ā€œinteliÄ£entu izstrādes rÄ«kuā€ izveidei JDT, ieskaitot jaudÄ«gu Java redaktoru ar dažādiem ā€œpalÄ«giemā€, dažādām darbÄ«bām avota koda apstrādei (ieskaitot importÄ“Å”anas saraksta organizÄ“Å”anu). nosaukumi un formatējums atbilstoÅ”i pielāgotajam stilam), meklÄ“Å”anas un pārveidoÅ”anas rÄ«ki. Å ajā gadÄ«jumā Java modelim ir Ä«paÅ”a loma, jo tas tiek izmantots kā pamats izstrādātās lietojumprogrammas struktÅ«ras vizuālam attēlojumam (piemēram, programmā Package Explorer, Outline, Search, Call Hierarchy un Tipa hierarhija).

Eclipse komponenti, kas izmantoti 1C:Enterprise Developments Tools

Attēlā 7. attēlā parādīti Eclipse komponenti, kas veido 1C:Enterprise Development Tools tehnoloģiju platformas pamatu.

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
Rīsi. 7. Eclipse kā platforma 1C:Enterprise Development Tools

Eclipse platforma nodroÅ”ina pamata infrastruktÅ«ru. IepriekŔējā sadaļā aplÅ«kojām dažus Ŕīs infrastruktÅ«ras aspektus.

Eclipse modelÄ“Å”anas ietvars (EMF) nodroÅ”ina vispārÄ«gu lÄ«dzekli strukturētu datu modelÄ“Å”anai. EMF ir integrēts Eclipse platformā, taču to var izmantot arÄ« atseviŔķi parastajās Java lietojumprogrammās. Diezgan bieži jaunie Eclipse izstrādātāji jau labi pārzina EMF, lai gan viņi vēl pilnÄ«bā neizprot Eclipse platformas sarežģījumus. Viens no Ŕādas pelnÄ«tās popularitātes iemesliem ir universālais dizains, kas cita starpā ietver vienotu meta lÄ«meņa API, kas ļauj vispārÄ«gi strādāt ar jebkuru EMF modeli. EMF nodroÅ”inātās modeļa objektu pamata implementācijas un uz metamodeļa bāzes modeļa koda Ä£enerÄ“Å”anas apakÅ”sistēma ievērojami palielina izstrādes ātrumu un samazina kļūdu skaitu. EMF satur arÄ« modeļus sērijveida mehānismus, modeļa izmaiņu izsekoÅ”anu un daudz ko citu.

Tāpat kā jebkurÅ” vispārējs rÄ«ks, EMF ir piemērots dažādu modelÄ“Å”anas problēmu risināŔanai, taču dažām modeļu klasēm (piemēram, modeļiem, kuru pamatā ir iepriekÅ” aprakstÄ«tie rokturi) var bÅ«t nepiecieÅ”ami specializētāki modelÄ“Å”anas rÄ«ki. Runāt par EML ir nepateicÄ«gs uzdevums, it Ä«paÅ”i viena raksta ierobežotajā robežās, jo tas ir atseviŔķas grāmatas temats un diezgan biezs. AtzÄ«mēsim tikai to, ka EMF pamatā esoŔā kvalitatÄ«vā vispārinājumu sistēma ļāva izveidot veselu virkni modelÄ“Å”anai veltÄ«tu projektu, kas ir iekļauti augstākā lÄ«meņa projektā. Aptumsuma modelÄ“Å”ana kopā ar paÅ”u EMF. Viens no Ŕādiem projektiem ir Eclipse Xtext.

Eclipse Xtext nodroÅ”ina "teksta modelÄ“Å”anas" infrastruktÅ«ru. Xtext izmanto ANTLR avota teksta un EMF parsÄ“Å”anai, lai attēlotu iegÅ«to ASG (abstrakts semantiskais grafiks, kas bÅ«tÄ«bā ir AST un saiÅ”u kombinācija), ko sauc arÄ« par "semantisko modeli". Xtext modelētās valodas gramatika ir aprakstÄ«ta Xtext paÅ”a valodā. Tas ļauj ne tikai Ä£enerēt ANTLR gramatikas aprakstu, bet arÄ« iegÅ«t AST serializācijas mehānismu (t.i., Xtext nodroÅ”ina gan parsētāju, gan atparsētāju), konteksta mājienu un vairākus citus valodas komponentus. No otras puses, Xtext lietotā gramatikas valoda ir mazāk elastÄ«ga nekā, piemēram, ANTLR lietotā gramatikas valoda. Tāpēc dažreiz ir nepiecieÅ”ams ā€œsaliektā€ ieviesto valodu uz Xtext, kas parasti nav problēma, ja mēs runājam par valodu, kas tiek izstrādāta no nulles, bet var bÅ«t nepieņemama valodām ar jau izveidotu sintaksi. Neskatoties uz to, Xtext paÅ”laik ir visnobrieduŔākais, ar funkcijām bagātākais un daudzpusÄ«gākais rÄ«ks Eclipse programmÄ“Å”anas valodu un to izstrādes rÄ«ku izveidei. Jo Ä«paÅ”i tas ir ideāls rÄ«ks ātrai prototipu veidoÅ”anai domēnam specifiskas valodas (domēna specifiskā valoda, DSL). Papildus iepriekÅ” minētajam ā€œvalodas kodolamā€, kura pamatā ir ANTLR un EMF, Xtext nodroÅ”ina daudz noderÄ«gu augstāka lÄ«meņa komponentu, tostarp indeksÄ“Å”anas mehānismus, pakāpenisku konstrukciju, ā€œviedo redaktoruā€ un daudz ko citu, taču tajā nav iekļauts rokturis. balstÄ«ti valodu modeļi. Tāpat kā EMF, arÄ« Xtext ir atseviŔķas grāmatas cienÄ«gs priekÅ”mets, un par visām tā iespējām Å”obrÄ«d diez vai varam runāt pat Ä«si.

1C: Enterprise Development Tools aktÄ«vi izmanto gan paÅ”u EMF, gan vairākus citus Eclipse Modeling projektus. Jo Ä«paÅ”i Xtext ir viens no tādu 1C:Enterprise valodu izstrādes rÄ«ku pamatiem kā iebÅ«vētā programmÄ“Å”anas valoda un vaicājumu valoda. Vēl viens Å”o izstrādes rÄ«ku pamats ir projekts Eclipse Handly, par kuru mēs runāsim sÄ«kāk (no uzskaitÄ«tajiem Eclipse komponentiem tas joprojām ir vismazāk zināms).

Eclipse Handly, augstākā lÄ«meņa projekta Eclipse Technology apakÅ”projekts, kas radās 1C sākotnējā koda ieguldÄ«juma rezultātā Eclipse Foundation 2014. gadā. KopÅ” tā laika 1C ir turpinājis atbalstÄ«t projekta attÄ«stÄ«bu: Handly committers ir uzņēmuma darbinieki. Projekts ir neliels, taču tas aizņem diezgan unikālu niÅ”u Eclipse: tā galvenais mērÄ·is ir atbalstÄ«t uz rokturiem balstÄ«tu modeļu izstrādi.

Uz rokturiem balstÄ«tu modeļu arhitektÅ«ras pamatprincipi, piemēram, roktura/Ä·ermeņa idioma, tika apspriesti iepriekÅ”, izmantojot resursu modeli un Java modeli kā piemērus. Tā arÄ« atzÄ«mēja, ka gan resursa modelis, gan Java modelis ir svarÄ«gs Eclipse Java izstrādes rÄ«ku (JDT) pamats. Un tā kā gandrÄ«z visiem *DT Eclipse projektiem ir JDT lÄ«dzÄ«ga arhitektÅ«ra, nebÅ«tu liels pārspÄ«lēts teikt, ka uz rokturiem balstÄ«ti modeļi ir pamatā daudziem, ja ne visiem IDE, kas veidoti uz Eclipse platformas. Piemēram, Eclipse C/C++ izstrādes rÄ«kam (CDT) ir uz roktura balstÄ«ts C/C++ modelis, kam CDT arhitektÅ«rā ir tāda pati loma kā Java modelim JDT.

Pirms Handly Eclipse nepiedāvāja specializētas bibliotēkas, lai izveidotu uz rokturiem balstÄ«tus valodu modeļus. PaÅ”laik esoÅ”ie modeļi tika izveidoti, galvenokārt tieÅ”i pielāgojot Java modeļa kodu (aka copy/paste), gadÄ«jumos, kad tas atļauj Eclipse publiskā licence (EPL). (AcÄ«mredzot, tas parasti nav juridisks jautājums, piemēram, paÅ”iem Eclipse projektiem, bet ne slēgtā pirmkoda produktiem.) Papildus tam raksturÄ«gajam nejauÅ”umam Å”is paņēmiens rada labi zināmas problēmas: koda dublÄ“Å”anās, ko rada, pielāgojoties kļūdām, utt. Sliktākais ir tas, ka iegÅ«tie modeļi paliek "lietas paÅ”i par sevi" un neizmanto apvienoÅ”anās iespējas. Taču kopēju koncepciju un protokolu izolÄ“Å”ana valodas modeļiem, kuru pamatā ir rokturi, varētu radÄ«t atkārtoti lietojamus komponentus darbam ar tiem, lÄ«dzÄ«gi kā tas notika EML gadÄ«jumā.

Nav tā, ka Eclipse nesaprata Å”os jautājumus. Vēl 2005. gadā MārtiņŔ EÅ”limans, apkopojot CDT prototipa izstrādes pieredzi, strÄ«dējās nepiecieÅ”amÄ«ba izveidot kopÄ«gu infrastruktÅ«ru valodu modeļiem, tostarp uz rokturiem balstÄ«tiem modeļiem. Taču, kā jau tas mēdz gadÄ«ties, augstākas prioritātes uzdevumu dēļ Å”o ideju Ä«stenoÅ”ana tā arÄ« nesanāca. Tikmēr *DT koda faktorizācija joprojām ir viena no nepietiekami attÄ«stÄ«tajām tēmām programmā Eclipse.

Zināmā nozÄ«mē Handly projekts ir paredzēts, lai atrisinātu aptuveni tādas paÅ”as problēmas kā EMF, bet modeļiem, kuru pamatā ir rokturi, un galvenokārt valodu (t.i., attēlojot kādas programmÄ“Å”anas valodas struktÅ«ras elementus). Galvenie mērÄ·i, kas izvirzÄ«ti, izstrādājot Handly, ir uzskaitÄ«ti zemāk:

  • PriekÅ”meta jomas galveno abstrakciju identificÄ“Å”ana.
  • Samazināt pÅ«les un uzlabot uz rokturi balstÄ«tu valodu modeļu ievieÅ”anas kvalitāti, izmantojot kodu atkārtoti.
  • NodroÅ”inot iegÅ«tajiem modeļiem vienotu metalÄ«meņa API, ļaujot izveidot kopÄ«gus IDE komponentus, kas darbojas ar modeļiem, kuru pamatā ir valodas rokturi.
  • ElastÄ«gums un mērogojamÄ«ba.
  • Integrācija ar Xtext (atseviŔķā slānÄ«).

Lai izceltu izplatÄ«tos jēdzienus un protokolus, tika analizētas esoŔās valodas roktura modeļu ievieÅ”anas. Handly nodroÅ”inātās galvenās saskarnes un pamata ievieÅ”anas ir parādÄ«tas attēlā. 8.

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
Rīsi. 8. Handly elementu kopīgās saskarnes un pamata implementācijas

IElement interfeiss attēlo elementa rokturi un ir kopīgs visu ar Handly balstītu modeļu elementiem. Abstraktā klase Element realizē vispārināto roktura/korpusa mehānismu (9. att.).

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
RÄ«si. 9. IEelements un vispārÄ«gā roktura/Ä·ermeņa ievieÅ”ana

Turklāt Handly nodroÅ”ina vispārinātu mehānismu paziņoÅ”anai par modeļa elementu izmaiņām (10. att.). Kā redzat, tas kopumā ir lÄ«dzÄ«gs paziņoÅ”anas mehānismiem, kas ieviesti resursa modelÄ« un Java modelÄ«, un izmanto IElementDelta, lai nodroÅ”inātu vienotu elementu izmaiņu informācijas attēlojumu.

Eclipse kā tehnoloģiju platforma 1C: Enterprise Development Tools
RÄ«si. 10. Handly paziņoÅ”anas mehānisma vispārÄ«gās saskarnes un pamata implementācijas

IepriekÅ” apskatÄ«to Handly daļu (9. un 10. att.) var izmantot, lai attēlotu gandrÄ«z visus modeļus, kuru pamatā ir rokturi. Par radÄ«Å”anu lingvistiskais modeļus, projekts piedāvā papildu funkcionalitāti - jo Ä«paÅ”i kopējas saskarnes un pamata implementācijas avota teksta struktÅ«ras elementiem, t.s. avota elementi (8. att.). ISourceFile saskarne apzÄ«mē avota failu, un ISourceConstruct apzÄ«mē elementu avota failā. Abstraktās klases SourceFile un SourceConstruct Ä«steno vispārinātus mehānismus, lai atbalstÄ«tu darbu ar avota failiem un to elementiem, piemēram, darbu ar teksta buferiem, saistÄ«Å”anu ar elementa koordinātām avota tekstā, modeļu saskaņoÅ”anu ar darba kopiju bufera paÅ”reizējo saturu. utt. Å o mehānismu ievieÅ”ana parasti ir diezgan grÅ«ts izaicinājums, un Handly var ievērojami samazināt centienus izstrādāt uz rokturiem balstÄ«tus valodu modeļus, nodroÅ”inot augstas kvalitātes pamata implementācijas.

Papildus iepriekÅ” uzskaitÄ«tajiem pamatmehānismiem Handly nodroÅ”ina infrastruktÅ«ru teksta buferiem un momentuzņēmumiem, atbalstu integrācijai ar pirmkoda redaktoriem (tostarp integrāciju ar Xtext redaktoru), kā arÄ« dažus izplatÄ«tus lietotāja interfeisa komponentus, kas strādāt ar pirmkoda redaktoriem. Ērti modeļi, piemēram, kontÅ«ru ietvars. Lai ilustrētu tā iespējas, projekts sniedz vairākus piemērus, tostarp Java modeļa ievieÅ”anu Handly. (SalÄ«dzinot ar pilnu Java modeļa ievieÅ”anu JDT, Å”is modelis ir apzināti nedaudz vienkārÅ”ots, lai nodroÅ”inātu lielāku skaidrÄ«bu.)

Kā minēts iepriekÅ”, Handly sākotnējā dizaina un turpmākās izstrādes laikā galvenā uzmanÄ«ba tika pievērsta un joprojām ir mērogojamÄ«ba un elastÄ«ba.

Principā modeļi, kuru pamatā ir rokturi, ir diezgan labi mērogoti ā€œpēc dizainaā€. Piemēram, roktura/korpusa idioma ļauj ierobežot modeļa patērētās atmiņas apjomu. Bet ir arÄ« nianses. Tādējādi, pārbaudot Handly mērogojamÄ«bu, tika atklāta problēma paziņoÅ”anas mehānisma ievieÅ”anā - mainot lielu skaitu elementu, deltu konstruÄ“Å”ana aizņēma pārāk daudz laika. IzrādÄ«jās, ka tā pati problēma bija JDT Java modelÄ«, no kuras savulaik tika adaptēts attiecÄ«gais kods. Mēs izlabojām kļūdu Handly un sagatavojām lÄ«dzÄ«gu ielāpu JDT, kas tika pateicÄ«gi saņemta. Å is ir tikai viens piemērs, kur Handly ievieÅ”ana esoÅ”o modeļu ievieÅ”anā varētu bÅ«t noderÄ«ga, jo Å”ajā gadÄ«jumā Ŕādu kļūdu varētu novērst tikai vienā vietā.

Lai padarÄ«tu Handly ievieÅ”anu esoÅ”o modeļu ievieÅ”anā tehniski iespējamu, bibliotēkai ir jābÅ«t ievērojamai elastÄ«bai. Galvenā problēma ir saglabāt atpakaļsaderÄ«bu visā API modelÄ«. Å Ä« problēma tika atrisināta gadā ParocÄ«gi 0.5 skaidri nodalot modelim raksturÄ«go API, ko definējis un pilnÄ«bā kontrolē izstrādātājs, no vienotā meta lÄ«meņa API, ko nodroÅ”ina bibliotēka. Tas ne tikai ļauj tehniski ieviest Handly esoÅ”ajās implementācijās, bet arÄ« sniedz jaunā modeļa izstrādātājam ievērojamu brÄ«vÄ«bu API projektÄ“Å”anā.

ElastÄ«bai ir arÄ« citi aspekti. Piemēram, Handly neuzliek gandrÄ«z nekādus ierobežojumus modeļa struktÅ«rai, un to var izmantot, lai modelētu gan vispārējas nozÄ«mes, gan domēnam specifiskas valodas. Veidojot avota faila struktÅ«ru, Handlijs nenosaka nekādu Ä«paÅ”u AST attēlojuma veidu un principā pat neprasa paÅ”a AST klātbÅ«tni, tādējādi nodroÅ”inot saderÄ«bu ar gandrÄ«z jebkuru parsÄ“Å”anas mehānismu. Visbeidzot, Handly atbalsta pilnÄ«gu integrāciju ar Eclipse darbvietu, bet var arÄ« strādāt tieÅ”i ar failu sistēmām, pateicoties integrācijai ar Eclipse failu sistēma (EFS).

PaÅ”reizējā versija ParocÄ«gi 0.6 iznāca 2016. gada decembrÄ«. Neskatoties uz to, ka projekts paÅ”laik ir inkubācijas stāvoklÄ« un API vēl nav galÄ«gi salabots, Handly jau tiek izmantots divos lielos komerciālos produktos, kas riskēja darboties kā ā€œagrÄ«nie lietotājiā€, un, jāsaka, vēl nenožēlo.

Kā minēts iepriekÅ”, viens no Å”iem produktiem ir 1C:Enterprise Development Tools, kur Handly jau no paÅ”a sākuma tiek izmantots, lai modelētu Ŕādu 1C:Enterprise valodu augsta lÄ«meņa struktÅ«ras elementus kā iebÅ«vēto programmÄ“Å”anas valodu un vaicājumu valodu. . Cits produkts plaŔākai sabiedrÄ«bai ir mazāk zināms. Å is Codasip studija, integrēta dizaina vide lietojumprogrammām specifiskam instrukciju kopas procesoram (ASIP), ko izmanto gan paŔā Čehijas uzņēmumā Codasip, gan tā klientiem, tostarp AMD, AVG, Mēbeles, Sigma modeļi. Codasip ražoÅ”anā Handly izmanto kopÅ” 2015. gada, sākot ar versiju Handly 0.2. Jaunākajā Codasip Studio laidienā tiek izmantota 0.5 versija, kas tika izlaista 2016. gada jÅ«nijā. Ondřej Ilčƭk, kurÅ” vada IDE izstrādi Codasip, sazinās ar projektu, sniedzot bÅ«tisku atgriezenisko saiti ā€œtreŔās puses adoptētājaā€ vārdā. ViņŔ pat varēja atrast brÄ«vu laiku, lai tieÅ”i piedalÄ«tos projekta izstrādē, ievieÅ”ot lietotāja saskarnes slāni (~4000 koda rindiņas) vienam no Handly piemēriem, Java modelim. Detalizētāku informāciju par Handly izmantoÅ”anu adoptētājiem var atrast lapā Veiksmes stāsti projektu.

Mēs ceram, ka pēc versijas 1.0 izlaiÅ”anas ar API stabilitātes garantiju un projekta aizieÅ”anas no inkubācijas stāvokļa Handly bÅ«s jauni adoptētāji. Pa to laiku projekts turpina testēt un vēl vairāk uzlabot API, izlaižot divus "lielākos" laidienus gadā - jÅ«nijā (tajā paŔā datumā, kad tika izlaista vienlaicÄ«ga Eclipse izlaidums) un decembrÄ«, nodroÅ”inot paredzamu grafiku, uz kuru lietotāji var paļauties. Varam arÄ« piebilst, ka projekta ā€œkļūdu lÄ«menisā€ joprojām ir nemainÄ«gi zemā lÄ«menÄ« un Handly ir uzticami strādājis agrÄ«no lietotņu produktos jau kopÅ” pirmajām versijām. Lai turpinātu izpētÄ«t Eclipse Handly, varat izmantot Darba sākÅ”anas apmācÄ«ba Šø ArhitektÅ«ras pārskats.

Avots: www.habr.com

Pievieno komentāru