Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools

Pwobableman, Eklips depi lontan pa bezwen okenn entwodiksyon espesyal. Anpil moun abitye ak Eclipse gras ak zouti devlopman Eclipse Java yo (JDT). Li se popilè sous louvri Java IDE sa a ki pi fò devlopè asosye ak mo "Eclipse". Sepandan, Eclipse se tou de yon platfòm ekstansibl pou entegre zouti devlopman (Eclipse Platform), ak yon kantite IDE ki bati sou baz li yo, ki gen ladan JDT. Eclipse se tou de Pwojè Eclipse la, pwojè nivo siperyè ki kowòdone devlopman platfòm Eclipse ak JDT, ak SDK Eclipse, rezilta devlopman sa a. Finalman, Eclipse se yon fondasyon sous ouvè ki gen yon gwo kominote pwojè, yo pa tout ekri an Java oswa ki gen rapò ak zouti devlopman (pa egzanp, pwojè yo). Eclipse IoT и Syans eklips). Mond Eclipse la trè divès.

Nan atik sa a, ki se BECA nan lanati, nou pral eseye gade kèk nan debaz yo nan achitekti Eclipse kòm yon platfòm pou bati zouti devlopman entegre epi bay yon premye lide sou eleman yo Eclipse ki fòme fondasyon teknoloji a. platfòm pou "nouvo Configurator" 1C: Enterprise. 1C: Zouti Devlopman Antrepriz. Natirèlman, yon revizyon konsa pral inevitableman lajman supèrfisyèl ak olye limite, ki gen ladan paske nou ap konsantre pa sèlman sou devlopè Eclipse kòm odyans lan sib. Sepandan, nou espere ke menm devlopè Eclipse ki gen eksperyans yo pral kapab jwenn enfòmasyon enteresan nan atik la. Pou egzanp, nou pral pale sou youn nan "sekrè yo nan Eclipse", yon pwojè relativman nouvo ak ti kras li te ye. Eclipse Handly, ki te fonde ak sipòte pa 1C.
Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools

Entwodiksyon nan Achitekti Eclipse

Ann premye gade kèk aspè jeneral nan achitekti Eclipse la lè l sèvi avèk egzanp lan Zouti devlopman Eclipse Java (JDT). Chwa a nan JDT kòm yon egzanp se pa aksidan. Sa a se premye anviwònman devlopman entegre ki parèt nan Eclipse. Lòt pwojè *DT Eclipse, tankou Eclipse C/C++ Development Tooling (CDT), yo te kreye pita epi prete tou de prensip debaz achitekti ak fragman kòd sous endividyèl nan JDT. Fondamantal yo nan achitekti ki tabli nan JDT yo enpòtan nan jounen jodi a pou prèske nenpòt IDE ki bati sou tèt platfòm la Eclipse, ki gen ladan 1C: Zouti Devlopman Antrepriz.

Premye a tout, li ta dwe remake ke Eclipse se karakterize pa yon kouch achitekti san patipri klè, ak separasyon nan fonksyonalite endepandan lang ak fonksyonalite ki fèt pou sipòte lang pwogramasyon espesifik, ak separasyon nan UI-endepandan "nwayo" konpozan soti nan eleman ki asosye. ak sipòte koòdone itilizatè.

Kidonk, Platfòm Eclipse la defini yon enfrastrikti komen, endepandan langaj, epi zouti devlopman Java yo ajoute yon IDE Java ki gen tout karakteristik nan Eclipse. Tou de platfòm Eclipse la ak JDT a konpoze de plizyè eleman, yo chak fè pati swa yon "nwayo" endepandan UI oswa yon kouch UI (Figi 1).

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 1. Eclipse Platform ak JDT

Ann fè lis eleman prensipal yo nan platfòm Eclipse la:

  • Rountim — Defini enfrastrikti plugin a. Eclipse karakterize pa yon achitekti modilè. Esansyèlman, Eclipse se yon koleksyon "pwen ekstansyon" ak "ekstansyon".
  • Espas Travay — Jere youn oswa plizyè pwojè. Yon pwojè konsiste de dosye ak dosye ki trase dirèkteman nan sistèm dosye a.
  • Twou zouti estanda Widget (SWT) - Bay eleman koòdone itilizatè debaz entegre ak sistèm operasyon an.
  • JFace — Bay yon kantite kad UI ki bati sou tèt SWT.
  • Sou li a — Defini paradigm Eclipse UI: editè, opinyon, pèspektiv.

