I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini

Mhlawumbi, eclipse kudala ifuna intshayelelo ikhethekileyo. Abantu abaninzi baqhelene ne-Eclipse enkosi kwizixhobo zophuhliso lwe-Eclipse Java.JDT). Yeyona IDE idumileyo yeJava IDE abathi uninzi lwabaphuhlisi banxulumane negama elithi "Eclipse". Nangona kunjalo, i-Eclipse zombini iqonga elandiswayo lokudibanisa izixhobo zophuhliso (i-Eclipse Platform), kunye nenani le-IDE ezakhiwe kwisiseko sayo, kuquka i-JDT. I-Eclipse zombini iProjekthi ye-Eclipse, iprojekthi yezinga eliphezulu elilungelelanisa uphuhliso lwe-Eclipse Platform kunye ne-JDT, kunye ne-Eclipse SDK, isiphumo esinikezelweyo sophuhliso. Ekugqibeleni, i-Eclipse yiSiseko esivulelekileyo esinoluntu olukhulu lweeprojekthi, kungekhona zonke ezibhaliweyo kwiJava okanye ezinxulumene nezixhobo zophuhliso (umzekelo, iiprojekthi. I-Eclipse IoT и Inzululwazi ye-Eclipse). Ihlabathi le-Eclipse lahluke kakhulu.

Kweli nqaku, elijongana nendalo, siza kuzama ukujonga ezinye zeziseko zoyilo lwe-Eclipse njengeqonga lokwakha izixhobo ezidityanisiweyo zophuhliso kunye nokunika umbono wokuqala wezinto ze-Eclipse ezenza isiseko setekhnoloji. iqonga le "Configurator entsha" 1C: Enterprise. 1C:Izixhobo zoPhuhliso lweShishini. Ewe kunjalo, uphononongo olunjalo ngokuqinisekileyo luya kuba lungaphaya kwaye endaweni yoko lunomda, kubandakanya kuba asijolisanga kuphela kubaphuhlisi be-Eclipse njengabaphulaphuli ekujoliswe kubo. Nangona kunjalo, sinethemba lokuba nabaphuhlisi abanamava be-Eclipse baya kukwazi ukufumana ulwazi olunomdla kweli nqaku. Umzekelo, siza kuthetha ngenye "yeemfihlo ze-Eclipse", iprojekthi entsha nencinane eyaziwayo. I-Eclipse Hand, eyasekwa yaza yaxhaswa yi-1C.
I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini

Intshayelelo ye-Eclipse Architecture

Masiqale sijonge eminye imiba eqhelekileyo yoyilo lwe-Eclipse sisebenzisa umzekelo Izixhobo zophuhliso lwe-Eclipse Java (JDT). Ukhetho lwe-JDT njengomzekelo alukho ngengozi. Le yindawo yokuqala edibeneyo yophuhliso evelayo kwi-Eclipse. Ezinye iiprojekthi ze-DT Eclipse, ezinje nge-Eclipse C/C++ Development Tooling (CDT), zadalwa kamva kwaye zaboleka zombini imigaqo eyisiseko eyisiseko kunye namaqhekeza ekhowudi yomthombo ngamnye kwi-JDT. Izinto ezisisiseko ze-architecture ezibekwe kwi-JDT zihambelana nanamhlanje malunga nayo nayiphi na i-IDE eyakhelwe phezulu kwe-Eclipse Platform, kuquka i-1C: Izixhobo zoPhuhliso lweShishini.

Okokuqala, kufuneka kuqatshelwe ukuba i-Eclipse ibonakaliswe ngocwangco olucacileyo lolwakhiwo, kunye nokwahlulwa komsebenzi ozimeleyo kolwimi ukusuka kwimisebenzi eyilelwe ukuxhasa iilwimi ezithile zeprogram, kunye nokwahlulwa kwe-UI-ezimeleyo "amacandelo" kumacandelo anxulumeneyo. ngokuxhasa ujongano lomsebenzisi.

Ngaloo ndlela, i-Eclipse Platform ichaza isiseko esiqhelekileyo, esizimeleyo solwimi, kunye nezixhobo zophuhliso lweJava zongeza i-IDE yeJava epheleleyo kwi-Eclipse. Zombini i-Eclipse Platform kunye ne-JDT iqulethe izinto ezininzi, nganye kuzo i-"core" ezimeleyo ye-UI okanye i-UI layer (Figure 1).

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 1. I-Eclipse Platform kunye ne-JDT

Makhe sidwelise awona macandelo e-Eclipse Platform:

  • Ixesha lokubaleka — Ichaza isiseko seplagin. I-Eclipse ibonakaliswe ngoyilo lwemodyuli. Ngokusisiseko, i-Eclipse yingqokelela "yamanqaku okwandisa" kunye "nezandiso".
  • Indawo yokusebenzela - Ulawula iprojekthi enye okanye ngaphezulu. Iprojekthi iqulathe iziqulathi zeefayili kunye neefayile ezifakwe kwimephu ngokuthe ngqo kwisixokelelwano sefayile.
  • Izixhobo zeWidget eziMgangatho (SWT) -Ibonelela ngezinto ezisisiseko zojongano lomsebenzisi ezidityaniswe nenkqubo yokusebenza.
  • JFace - Ibonelela ngeqela lezicwangciso ze-UI ezakhiwe phezulu kwe-SWT.
  • Workbench -Ichaza i-paradigm ye-Eclipse UI: abahleli, iimbono, iimbono.