Li dwe di ke platfòm la Eclipse bay tou anpil lòt konpozan itil pou bati zouti devlopman entegre, tankou Debug, Konpare, Search, ak Ekip. Yo ta dwe mansyone espesyal JFace Text - baz pou bati "editè entelijan" nan kòd sous. Malerezman, menm yon egzamen kout sou eleman sa yo, ansanm ak konpozan kouch UI yo, pa posib nan sijè ki abòde lan atik sa a, kidonk nan rès la nan seksyon sa a nou pral limite tèt nou nan yon apèsi sou eleman prensipal "debaz yo" nan. platfòm Eclipse ak JDT.

Nwayo Runtime

Enfrastrikti plugin Eclipse baze sou OSGi ak pwojè a bay Eklips ekinoks. Chak plugin Eclipse se yon pake OSGi. Espesifikasyon OSGi defini, an patikilye, mekanis pou vèsyon ak rezolisyon depandans. Anplis de mekanis estanda sa yo, Equinox prezante konsèp la pwen ekspansyon. Chak Plugin ka defini pwen ekstansyon pwòp li yo, epi tou prezante fonksyonalite adisyonèl ("ekstansyon") nan sistèm nan lè l sèvi avèk pwen ekstansyon defini pa menm grefon yo oswa lòt. Nenpòt deskripsyon detaye sou mekanis OSGi ak Equinox yo pi lwen pase sijè ki abòde lan atik sa a. Se pou nou sèlman sonje ke modularizasyon nan Eclipse se total (nenpòt subsistèm, ki gen ladan Runtime, konsiste de youn oswa plis grefon), ak prèske tout bagay nan Eclipse se yon ekstansyon. Anplis, prensip sa yo te entegre nan achitekti Eclipse depi lontan anvan entwodiksyon OSGi (nan epòk sa a yo te itilize pwòp teknoloji yo, ki sanble anpil ak OSGi).

Espas Travay Nwayo

Prèske nenpòt anviwònman devlopman entegre ki bati sou platfòm Eclipse la ap travay ak espas travay Eclipse. Li se espas travay la ki anjeneral gen kòd sous aplikasyon an devlope nan IDE la. Espas travay kat dirèkteman nan sistèm dosye a epi li konsiste de pwojè ki gen dosye ak dosye. Yo rele pwojè, dosye ak dosye sa yo resous yo espas travay. Aplikasyon an espas travay nan Eclipse sèvi kòm yon kachèt an relasyon ak sistèm nan dosye, ki fè li posib siyifikativman akselere travèse nan pye bwa resous la. Anplis de sa, espas travay bay yon kantite sèvis adisyonèl, ki gen ladan mekanis notifikasyon pou chanjman resous yo и enfrastrikti batiman incrémentielle.

Eleman Resous Nwayo a (org.eclipse.core.resources plugin) responsab pou sipòte espas travay la ak resous li yo. An patikilye, eleman sa a bay aksè pwogramasyon nan espas travay la nan fòm lan modèl resous yo. Pou travay efektivman ak modèl sa a, kliyan bezwen yon fason senp pou prezante yon lyen ki mennen nan yon resous. Nan ka sa a, li ta dezirab kache objè a ki dirèkteman magazen eta a nan resous la nan modèl la soti nan aksè kliyan. Sinon, nan ka a nan, pou egzanp, efase yon dosye, kliyan an ta ka kontinye kenbe yon objè ki pa nan modèl la ankò, ak pwoblèm sa yo. Eclipse rezoud pwoblèm sa a lè l sèvi avèk yon bagay ki rele manyen resous. Manch aji kòm yon kle (li sèlman konnen chemen an nan resous la nan espas travay la) ak konplètman kontwole aksè nan objè a modèl entèn, ki dirèkteman magazen enfòmasyon sou eta a nan resous la. Konsepsyon sa a se yon varyasyon nan modèl la Manch/Kò.

Diri. Figi 2 montre idyòm Manch/Kò jan yo aplike nan modèl resous la. Koòdone IResource a reprezante manch yon resous epi li se yon API, kontrèman ak klas Resous, ki aplike koòdone sa a, ak klas ResourceInfo, ki reprezante kò a, ki pa API. Nou mete aksan sou ke manch sèlman konnen chemen an nan resous la anrapò ak rasin nan espas travay epi li pa genyen yon lyen nan enfòmasyon resous. Objè enfòmasyon resous yo fòme yon sa yo rele "pyebwa eleman". Estrikti done sa a konplètman konkretize nan memwa. Pou jwenn egzanp enfòmasyon resous ki koresponn ak yon manch, pye bwa a eleman travèse dapre chemen ki estoke nan manch sa a.

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 2. IResource ak ResourceInfo

Kòm nou pral wè pita, konsepsyon debaz modèl resous la (nou ta ka rele li ki baze sou manch) yo itilize nan Eclipse pou lòt modèl tou. Pou kounye a, ann lis kèk nan pwopriyete yo diferan nan konsepsyon sa a:

  • Manch se yon objè ki gen valè. Objè valè yo se objè imuiabl ki gen egalite ki pa baze sou idantite. Objè sa yo ka itilize san danje kòm yon kle nan resipyan hashed. Plizyè ka nan manch ka fè referans a menm resous la. Pou konpare yo, ou bezwen sèvi ak metòd equals(Object).
  • Manch defini konpòtman an nan yon resous, men li pa genyen enfòmasyon sou eta a nan resous la (sèl done li estoke se "kle a", chemen an nan resous la).
  • Manch ka refere a yon resous ki pa egziste (swa yon resous ki poko kreye, oswa yon resous ki deja efase). Ou ka tcheke egzistans yon resous lè l sèvi avèk metòd IResource.exists().
  • Gen kèk operasyon ki ka aplike ki baze sèlman sou enfòmasyon ki estoke nan manch nan tèt li (sa yo rele operasyon manch sèlman). Egzanp yo se IResource.getParent(), getFullPath(), elatriye. Resous la pa bezwen egziste pou yon operasyon konsa reyisi. Operasyon ki mande pou yon resous egziste pou yo reyisi voye yon CoreException si resous la pa egziste.

Eclipse bay yon mekanis efikas pou notifye chanjman resous espas travay (Figi 3). Resous yo ka chanje swa kòm rezilta aksyon ki fèt nan Eclipse IDE tèt li oswa kòm rezilta senkronizasyon ak sistèm dosye a. Nan de ka yo, kliyan ki abònman nan notifikasyon yo bay enfòmasyon detaye sou chanjman yo nan fòm "deltas resous". Yon delta dekri chanjman ki genyen ant de eta yon (sous-)pyebwa resous espas travay epi li se yon pye bwa, chak ne ki dekri yon chanjman nan yon resous epi li gen yon lis delta nan pwochen nivo ki dekri chanjman nan resous timoun yo.

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 3. IResourceChangeEvent ak IResourceDelta

Mekanis notifikasyon ki baze sou delta resous yo gen karakteristik sa yo:

  • Yon sèl chanjman ak anpil chanjman yo dekri lè l sèvi avèk menm estrikti a, depi delta a bati lè l sèvi avèk prensip la nan konpozisyon rekursif. Kliyan abònen yo ka trete notifikasyon chanjman resous yo lè l sèvi avèk desandan rekursif atravè yon pye bwa delta.
  • Delta a gen enfòmasyon konplè sou chanjman nan resous la, ki gen ladan mouvman li yo ak/oswa chanjman nan "makè" ki asosye ak li (pa egzanp, erè konpilasyon yo reprezante kòm makè).
  • Depi referans resous yo fèt nan manch lan, delta ka natirèlman referans yon resous aleka.

Kòm nou pral wè byento, eleman prensipal yo nan konsepsyon an nan mekanis nan notifikasyon chanjman modèl resous yo enpòtan tou pou lòt modèl ki baze sou manch.

Nwayo JDT

Modèl resous espas travay Eclipse la se yon modèl fondamantal ki agnostik langaj. Eleman Nwayo JDT (plugin org.eclipse.jdt.core) bay yon API pou navige ak analize estrikti espas travay la nan yon pèspektiv Java, sa yo rele "modèl Java" (Modèl Java). API sa a defini an tèm de eleman Java, kòm opoze ak modèl resous kache API, ki defini an tèm de dosye ak dosye. Entèfas prensipal yo nan pye bwa eleman Java yo montre nan Fig. 4.

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 4. Eleman modèl Java