Kufuneka kuthiwe iPlatform ye-Eclipse ikwabonelela nezinye izinto ezininzi eziluncedo zokwakha izixhobo ezidityanisiweyo zophuhliso, kubandakanya i-Debug, Thelekisa, uPhando kunye neQela. Ukukhankanywa okukhethekileyo kufuneka kwenziwe kwi-JFace Text - isiseko sokwakha "abahleli abahlakaniphile" bekhowudi yomthombo. Ngelishwa, kwanokuhlolwa okukhawulezileyo kwezi nxalenye, kunye namacandelo e-UI, akunakwenzeka ngaphakathi kwendawo yeli nqaku, ngoko ke kwintsalela yeli candelo siya kuzikhawulela kumbono wamacandelo "engundoqo" i-Eclipse Platform kunye ne-JDT.

Ixesha lokuqhuba elingundoqo

I-plugin ye-Eclipse plugin isekelwe OSGi kwaye ibonelelwe yiprojekthi I-Eclipse Equinox. Iplagi nganye ye-Eclipse yi-OSGi bundle. Inkcazo ye-OSGi ichaza, ngokukodwa, iindlela zoguqulelo kunye nesisombululo sokuxhomekeka. Ukongeza kwezi ndlela eziqhelekileyo, i-Equinox yazisa ingcamango iindawo zokwandisa. I-plugin nganye inokuchaza iindawo zayo zokwandisa, kwaye iphinde yazise ukusebenza okongeziweyo ("izandiso") kwisistim usebenzisa amanqaku okwandisa achazwe ngokufanayo okanye ezinye iiplagi. Nayiphi na inkcazo ecacileyo ye-OSGi kunye neendlela ze-Equinox zingaphaya kobubanzi beli nqaku. Masiqaphele kuphela ukuba i-modularization kwi-Eclipse iyonke (nayiphi na inkqubo engaphantsi, kuquka i-Runtime, ine-plugin enye okanye ngaphezulu), kwaye phantse yonke into kwi-Eclipse lulwandiso. Ngaphezu koko, le migaqo yayifakwe kwi-architecture ye-Eclipse kwakudala ngaphambi kokuqaliswa kwe-OSGi (ngelo xesha basebenzisa iteknoloji yabo, efana kakhulu ne-OSGi).

Indawo yokusebenzela engundoqo

Phantse nayiphi na indawo edibeneyo yophuhliso eyakhiwe phezulu kwe-Eclipse Platform isebenza kunye ne-Eclipse workspace. Yindawo yokusebenza ehlala iqulathe ikhowudi yemvelaphi yesicelo ephuhliswe kwi-IDE. Imephu yendawo yokusebenza ngokuthe ngqo kwisixokelelwano sefayile kwaye iqulathe iiprojekthi eziqulethe iifolda kunye neefayile. Ezi projekthi, iifolda, kunye neefayile zibizwa izixhobo indawo yokusebenza. Ukuphunyezwa kwendawo yokusebenza kwi-Eclipse isebenza njenge-cache ngokunxulumene nesixokelelwano sefayile, esenza kube lula ukukhawulezisa ngokuphawulekayo ukunqumla komthi womthombo. Ukongezelela, indawo yokusebenzela inika inani leenkonzo ezongezelelweyo, kubandakanywa indlela yokwazisa ngotshintsho lwezibonelelo и ulwakhiwo lweziseko ezingundoqo.

I-Core Resources component (org.eclipse.core.resources plugin) inoxanduva lokuxhasa indawo yokusebenza kunye nezixhobo zayo. Ngokukodwa, eli candelo libonelela ngofikelelo lwenkqubo kwindawo yokusebenza kwifom iimodeli zemithombo. Ukusebenza ngokufanelekileyo ngale modeli, abathengi bafuna indlela elula yokubonisa ikhonkco kwisixhobo. Kule meko, kuya kuba nqweneleka ukufihla into egcina ngokuthe ngqo imeko yomthombo kwimodeli ekufikeleleni komthengi. Ngaphandle koko, kwimeko, umzekelo, ukucima ifayile, umxhasi unokuqhubeka ebambe into engekho kumzekelo, kunye neengxaki ezilandelayo. I-Eclipse isombulula le ngxaki isebenzisa into ebizwa ngokuba yi-Eclipse phatha ubutyebi. I-Handle yenza njengesitshixo (iyazi kuphela indlela eya kwisixhobo kwindawo yokusebenza) kwaye ilawula ngokupheleleyo ukufikelela kwinto yangaphakathi yemodeli, egcina ngokuthe ngqo ulwazi malunga nemeko yobutyebi. Olu luyilo luyintlukwano yepateni Isibambo/Umzimba.

Irayisi. Umfanekiso wesi-2 ubonisa iqhalo loMphathi/uMzimba njengoko lisetyenziswa kwimodeli yomthombo. I-interface ye-IResource imele i-handle ye-resource kwaye i-API, ngokungafaniyo neklasi yeZibonelelo, eyenza le interface, kunye neklasi ye-ResourceInfo, emele umzimba, ongeyiyo i-APIs. Sigxininisa ukuba isiphatho sazi kuphela indlela eya kumthombo onxulumene nengcambu yendawo yokusebenza kwaye ayiqulathanga ikhonkco kulwazi lobutyebi. Izinto zolwazi lwemithombo zenza into ebizwa ngokuba “ngumthi weelementi”. Olu lwakhiwo lwedatha lubonakaliswe ngokupheleleyo kwimemori. Ukufumana umzekelo wolwazi lovimba ohambelana nesiphatho, umthi wesiqalelo unqunyulwa ngokwendlela egcinwe kweso siphatho.

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 2. IResource kunye neResourceInfo