Modèl Java a sèvi ak menm langaj manch/kò ak modèl resous la (Figi 5). IJavaElement se manch lan, ak JavaElementInfo jwe wòl kò a. Koòdone IJavaElement la defini yon pwotokòl komen pou tout eleman Java yo. Gen kèk nan metòd li yo se manch-sèlman: getElementName (), getParent (), elatriye. Objè JavaElementInfo estoke eta eleman ki koresponn lan: estrikti ak atribi li yo.

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 5. IJavaElement ak JavaElementInfo

Modèl Java a gen kèk diferans nan aplikasyon an nan konsepsyon debaz manch / kò a konpare ak modèl resous la. Jan nou note pi wo a, nan modèl resous la, pye bwa a eleman, ki gen nœuds yo se objè enfòmasyon resous, se antyèman genyen nan memwa. Men, modèl Java a ka gen yon kantite eleman siyifikativman pi gwo pase pye bwa resous la, paske li reprezante tou estrikti entèn nan fichye .java ak .class: kalite, jaden, ak metòd.

Pou evite konplètman materyalize pye bwa a tout antye nan eleman nan memwa, aplikasyon an modèl Java itilize yon kachè LRU gwosè limite nan enfòmasyon eleman, kote kle a se manch IJavaElement. objè enfòmasyon eleman yo kreye sou demann pandan pye bwa a eleman yo ap navige. Nan ka sa a, atik ki pi piti yo itilize yo mete deyò nan kachèt la, epi konsomasyon memwa modèl la rete limite a gwosè kachèt espesifye a. Sa a se yon lòt avantaj nan konsepsyon ki baze sou manch, ki konplètman kache detay aplikasyon sa yo nan kòd kliyan an.

Mekanis pou notifye chanjman nan eleman Java an jeneral sanble ak mekanis pou swiv chanjman nan resous espas travay yo diskite pi wo a. Yon kliyan ki vle kontwole chanjman nan modèl Java a abònman nan notifikasyon, ki reprezante kòm yon objè ElementChangedEvent ki gen yon IJavaElementDelta (Figi 6).

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 6. ElementChangedEvent ak IJavaElementDelta

Modèl Java a pa genyen enfòmasyon sou kò metòd oswa rezolisyon non, kidonk pou analiz detaye sou kòd ki ekri nan Java, JDT Core bay yon modèl adisyonèl (ki pa baze sou manch): pyebwa sentaks abstrè (abstract pyebwa sentaks, AST). AST reprezante rezilta analiz tèks sous la. Nœuds AST yo koresponn ak eleman nan estrikti modil sous la (deklarasyon, operatè, ekspresyon, elatriye) epi yo genyen enfòmasyon sou kowòdone eleman ki koresponn lan nan tèks sous la, osi byen ke (tankou opsyon) enfòmasyon sou rezolisyon non an. fòm nan lyen nan sa yo rele mare. Liaisons yo se objè ki reprezante antite non yo, tankou kalite, metòd, ak varyab, konpilatè a konnen. Kontrèman ak nœuds AST, ki fòme yon pye bwa, lyezon sipòte kwa-referans epi jeneralman fòme yon graf. Klas abstrè ASTNode se klas baz komen pou tout nœuds AST. Sous-klas ASTNode yo koresponn ak konstri espesifik sentaktik lang Java a.

Paske pye bwa sentaks ka konsome yon kantite siyifikatif memwa, JDT kache sèlman yon sèl AST pou editè aktif la. Kontrèman ak modèl Java a, AST la anjeneral konsidere kòm yon modèl "entèmedyè", "tanporè", eleman kliyan yo pa ta dwe kenbe referans deyò kontèks operasyon an ki te mennen nan kreyasyon AST la.

Twa modèl ki nan lis yo (modèl Java, AST, atachman) ansanm fòme baz pou bati "zouti devlopman entelijan" nan JDT, ki gen ladan yon editè Java pwisan ak divès "èd", divès aksyon pou trete kòd sous (ki gen ladan òganize yon lis enpòte. non ak fòma selon style la Customized), zouti rechèch ak refactoring. Nan ka sa a, modèl Java a jwe yon wòl espesyal, paske se li ki itilize kòm baz pou yon reprezantasyon vizyèl nan estrikti aplikasyon an ap devlope (pa egzanp, nan Package Explorer, Outline, Search, Call Hierarchy, ak Kalite yerachi).

Konpozan Eclipse yo itilize nan 1C:Enterprise Developments Tools

Nan Fig. Figi 7 montre eleman Eclipse ki fòme fondasyon platfòm teknoloji pou 1C:Enterprise Development Tools.

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 7. Eclipse kòm yon platfòm pou 1C:Enterprise Development Tools

Platfòm Eclipse bay enfrastrikti debaz. Nou te gade kèk aspè nan enfrastrikti sa a nan seksyon anvan an.

Eclipse Modeling Framework (EMF) bay yon mwayen jeneral pou modèl done estriktire. EMF entegre ak platfòm Eclipse, men li ka itilize tou separeman nan aplikasyon Java regilye yo. Byen souvan, nouvo devlopè Eclipse yo deja byen konnen EMF, byenke yo poko byen konprann sibtilite platfòm Eclipse la. Youn nan rezon pou popilarite sa yo byen merite se konsepsyon inivèsèl la, ki gen ladan, pami lòt bagay, yon API inifye meta-nivo, ki pèmèt ou travay ak nenpòt modèl EMF nan yon fason jeneral. Enplemantasyon debaz yo pou objè modèl yo bay EMF ak subsistèm pou jenere kòd modèl ki baze sou meta-modèl la siyifikativman ogmante vitès devlopman ak redwi kantite erè. EMF gen tou mekanis pou seri modèl, swiv chanjman nan modèl la, ak plis ankò.

Tankou nenpòt zouti vrèman jeneral, EMF apwopriye pou rezoud yon pakèt pwoblèm modèl, men kèk klas modèl (pa egzanp, modèl ki baze sou manch yo diskite pi wo a) ka mande pou zouti modèl plis espesyalize. Pale sou EMF se yon travay engra, espesyalman nan limit limite nan yon atik, paske sa a se sijè a nan yon liv separe, ak yon sèl olye epè. Se pou nou sèlman sonje ke sistèm nan bon jan kalite jeneralizasyon ki kache anba EMF la te pèmèt nesans la nan yon seri antye nan pwojè dedye a modèl, ki enkli nan pwojè nan nivo siperyè. Modèl eklips ansanm ak EMF nan tèt li. Youn nan pwojè sa yo se Eclipse Xtext.

Eclipse Xtext bay yon "modelizasyon tèks" enfrastrikti. Xtext itilize ANTLR pou analiz tèks sous la ak EMF pou reprezante ASG ki kapab lakòz (abstract graf semantik, ki se esansyèlman yon konbinezon de AST ak obligatwa), yo rele tou "modèl semantik". Gramè lang Xtext modelize a dekri nan pwòp lang Xtext la. Sa a pèmèt ou non sèlman jenere yon deskripsyon gramè pou ANTLR, men tou pou w jwenn yon mekanis seri AST (sa vle di Xtext bay tou de yon analizeur ak yon unparser), yon allusion kontèks, ak yon kantite lòt eleman lang. Yon lòt bò, lang gramè yo itilize nan Xtext la mwens fleksib pase, di, lang gramè yo itilize nan ANTLR. Se poutèt sa, pafwa li nesesè "pliye" lang aplike a nan Xtext, ki anjeneral se pa yon pwoblèm si nou ap pale de yon lang ke yo te devlope nan grafouyen, men li ka akseptab pou lang ki gen yon sentaks deja etabli. Malgre sa, Xtext se kounye a zouti ki pi matirite, ki gen anpil karakteristik ak versatile nan Eclipse pou bati langaj pwogramasyon ak zouti devlopman pou yo. An patikilye, li se yon zouti ideyal pou pwototip rapid lang ki espesifik nan domèn (Lang espesifik domèn, DSL). Anplis de "nwayo lang" ki mansyone anwo a ki baze sou ANTLR ak EMF, Xtext bay anpil konpozan itil ki pi wo nivo, ki gen ladan mekanis Indexing, konstriksyon incrémentielle, yon "editè entelijan", ak anpil, plis ankò, men kite manch-. modèl lang ki baze sou. Menm jan ak EMF, Xtext se yon sijè ki merite yon liv separe, e nou pa ka menm pale yon ti tan sou tout kapasite li kounye a.