Njengoko siza kubona kamva, uyilo olusisiseko lwemodeli yesixhobo (esinokuthi siyibize ngokuba yi-handle-based) isetyenziswa kwi-Eclipse kwezinye iimodeli. Okwangoku, makhe dwelise ezinye zeepropathi ezahlukileyo zolu yilo:

  • Isiphatho siyinto yexabiso. Izinto zexabiso zizinto ezingaguqukiyo ukulingana kwazo akusekelwe kwisazisi. Ezo zinto zinokusetyenziswa ngokukhuselekileyo njengesitshixo kwizikhongozeli ezikhawulezayo. Iimeko ezininzi zokuphatha zinokubhekisa kwisixhobo esifanayo. Ukuzithelekisa, kufuneka usebenzise indlela elinganayo(Object).
  • Isiphatho sichaza ukuziphatha kwesixhobo, kodwa asiqulathanga ulwazi malunga nobume besixhobo (idatha kuphela eyigcinayo "sisitshixo", indlela eya kwisixhobo).
  • Ukubamba kunokubhekisa kwisixhobo esingekhoyo (nokuba sisixhobo esingekadalwa, okanye isixhobo esele sicinyiwe). Ubukho bobutyebi bunokutshekishwa kusetyenziswa indlela ye IResource.exists().
  • Eminye imisebenzi inokuphunyezwa ngokusekelwe kuphela kulwazi olugcinwe kwisibambo ngokwaso (esibizwa ngokuba yimisebenzi yokuphatha kuphela). Imizekelo ithi IResource.getParent(), getFullPath(), njl. Umthombo awudingi ukubakho ukuze umsebenzi onjalo uphumelele. Imisebenzi efuna ubutyebi obukhoyo ukuze iphumelele iphose i-CoreException ukuba isibonelelo asikho.

I-Eclipse ibonelela ngendlela esebenzayo yokwazisa ngotshintsho lwemithombo yendawo yokusebenza (Umfanekiso 3). Izibonelelo zingatshintsha mhlawumbi ngenxa yezenzo ezenziwe ngaphakathi kwe-Eclipse IDE ngokwayo okanye ngenxa yongqamaniso nenkqubo yefayile. Kuzo zombini iimeko, abathengi ababhalisela izaziso babonelelwa ngolwazi oluthe kratya malunga notshintsho kwimo ye "resource deltas". I-delta ichaza utshintsho phakathi kwamazwe amabini omthombo wendawo yokusebenza (sub-) umthi kwaye wona ngokwawo umthi, indawo nganye echaza utshintsho kwisixhobo kwaye iqulethe uluhlu lwe-deltas kwinqanaba elilandelayo elichaza utshintsho kwimithombo yomntwana.

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 3. IResourceChangeEvent kunye ne-IResourceDelta

Indlela yokwazisa esekelwe kwi-deltas yemithombo inezi mpawu zilandelayo:

  • Utshintsho olulodwa kunye neenguqu ezininzi zichazwe ngokusebenzisa isakhiwo esifanayo, ekubeni i-delta yakhiwe ngokusebenzisa umgaqo wokubunjwa okuphindaphindiweyo. Abathengi ababhalisileyo banokujongana nezaziso zokutshintsha izixhobo besebenzisa ukwehla okuphindaphindayo ngomthi we-deltas.
  • I-delta iqulethe ulwazi olupheleleyo malunga neenguqu kwisixhobo, kubandakanywa ukuhamba kwayo kunye / okanye utshintsho "kwiimpawu" ezinxulumene nayo (umzekelo, iimpazamo zokudibanisa zimelwe njengabamakishi).
  • Kuba iireferensi zoovimba zenziwa ngesiphatho, i-delta inokuthi ngokwendalo ibhekiselele kwisixhobo esikude.

Njengoko siza kubona kungekudala, amacandelo aphambili oyilo lwemodeli yotshintsho yokutshintsha indlela yokwazisa ikwabalulekile kwezinye iimodeli ezisekelwe kumqheba.

Undoqo weJDT

Imodeli yendawo yokusebenza ye-Eclipse ngumzekelo osisiseko wolwimi-agnostic. Icandelo le-JDT Core (i-plugin org.eclipse.jdt.core) inikeza i-API yokuhamba kunye nokuhlalutya isakhiwo sendawo yokusebenza ukusuka kwimbono yeJava, ebizwa ngokuba "yimodeli yeJava" (imodeli yeJava). Le API ichazwa ngokwezinto zeJava, ngokuchasene nesiseko somthombo we-API, ochazwe ngokweefolda kunye neefayile. Ujongano oluphambili lomthi wento yeJava lubonisiwe kwiFig. 4.

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 4. IiModeli zeJava

Imodeli yeJava isebenzisa umqheba / iqhalo lomzimba elifanayo njengemodeli yomthombo (Umfanekiso 5). IJavaElement sisiphatho, kwaye iJavaElementInfo idlala indima yomzimba. Ujongano lwe-IJavaElement luchaza iprotocol eqhelekileyo kuzo zonke izinto zeJava. Ezinye zeendlela zayo ziziphatho-kuphela: getElementName(), getParent(), njl. Into yeJavaElementInfo igcina imo yento ehambelana nayo: ubume bayo kunye neempawu.

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 5. IJavaElement kunye neJavaElementInfo

Imodeli yeJava inomahluko othile ekuphunyezweni komqheba osisiseko / uyilo lomzimba xa kuthelekiswa nemodeli yobutyebi. Njengoko kuphawuliwe ngasentla, kumzekelo wesixhobo, umthi wesiqalelo, iinodi zawo zizinto zolwazi lwemithombo, iqulethwe ngokupheleleyo kwinkumbulo. Kodwa imodeli yeJava inokuba nenani elikhulu kakhulu lezinto kunomthi wobutyebi, kuba ikwamele ulwakhiwo lwangaphakathi lwe.java kunye .iifayile zeklasi: iintlobo, imihlaba, kunye neendlela.

Ukunqanda ukwenza izinto ngokupheleleyo umthi wonke wezinto kwinkumbulo, ukuphunyezwa komfuziselo weJava kusebenzisa ubungakanani obulinganiselweyo be-LRU cache yolwazi lwento, apho isitshixo sinokuphatha IJavaElement. izinto zolwazi lwe element zenziwe ngokwemfuno njengoko umthi wesiqalelo ulawulwa. Kule meko, izinto ezincinci ezisetyenziswa rhoqo zikhutshwa kwi-cache, kwaye ukusetyenziswa kwememori yemodeli kuhlala kunqunyelwe kubungakanani obuchaziweyo be-cache. Le yenye inzuzo yoyilo olusekelwe kumqheba, olufihla ngokupheleleyo iinkcukacha ezinjalo zokuphunyezwa kwikhowudi yomxhasi.

Indlela yokwazisa utshintsho kwizinto zeJava ngokubanzi iyafana nendlela yokulandelela utshintsho kwizixhobo zokusebenza ezixoxwe ngasentla. Umxhasi onqwenela ukubeka esweni utshintsho kwimodeli yeJava ubhalisa kwizaziso, ezimelwe njengento ye-ElementChangedEvent equlethe i-IJavaElementDelta (Umfanekiso 6).

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 6. ElementChangedEvent kunye ne-IJavaElementDelta

Imodeli yeJava ayinalo ulwazi malunga nemizimba yendlela okanye isisombululo samagama, ngoko ke uhlalutyo oluneenkcukacha lwekhowudi ebhalwe kwiJava, i-JDT Core ibonelela ngemodeli eyongezelelweyo (engasekelwanga ngokubamba): umthi wesintaksi abstract (umthi we-syntax abstract, AST). I-AST imele isiphumo sokwahlulahlula isicatshulwa somthombo. Amanqaku e-AST ahambelana neziqalelo zesakhiwo somnqongo womthombo (izibhengezo, abaqhubi, intetho, njl. njl.) kwaye ziqulathe ulwazi malunga nolungelelwaniso lwento ehambelanayo kumbhalo wemvelaphi, kunye (njengokhetho) ulwazi malunga nesisombululo segama kwi. uhlobo lwamakhonkco kwinto ebizwa izibophelelo. Izibophelelo zizinto ezimele amaqumrhu anikwe amagama, njengeentlobo, iindlela, kunye nezinto eziguquguqukayo, ezaziwa ngumqambi. Ngokungafaniyo ne-AST nodes, ezenza umthi, izibophelelo zixhasa i-cross-referencing kwaye ngokubanzi zenze igrafu. Iklasi ye-ASTNode ye-abstract yiklasi yesiseko eqhelekileyo yazo zonke iindawo ze-AST. Ii-subclasses ze-ASTNode zihambelana nolwakhiwo oluthile lwe-syntactic yolwimi lweJava.

Ngenxa yokuba imithi ye-syntax inokutya inani elikhulu lememori, i-JDT igcina i-AST enye kuphela yomhleli osebenzayo. Ngokungafaniyo nemodeli yeJava, i-AST ijongwa ngokuqhelekileyo njengemodeli "ephakathi", "yexeshana", izinto apho abathengi akufanele babambe iireferensi ngaphandle komxholo wokusebenza okhokelela ekudalweni kwe-AST.

Iimodeli ezintathu ezidweliswe (imodeli yeJava, i-AST, i-bindings) kunye zenza isiseko sokwakha "izixhobo zophuhliso ezihlakaniphile" kwi-JDT, kubandakanywa nomhleli weJava onamandla kunye "nabancedisi" abahlukeneyo, izenzo ezahlukeneyo zokucubungula ikhowudi yomthombo (kubandakanywa nokuququzelela uluhlu lokungeniswa kwamanye amazwe. amagama kunye nokufomatha ngokwesitayile esilungiselelweyo), khangela kunye nezixhobo zokuphinda zenziwe kwakhona. Kule meko, imodeli yeJava idlala indima ekhethekileyo, kuba isetyenziswa njengesiseko sokubonakaliswa okubonakalayo kwesakhiwo sesicelo esiphuhliswayo (umzekelo, kwiPackage Explorer, Outline, Search, Call Hierarchy, kunye Uhlobo lweHierarchy).

Amacandelo e-Eclipse asetyenziswe kwi-1C:Izixhobo zoPhuhliso lweShishini