1C: Zouti Devlopman Antrepriz aktivman itilize tou de EMF tèt li ak yon kantite lòt pwojè Eclipse Modeling. An patikilye, Xtext se youn nan fondasyon zouti devlopman pou lang 1C:Enterprise tankou langaj pwogramasyon entegre ak lang rechèch. Yon lòt baz pou zouti devlopman sa yo se pwojè Eclipse Handly, ke nou pral diskite an plis detay (nan eleman Eclipse ki nan lis la, li toujou pi piti a).

Eclipse Handly, yon sou-pwojè nan pwojè nivo Eclipse Teknoloji a, parèt kòm yon rezilta nan yon premye kontribisyon kòd nan Fondasyon an Eclipse te fè pa 1C nan 2014. Depi lè sa a, 1C te kontinye sipòte devlopman nan pwojè a: Handly committers yo se anplwaye nan konpayi an. Pwojè a se ti, men li okipe yon nich olye inik nan Eclipse: objektif prensipal li se sipòte devlopman nan modèl ki baze sou manch.

Prensip debaz achitekti modèl ki baze sou manch, tankou idiom manch/kò, yo te diskite pi wo a lè l sèvi avèk modèl resous la ak modèl Java kòm egzanp. Li te note tou ke tou de modèl resous la ak modèl Java a se fondasyon enpòtan pou zouti devlopman Eclipse Java (JDT). Epi kòm prèske tout pwojè *DT Eclipse yo gen yon achitekti ki sanble ak JDT, li pa ta yon gwo egzajerasyon pou nou di ke modèl ki baze sou manch yo anba anpil, si se pa tout IDE ki bati sou platfòm Eclipse la. Pa egzanp, Eclipse C/C++ Development Tooling (CDT) gen yon modèl C/C++ ki baze sou manch ki jwe menm wòl nan achitekti CDT ak modèl Java nan JDT.

Anvan Handly, Eclipse pa t ofri bibliyotèk espesyalize pou konstwi modèl lang ki baze sou manch. Modèl ki egziste kounye a yo te kreye sitou pa dirèkteman adapte kòd modèl Java a (aka kopye / kole), nan ka kote li pèmèt Eclipse Public License (EPL). (Li evidan, sa a se nòmalman pa yon pwoblèm legal pou, di, pwojè Eclipse tèt li, men se pa pou pwodwi sous fèmen.) Anplis de sa nan aza nannan li yo, teknik sa a entwodui pwoblèm byen li te ye: duplication kòd prezante pa lè adapte yo ak erè, elatriye. Ki sa ki pi mal se ke modèl ki kapab lakòz yo rete "bagay nan tèt yo" epi yo pa pran avantaj de potansyèl la pou inifikasyon. Men, izole konsèp komen ak pwotokòl pou modèl lang ki baze sou manch ka mennen nan kreyasyon eleman ki kapab itilize ankò pou travay avèk yo, menm jan ak sa ki te pase nan ka EMF.

Se pa ke Eclipse pa t 'konprann pwoblèm sa yo. Tounen an 2005 Martin Aeschlimann, rezime eksperyans nan devlope pwototip CDT la, te diskite nesesite pou kreye yon enfrastrikti komen pou modèl lang, ki gen ladan modèl ki baze sou manch. Men, kòm souvan rive, akòz pi gwo travay priyorite, aplikasyon an nan lide sa yo pa janm rive alantou li. Pandan se tan, faktè *DT kòd se toujou youn nan sijè ki pa devlope nan Eclipse.

Nan yon sèten sans, pwojè Handly fèt pou rezoud apeprè menm pwoblèm ak EMF, men pou modèl ki baze sou manch, ak prensipalman langaj (sa vle di, ki reprezante eleman estrikti kèk langaj pwogramasyon). Objektif prensipal yo fikse lè konsepsyon Handly yo ki nan lis anba a:

  • Idantifikasyon abstraksyon prensipal yo nan matyè a.
  • Diminye efò ak amelyore kalite aplikasyon modèl lang ki baze sou manch atravè reitilizasyon kòd.
  • Bay yon API inifye meta-nivo nan modèl ki kapab lakòz yo, sa ki fè li posib yo kreye eleman IDE komen ki travay ak modèl ki baze sou manch lang.
  • Fleksibilite ak évolutivité.
  • Entegrasyon ak Xtext (nan yon kouch separe).