KwiFig. Umzobo we-7 ubonisa amacandelo e-Eclipse enza isiseko seqonga leteknoloji ye-1C: Izixhobo zoPhuhliso lweShishini.

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 7. I-Eclipse njengeqonga le-1C:Izixhobo zoPhuhliso lweShishini

Iqonga le-Eclipse ibonelela ngeziseko ezingundoqo. Sijonge imiba ethile yesi siseko kwicandelo elingaphambili.

Isakhelo seModeli ye-Eclipse (EMF) ibonelela ngeendlela eziqhelekileyo zokubonisa idatha eyakhiweyo. I-EMF idityaniswe ne-Eclipse Platform, kodwa ingasetyenziselwa ngokwahlukileyo kwizicelo eziqhelekileyo zeJava. Rhoqo, abaphuhlisi abatsha be-Eclipse sele beqhelene kakuhle ne-EMF, nangona bengekabuqondi ngokupheleleyo ubucukubhede be-Eclipse Platform. Esinye sezizathu zokuthandwa okunjalo okufanelekileyo kuyilo lwendalo yonke, olubandakanya, phakathi kwezinye izinto, i-API ye-meta-level edibeneyo, evumela ukuba usebenze nayo nayiphi na imodeli ye-EMF ngendlela eqhelekileyo. Ukuphunyezwa okuyisiseko kwizinto zemodeli ezibonelelwa yi-EMF kunye ne-subsystem yokuvelisa ikhowudi yemodeli esekelwe kwi-meta-model kakhulu yandisa isantya sophuhliso kunye nokunciphisa inani leempazamo. I-EMF ikwaqulethe iindlela zokulinganisa iimodeli, ukulandelela utshintsho kwimodeli, nokunye okuninzi.

Njengaso nasiphi na isixhobo esinenjongo ngokubanzi, i-EMF ifanelekile ukusombulula uluhlu olubanzi lweengxaki zemodeli, kodwa ezinye iindidi zeemodeli (umzekelo, iimodeli ezisekelwe kumqheba ezixoxwe ngasentla) zinokufuna izixhobo ezikhethekileyo zokubumba. Ukuthetha nge-EMF ngumsebenzi ongenambulelo, ngakumbi ngaphakathi kwemida yenqaku elinye, kuba lo ngumxholo wencwadi eyahlukileyo, kunye nengqindilili. Masiqaphele kuphela ukuba inkqubo yomgangatho ophezulu we-generalizations ephantsi kwe-EMF ivumele ukuzalwa kweeprojekthi ezinikezelwe kwimodeli, ezifakwe kwiprojekthi yezinga eliphezulu. IModeli ye-Eclipse kunye ne-EMF ngokwayo. Enye iprojekthi enjalo yi-Eclipse Xtext.

I-Eclipse Xtext ibonelela ngesiseko se "text modeling". Xtext isebenzisa I-ANTLR yokwahlulahlula isicatshulwa somthombo kunye ne-EMF yokumela isiphumo se-ASG (igrafu engabonakaliyo ye-semantic, eyindibaniselwano ye-AST kunye nezibophelelo), ekwabizwa ngokuba "yimodeli ye-semantic". Igrama yolwimi oluyimodeli yeXtext ichazwe ngolwimi lweXtext. Oku akuvumeli kuphela ukuvelisa inkcazo yegrama ye-ANTLR, kodwa nokufumana indlela yolandelelwano ye-AST (oko kukuthi i-Xtext ibonelela ngesicazululi kunye nesingacazululi), ingcebiso yomxholo, kunye nenani lamanye amalungu olwimi. Kwelinye icala, ulwimi lwegrama olusetyenziswe kwiXtext aluguquguquki kangako, masithi, ulwimi lwegrama olusetyenziswa kwi-ANTLR. Ke ngoko, ngamanye amaxesha kuyafuneka "ukugoba" ulwimi oluphunyeziweyo kwi-Xtext, ehlala ingeyongxaki ukuba sithetha ngolwimi oluphuhliswayo ukusuka ekuqaleni, kodwa lusenokungamkeleki kwiilwimi ezine-syntax esele isekiwe. Ngaphandle koku, i-Xtext okwangoku sesona sixhobo sivuthiweyo, esityebileyo, kunye nesixhobo esiguquguqukayo kwi-Eclipse yokwakha iilwimi zenkqubo kunye nezixhobo zophuhliso kubo. Ngokukodwa, sisixhobo esifanelekileyo seprototyping ekhawulezayo iilwimi ezithe ngqo kwisizinda (i-domain-specific language, DSL). Ukongeza kule "ingundoqo yolwimi" ekhankanywe ngasentla esekelwe kwi-ANTLR kunye ne-EMF, i-Xtext ibonelela ngezinto ezininzi eziluncedo ezikwinqanaba eliphezulu, kubandakanywa iindlela zesalathiso, ulwakhiwo olongezelelweyo, "umhleli ohlakaniphile", kunye nokunye okuninzi, kodwa ushiya ngaphandle- imodeli yolwimi esekelwe. Njenge-EMF, i-Xtext sisifundo esifanelwe yincwadi eyahlukileyo, kwaye asinakukwazi ukuthetha ngokufutshane ngabo bonke ubuchule baso ngoku.