Pou mete aksan sou konsèp ak pwotokòl komen yo, yo te analize aplikasyon ki deja egziste nan modèl lang ki baze sou manch. Entèfas prensipal yo ak aplikasyon debaz yo bay Handly yo montre nan Fig. 8.

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 8. Entèfas komen ak aplikasyon debaz eleman Handly

Koòdone IElement la reprezante manch yon eleman epi li komen nan eleman tout modèl ki baze sou Handly. Eleman klas abstrè aplike mekanis manch/kò jeneralize a (figi 9).

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 9. IElement ak jenerik manch/kò aplikasyon

Anplis de sa, Handly bay yon mekanis jeneralize pou notifye sou chanjman nan eleman modèl (figi 10). Kòm ou ka wè, li se lajman menm jan ak mekanis notifikasyon yo aplike nan modèl resous la ak modèl Java a, epi li sèvi ak IElementDelta bay yon reprezantasyon inifye nan enfòmasyon chanjman eleman.

Eclipse kòm yon platfòm teknoloji pou 1C:Enterprise Development Tools
Diri. 10. Entèfas jeneral ak aplikasyon debaz mekanis notifikasyon Handly

Pati Handly diskite pi wo a (figi 9 ak 10) ka itilize pou reprezante prèske nenpòt modèl ki baze sou manch. Pou kreye lengwistik modèl, pwojè a ofri plis fonksyonalite - an patikilye, koòdone komen ak aplikasyon debaz pou eleman nan estrikti tèks sous la, sa yo rele. eleman sous (figi 8). Koòdone ISourceFile reprezante yon fichye sous, epi ISourceConstruct reprezante yon eleman nan fichye sous la. Klas abstrè SourceFile ak SourceConstruct aplike mekanis jeneralize pou sipòte travay ak fichye sous ak eleman yo, pou egzanp, travay ak tanpon tèks, obligatwa ak kowòdone yon eleman nan tèks sous la, rekonsilye modèl ak kontni aktyèl la nan yon tanpon kopi k ap travay. , elatriye. Aplike mekanis sa yo se nòmalman yon defi, epi Handly ka siyifikativman redwi efò pou devlope modèl lang ki baze sou manch lè li bay enplemantasyon baz bon jan kalite.

Anplis de mekanis debaz yo ki nan lis pi wo a, Handly bay yon enfrastrikti pou tanpon tèks ak snapshots, sipò pou entegrasyon ak editè kòd sous (ki gen ladan entegrasyon soti nan bwat la ak editè Xtext), osi byen ke kèk eleman UI komen ki travay ak editè kòd sous.Modèl pratik tankou kad deskripsyon. Pou ilistre kapasite li yo, pwojè a bay plizyè egzanp, tankou yon aplikasyon modèl Java nan Handly. (Konpare ak aplikasyon an konplè nan modèl Java nan JDT, modèl sa a entansyonèlman yon ti jan senplifye pou pi klè.)

Kòm te note pi bonè, yon gwo konsantre pandan premye konsepsyon Handly a ak devlopman ki vin apre yo te e kontinye ap sou évolutivité ak fleksibilite.

Nan prensip, modèl ki baze sou manch echèl byen byen "pa konsepsyon". Pou egzanp, idiom manch/kò pèmèt ou limite kantite memwa konsome pa yon modèl. Men, gen tou nuans. Se konsa, lè tès Handly pou évolutivité, yo te dekouvri yon pwoblèm nan aplikasyon an nan mekanis notifikasyon an - lè yon gwo kantite eleman yo te chanje, konstwi delta te pran twòp tan. Li te tounen soti ke menm pwoblèm nan te prezan nan modèl la JDT Java, ki soti nan ki kòd ki koresponn lan te yon fwa adapte. Nou ranje ensèk la nan Handly epi prepare yon patch menm jan an pou JDT, ki te resevwa rekonesans. Sa a se jis yon egzanp kote entwodwi Handly nan enplemantasyon modèl ki deja egziste ta ka potansyèlman itil, paske nan ka sa a yon ensèk ta ka fiks nan yon sèl kote.