I-1C:Izixhobo zoPhuhliso lweShishini zisebenzisa ngokukhutheleyo zombini i-EMF ngokwayo kunye nenani lezinye iiprojekthi ze-Eclipse Modelling. Ngokukodwa, i-Xtext sesinye seziseko zezixhobo zophuhliso ze-1C: Iilwimi zeShishini njengolwimi lwenkqubo olwakhelwe ngaphakathi kunye nolwimi lombuzo. Esinye isiseko sezi zixhobo zophuhliso yiprojekthi ye-Eclipse Handly, esiza kuxoxa ngayo ngokubanzi (kumacandelo e-Eclipse adwelisiweyo, ayaziwa kakhulu).

I-Eclipse Hand, i-subproject yeprojekthi ye-Eclipse Technology yezinga eliphezulu, yavela ngenxa yegalelo lekhowudi yokuqala kwi-Eclipse Foundation eyenziwe yi-1C kwi-2014. Ukusukela ngoko, i-1C iqhubekile nokuxhasa uphuhliso lweprojekthi: Abazibophelelayo ngesandla ngabasebenzi benkampani. Iprojekthi incinci, kodwa ikwi-niche ekhethekileyo kwi-Eclipse: eyona njongo yayo kukuxhasa uphuhliso lweemodeli ezisekwe ngokubamba.

Imigaqo eyisiseko yolwakhiwo lweemodeli ezisekelwe kumqheba, ezifana nesiphatho/isici somzimba, zaxoxwa ngasentla kusetyenziswa imodeli yomthombo kunye nemodeli yeJava njengemizekelo. Kwakhona kwaphawula ukuba zombini imodeli yezibonelelo kunye nemodeli yeJava ziziseko ezibalulekileyo ze-Eclipse Java zophuhliso izixhobo (JDT). Kwaye kuba phantse zonke iiprojekthi ze-DT Eclipse zinoyilo olufana ne-JDT, ayizukuba lubaxo olukhulu ukutsho ukuba iimodeli ezisekwe ngokubamba ziphantsi koninzi, ukuba ayizizo zonke ii-IDE ezakhiwe phezu kwe-Eclipse Platform. Ngokomzekelo, i-Eclipse C / C ++ Development Tooling (CDT) ine-handle-based C / C ++ imodeli edlala indima efanayo kwi-architecture ye-CDT njengoko imodeli yeJava yenza kwi-JDT.

Phambi kwe-Handly, i-Eclipse ayizange ibonelele ngamathala eencwadi akhethekileyo okwakha imodeli yolwimi esekwe kumqheba. Imifuziselo ekhoyo ngoku idalwe ikakhulu ngokulungelelanisa ngokuthe ngqo ikhowudi yemodeli yeJava (aka khuphela/uncamathisele), kwiimeko apho ivumela ILayisensi yoLuntu ye-Eclipse (EPL). (Ngokucacileyo, oku kuqhelekile ukuba ayingomcimbi osemthethweni, yithi, iiprojekthi ze-Eclipse ngokwayo, kodwa hayi kwiimveliso zomthombo ovaliweyo.) Ukongeza kwindalo yayo engaqhelekanga, obu buchule buzisa iingxaki ezaziwayo-kakuhle: uphindaphindo lwekhowudi olwenziwa xa uhlengahlengisa iimpazamo, njl. Okubi nakakhulu kukuba iimodeli ezibangelwayo zihlala "zizinto ngokwazo" kwaye azisebenzisi ithuba lokudibanisa. Kodwa ukwahlula iikhonsepthi eziqhelekileyo kunye neeprothokholi zemifuziselo yolwimi olusekwe kumqheba kunokukhokelela ekudalweni kwamacandelo anokuphinda asetyenziswe ukuze asebenze nawo, afanayo naleyo yenzekayo kwimeko ye-EMF.

Asikuko ukuba u-Eclipse akazange ayiqonde le miba. Emva phaya ngo-2005 UMartin Aeschlimann, ukushwankathela amava okuphuhlisa iprototype ye-CDT, waxoxa imfuneko yokuyila iziseko zophuhliso ezifanayo kwimifuziselo yolwimi, kuquka imifuziselo esekelwe kumqheba. Kodwa, njengoko kusenzeka rhoqo, ngenxa yemisebenzi ephambili ephambili, ukuphunyezwa kwezi mbono akuzange kufikelele kuyo. Ngeli xesha, ukwenziwa kwezinto * kwekhowudi ye-DT kusesinye sezihloko ezingaphuhliswanga kwi-Eclipse.

Ngandlela ithile, iprojekthi ye-Handly yenzelwe ukusombulula malunga neengxaki ezifanayo njenge-EMF, kodwa kwiimodeli ezisekelwe kumqheba, kwaye ngokuyinhloko ezolwimi (oko kukuthi, ukumela izinto zesakhiwo solwimi oluthile lweprogram). Ezona njongo ziphambili zibekiweyo xa kuyilwa ngokuHandly zidweliswe ngezantsi:

  • Ukuchongwa kwezona zithintelo ziphambili zommandla wesifundo.
  • Ukunciphisa iinzame kunye nokuphucula umgangatho wokuphunyezwa kwemizekelo yolwimi olusekwe ngokubamba ngokusetyenziswa kwakhona kwekhowudi.
  • Ukubonelela nge-API yenqanaba le-meta edibeneyo kwiimodeli ezibangelwayo, okwenza kube lula ukwenza amacandelo e-IDE aqhelekileyo asebenza kunye neemodeli ezisekelwe kwi-handle-based.
  • Ukuguquguquka kunye nokuqina.
  • Ukudityaniswa ne-Xtext (kumaleko owahlukileyo).

Ukuqaqambisa iikhonsepthi eziqhelekileyo kunye neeprothokholi, umiliselo olukhoyo lwemifuziselo yokuphatha ulwimi lwahlalutywa. Ujongano oluphambili kunye nokuphunyezwa okusisiseko okubonelelwe nguHandly kuboniswe kwiFig. 8.

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 8. Ujongano oluqhelekileyo kunye nokuphunyezwa okusisiseko kwezinto eziHandly

I-interface ye-IElement imele isiphatho sento kwaye iqhelekile kwiimpawu zazo zonke iimodeli ezisekelwe ngesandla. Iklasi ye-abstract Element iphumeza isibambo esiqhelekileyo / indlela yomzimba (Umfanekiso we-9).

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 9. I-IElement kunye nesibambo segeneric / ukuphunyezwa komzimba

Ukongeza, ngokuHandly ibonelela ngendlela eqhelekileyo yokwazisa malunga notshintsho kwizinto zemodeli (umzobo 10). Njengoko unokubona, iyafana ngokubanzi neendlela zokwazisa eziphunyezwe kwimodeli yemithombo kunye nemodeli yeJava, kwaye isebenzisa i-IElementDelta ukubonelela ukumelwa okumanyeneyo kolwazi lotshintsho lwento.

I-Eclipse njengeqonga lobuchwepheshe le-1C:Izixhobo zoPhuhliso lweShishini
Irayisi. 10. Unxulumano ngokubanzi kunye nomiliselo olusisiseko lwendlela yokwazisa ngokuHamba

Inxalenye ye-Handly exoxwe ngasentla (Fig. 9 kunye ne-10) ingasetyenziselwa ukumela phantse nayiphi na imifuziselo esekwe ngokubamba. Ekudaleni ngokweelwimi imifuziselo, iprojekthi ibonelela ngomsebenzi owongezelelweyo-ingakumbi, ujongano oluqhelekileyo kunye nokuphunyezwa okusisiseko kwizinto zesakhiwo sombhalo wemvelaphi, okubizwa ngokuba izinto zomthombo (Umfanekiso 8). I-interface ye-ISourceFile imele ifayile yomthombo, kwaye i-ISourceConstruct imele into ngaphakathi kwefayile yomthombo. Iiklasi ezingabonakaliyo i-SourceFile kunye ne-SourceConstruct ziphumeza iindlela eziqhelekileyo zokuxhasa ukusebenza ngeefayile zemvelaphi kunye nezakhi zazo, umzekelo, ukusebenza nge-text buffers, ukubophelela kulungelelwaniso lwento ekwisicatshulwa somthombo, iimodeli zokulungelelanisa kunye nemixholo yangoku yesikhuseli sekopi esisebenzayo. , njl. Ukuphumeza ezi ndlela kukholisa ukuba ngumceli mngeni, kwaye ngokuHamba kunokunciphisa kakhulu iinzame zokuphuhlisa imifuziselo yolwimi olusekelwe kumqheba ngokubonelela ngophumezo olukumgangatho ophezulu.

Ukongeza kwiindlela ezingundoqo ezidweliswe ngasentla, Ngesandla ibonelela ngesiseko sezixhobo zokubhaliweyo kunye ne-snapshots, inkxaso yokudibanisa kunye nabahleli bekhowudi yemvelaphi (kubandakanywa ngaphandle kwebhokisi udibaniso kunye nomhleli we-Xtext), kunye namanye amacandelo e-UI aqhelekileyo. sebenza kunye nabahleli bekhowudi yemvelaphi. Ukubonisa amandla ayo, iprojekthi ibonelela ngemizekelo emininzi, kubandakanywa ukuphunyezwa kwemodeli yeJava kwiHandly. (Xa kuthelekiswa nokuphunyezwa ngokupheleleyo komfuziselo weJava kwi-JDT, le modeli yenziwe ngabom ngandlel’ ithile ukuze icace ngakumbi.)

Njengoko kuphawuliwe ngaphambili, ugqaliselo oluphambili ngexesha loyilo lokuqala lwe-Handly kunye nophuhliso olulandelayo kwaye lusaqhubeka lukwi-scalability kunye nokuguquguquka.

Ngokomgaqo, iimodeli ezisekwe ngokuphathwa zilinganisa kakuhle "ngoyilo". Umzekelo, isiphatho/isiqhalo somzimba sikuvumela ukuba unciphise ubungakanani bememori esetyenziswa yimodeli. Kodwa kukho kwakhona ama-nuances. Ngaloo ndlela, xa kuvavanywa ngokuHamba ukulinganisa, ingxaki yafunyanwa ekuphunyezweni kwendlela yokwazisa - xa inani elikhulu lezinto zatshintshwa, ukwakha i-deltas kuthathe ixesha elide kakhulu. Kwavela ukuba ingxaki efanayo yayikhona kwimodeli ye-JDT yeJava, apho ikhowudi ehambelanayo yayikhe yatshintshwa. Silungise i-bug kwi-Handly kwaye salungiselela ipatch efanayo ye-JDT, eyamkelwe ngombulelo. Lo ngumzekelo nje omnye apho ukwazisa ngokuHamba kumiliselo olukhoyo olukhoyo lunokuba luncedo, kuba kulo mzekelo ibug inokulungiswa kwindawo enye nje.