Pou fè aplikasyon Handly nan aplikasyon modèl ki deja egziste teknikman posib, bibliyotèk la dwe gen anpil fleksibilite. Pwoblèm prensipal la se kenbe konpatibilite bak atravè modèl API a. Pwoblèm sa a te rezoud nan Handly 0.5 pa klèman separe API modèl-espesifik la, defini ak konplètman kontwole pa pwomotè a, ak inifye meta-nivo API bibliyotèk la bay. Sa a non sèlman fè li teknikman posib pou aplike Handly nan enplemantasyon ki deja egziste, men tou, bay nouvo devlopè modèl la anpil libète lè konsepsyon API a.

Fleksibilite gen lòt aspè tou. Pou egzanp, Handly enpoze prèske pa gen okenn restriksyon sou estrikti a nan modèl la epi yo ka itilize pou modèl tou de lang jeneral-bi ak domèn espesifik. Lè w ap konstwi estrikti fichye sous la, Handly pa preskri okenn fòm patikilye nan reprezantasyon AST epi, an prensip, pa menm mande pou prezans yon AST tèt li, kidonk asire konpatibilite ak prèske nenpòt mekanis analiz. Finalman, Handly sipòte entegrasyon konplè ak espas travay Eclipse, men li ka travay tou dirèkteman ak sistèm dosye gras a entegrasyon li yo ak Sistèm dosye Eclipse (EFS).

Kouran vèsyon Handly 0.6 te soti an Desanm 2016. Malgre lefèt ke pwojè a se kounye a nan yon eta de enkubasyon ak API a poko te finalman fiks, Handly deja itilize nan de gwo pwodwi komèsyal ki te pran risk pou yo aji kòm "adoptè bonè", epi, mwen dwe di, pa regrèt sa ankò.

Jan nou note pi wo a, youn nan pwodwi sa yo se 1C:Enterprise Development Tools, kote Handly yo itilize depi nan konmansman an pou modèl eleman estrikti wo nivo 1C:Enterprise lang sa yo kòm langaj pwogramasyon entegre ak langaj rechèch. . Yon lòt pwodwi mwens li te ye nan piblik la an jeneral. Sa a Codasip Studio, yon anviwònman konsepsyon entegre pou aplikasyon-espesifik enstriksyon-set processeur (ASIP), ki itilize tou de nan konpayi Tchekoslovaki Codasip tèt li ak pa kliyan li yo, ki gen ladan Am, Moyen, Mobileye, Sigma Designs. Codasip te itilize Handly nan pwodiksyon depi 2015, kòmanse ak vèsyon Handly 0.2. Dènye lage Codasip Studio itilize vèsyon 0.5, ki te pibliye nan mwa jen 2016. Ondřej Ilčík, ki mennen devlopman IDE nan Codasip, se an kontak ak pwojè a, li bay fidbak enpòtan anpil nan non "yon twazyèm pati adopte". Li te menm kapab jwenn kèk tan lib pou patisipe dirèkteman nan devlopman pwojè a, mete ann aplikasyon yon kouch UI (~4000 liy kòd) pou youn nan egzanp Handly yo, yon modèl Java. Ou ka jwenn plis enfòmasyon premye men sou itilizasyon Handly pa moun ki adopte yo sou paj la Siksè Stories pwojè.

Nou espere ke apre liberasyon an nan vèsyon 1.0 ak yon garanti nan estabilite API ak pwojè a kite eta a enkubasyon, Handly pral gen nouvo adopte. Antretan, pwojè a kontinye teste ak amelyore plis API a, lage de "gwo" lage chak ane - nan mwa jen (menm dat ak lage Eclipse la similtane) ak desanm, bay yon orè previzib ke moun ki adopte yo ka konte sou. Nou kapab tou ajoute ke "pousantaj ensèk" pwojè a rete nan yon nivo ki toujou ba ak Handly te travay seryezman nan pwodwi yo nan adopte bonè depi premye vèsyon yo. Pou plis eksplore Eclipse Handly, ou ka itilize Pou kòmanse Tutorial и Achitekti Apèsi sou lekòl la.

Sous: www.habr.com

Add nouvo kòmantè