Ukwenza uphumezo ngokuHamba kwiimodeli ezikhoyo zifezeke ngokobuchule, ithala leencwadi kufuneka libe nokuguquguquka okubalulekileyo. Ingxaki ephambili kukugcina ukuhambelana ngasemva kuyo yonke imodeli ye-API. Le ngxaki yasonjululwa kwi Ngesandla 0.5 ngokwahlula ngokucacileyo i-API yemodeli ethile, echazwe kwaye ilawulwa ngokupheleleyo ngumphuhlisi, ukusuka kwi-API ye-meta-level edibeneyo enikezelwa lithala leencwadi. Oku akukwenzi kube lula ukuba kuphunyezwe ngokuHandly kumiliselo olukhoyo, kodwa ikwanika umphuhlisi omtsha wemodeli inkululeko ebalulekileyo xa kuyilwa i-API.

Ukuba bhetyebhetye kuneminye imiba. Umzekelo, i-Handly ibeka phantse akukho zithintelo kulwakhiwo lwemodeli kwaye ingasetyenziselwa ukwenza imodeli zombini-injongo-jikelele kunye neelwimi ezithe ngqo kwisizinda. Xa ukwakhiwa kwesakhiwo sefayile yomthombo, ngokuHandly ayichazi naluphi na uhlobo oluthile lokumelwa kwe-AST kwaye, ngokomgaqo, ayifuni nokuba khona kwe-AST ngokwayo, ngaloo ndlela iqinisekisa ukuhambelana phantse nayiphi na indlela yokwahlula. Okokugqibela, ixhasa udibaniso olupheleleyo kunye nendawo yokusebenza ye-Eclipse, kodwa inokusebenza ngokuthe ngqo neenkqubo zefayile enkosi ngokudityaniswa kwayo Inkqubo yeFayile ye-Eclipse (EFS).

Inguqulelo yangoku Ngesandla 0.6 yaphuma ngoDisemba 2016. Ngaphandle kwento yokuba iprojekthi okwangoku ikwimeko yokufakwa kwaye i-API ayikagqitywa ekugqibeleni, i-Handly sele isetyenziswe kwiimveliso ezimbini ezinkulu zorhwebo ezithatha umngcipheko wokuba "njengabamkeli bokuqala", kwaye, manditsho, ungazisoli okwangoku.

Njengoko kuphawuliwe ngasentla, enye yezi mveliso yi-1C: Izixhobo zoPhuhliso lweShishini, apho isetyenziswa ngokuHandly ukusuka ekuqaleni ukuya kwimodeli yesakhiwo esikwinqanaba eliphezulu le-1C: Iilwimi zeshishini njengolwimi olwakhelwe ngaphakathi kunye nolwimi lombuzo. . Enye imveliso ayaziwa kangako kuluntu jikelele. Oku Codasip Studio, indawo edibeneyo yoyilo lwesicelo-inkqubo ethile yomyalelo-eseti (ASIP), esetyenziswa zombini ngaphakathi kwenkampani yaseCzech iCodasip ngokwayo kunye nabathengi bayo, kubandakanya AMD, AVG, Imobilen, Uyilo lweSigma. I-Codasip isebenzise i-Handly kwimveliso ukususela ngo-2015, iqala nge-version Handly 0.2. Ukukhutshwa kwamva nje kweCodasip Studio isebenzisa inguqulo ye-0.5, ekhutshwe ngoJuni ka-2016. U-Ondřej Ilčík, okhokela uphuhliso lwe-IDE e-Codasip, unxibelelana neprojekthi, enikezela ngengxelo ebalulekileyo egameni “lomntu wesithathu owamkelayo”. Wade wakwazi ukufumana ixesha elikhululekile lokuthatha inxaxheba ngokuthe ngqo kuphuhliso lweprojekthi, ukuphumeza i-UI layer (~ 4000 imigca yekhowudi) komnye wemizekelo ye-Handly, imodeli yeJava. Ulwazi oluthe kratya lwesandla sokuqala malunga nokusetyenziswa kwe-Handly by adopters lunokufumaneka kwiphepha Iindaba Zempumelelo iprojekthi.

Siyathemba ukuba emva kokukhululwa kwenguqulo ye-1.0 ngesiqinisekiso sokuzinza kwe-API kunye neprojekthi eshiya i-incubation state, i-Handly iya kuba nabamkeli abatsha. Okwangoku, le projekthi iyaqhubeka nokuvavanya kunye nokuphucula ngakumbi i-API, ikhupha ezimbini "ezinkulu" ezikhutshwayo ngonyaka - ngoJuni (umhla ofanayo nokukhutshwa kwe-Eclipse ngexesha elifanayo) kunye noDisemba, ukubonelela ngeshedyuli eqikelelweyo ukuba abamkeli banokuthembela kuyo. Sisenokongeza kwakhona ukuba "isantya sebug" yeprojekthi ihlala ikwinqanaba elisezantsi kwaye i-Handly ibisebenza ngokuthembekileyo kwiimveliso zabamkeli bokuqala ukusukela kwiinguqulelo zokuqala. Ukujonga ngakumbi i-Eclipse Hand, ungasebenzisa Ukuqalisa Isifundo и Ubume boYilo.

umthombo: www.habr.com

Yongeza izimvo