Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools

Jista 'jkun, Eclipse ilha ma kellha bżonn l-ebda introduzzjoni speċjali. Ħafna nies huma familjari ma 'Eclipse grazzi għall-għodod ta' żvilupp Eclipse Java (JDT). Huwa dan l-IDE Java popolari ta 'sors miftuħ li ħafna mill-iżviluppaturi jassoċjaw mal-kelma "Eclipse". Madankollu, Eclipse hija kemm pjattaforma estensibbli għall-integrazzjoni ta 'għodod ta' żvilupp (Eclipse Platform), kif ukoll numru ta 'IDEs mibnija fuq il-bażi tagħha, inkluż JDT. Eclipse huwa kemm il-Proġett Eclipse, il-proġett tal-ogħla livell li jikkoordina l-iżvilupp tal-Pjattaforma Eclipse u l-JDT, kif ukoll l-SDK Eclipse, ir-riżultat mogħti ta’ dak l-iżvilupp. Fl-aħħarnett, Eclipse hija Fondazzjoni open-source b'komunità kbira ta 'proġetti, li mhux kollha huma miktuba bil-Java jew relatati ma' għodod ta 'żvilupp (per eżempju, proġetti Eclipse IoT и Xjenza Eclipse). Id-dinja ta 'Eclipse hija diversa ħafna.

F'dan l-artikolu, li huwa ħarsa ġenerali fin-natura, se nippruvaw inħarsu lejn uħud mill-baŜi tal-arkitettura Eclipse bħala pjattaforma għall-bini ta 'għodod ta' żvilupp integrati u nagħtu idea inizjali tal-komponenti Eclipse li jiffurmaw il-pedament tat-teknoloġija. pjattaforma għall-“Konfiguratur il-ġdid” 1C: Enterprise. 1C: Għodod għall-Iżvilupp tal-Intrapriża. Naturalment, reviżjoni bħal din inevitabbilment se tkun fil-biċċa l-kbira superfiċjali u pjuttost limitata, inkluż minħabba li qed niffukaw mhux biss fuq l-iżviluppaturi tal-Eclipse bħala l-udjenza fil-mira. Madankollu, nittamaw li anke żviluppaturi Eclipse b'esperjenza jkunu jistgħu jsibu informazzjoni interessanti fl-artiklu. Per eżempju, se nitkellmu dwar wieħed mis-"sigrieti ta 'Eclipse", proġett relattivament ġdid u ftit magħruf Eclipse Handly, li twaqqfet u appoġġjat minn 1C.
Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools

Introduzzjoni għall-Arkitettura Eclipse

Ejja l-ewwel nħarsu lejn xi aspetti ġenerali tal-arkitettura Eclipse billi tuża l-eżempju Għodod ta' żvilupp Eclipse Java (JDT). L-għażla ta' JDT bħala eżempju mhix aċċidentali. Dan huwa l-ewwel ambjent ta 'żvilupp integrat li jidher f'Eclipse. Proġetti oħra *DT Eclipse, bħal Eclipse C/C++ Development Tooling (CDT), inħolqu aktar tard u jissellfu kemm prinċipji arkitettoniċi bażiċi kif ukoll frammenti individwali tal-kodiċi tas-sors minn JDT. Il-prinċipji fundamentali tal-arkitettura stabbiliti f'JDT huma rilevanti sal-lum għal kważi kull IDE mibni fuq il-Pjattaforma Eclipse, inkluż 1C: Għodod għall-Iżvilupp tal-Intrapriża.

L-ewwelnett, għandu jiġi nnutat li Eclipse hija kkaratterizzata minn saffi arkitettoniċi pjuttost ċari, bis-separazzjoni tal-funzjonalità indipendenti mill-lingwa minn funzjonalità ddisinjata biex tappoġġja lingwi ta' programmar speċifiċi, u s-separazzjoni ta' komponenti "qalba" indipendenti mill-UI minn komponenti assoċjati. b'interface tal-utent ta 'appoġġ.

Għalhekk, il-Pjattaforma Eclipse tiddefinixxi infrastruttura komuni, indipendenti mill-lingwa, u l-għodod ta 'żvilupp Java jżidu IDE Java b'karatteristika sħiħa ma' Eclipse. Kemm il-Pjattaforma Eclipse kif ukoll il-JDT jikkonsistu f'diversi komponenti, li kull wieħed minnhom jappartjeni jew għal "qalba" indipendenti mill-UI jew saff UI (Figura 1).

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 1. Pjattaforma Eclipse u JDT

Ejja elenka l-komponenti ewlenin tal-Pjattaforma Eclipse:

  • Runtime — Jiddefinixxi l-infrastruttura tal-plugin. Eclipse hija kkaratterizzata minn arkitettura modulari. Essenzjalment, Eclipse hija ġabra ta '"punti ta' estensjoni" u "estensjonijiet".
  • Spazju tax-xogħol — Tmexxi proġett wieħed jew aktar. Proġett jikkonsisti minn folders u fajls li huma mmappjati direttament mas-sistema tal-fajls.
  • Sett ta' Għodda ta' Widget Standard (SWT) - Jipprovdi elementi bażiċi tal-interface tal-utent integrati mas-sistema operattiva.
  • JFace — Jipprovdi numru ta' oqfsa tal-IU mibnija fuq SWT.
  • Workbench — Jiddefinixxi l-paradigma Eclipse UI: edituri, fehmiet, perspettivi.

Għandu jingħad li l-Pjattaforma Eclipse tipprovdi wkoll ħafna komponenti utli oħra għall-bini ta 'għodod ta' żvilupp integrati, inklużi Debug, Qabbel, Fittex, u Tim. Għandha ssir referenza speċjali għal JFace Text - il-bażi għall-bini ta '"edituri intelliġenti" tal-kodiċi tas-sors. Sfortunatament, anke eżami sommarju ta 'dawn il-komponenti, kif ukoll il-komponenti tas-saff UI, mhuwiex possibbli fl-ambitu ta' dan l-artikolu, għalhekk fil-bqija ta 'din it-taqsima aħna se nillimitaw ruħna għal ħarsa ġenerali tal-komponenti ewlenin "qalba" ta' il-Pjattaforma Eclipse u JDT.

Core Runtime

L-infrastruttura tal-plugin Eclipse hija bbażata fuq OSGi u pprovduti mill-proġett Eklissi Equinox. Kull plugin Eclipse huwa bundle OSGi. L-ispeċifikazzjoni OSGi tiddefinixxi, b'mod partikolari, mekkaniżmi għall-verżjoni u r-riżoluzzjoni tad-dipendenza. Minbarra dawn il-mekkaniżmi standard, Equinox jintroduċi l-kunċett punti ta’ espansjoni. Kull plugin jista 'jiddefinixxi l-punti ta' estensjoni tiegħu stess, u jintroduċi wkoll funzjonalità addizzjonali ("estensjonijiet") għas-sistema billi juża punti ta 'estensjoni definiti mill-istess plugins jew oħrajn. Kwalunkwe deskrizzjoni dettaljata tal-mekkaniżmi OSGi u Equinox hija lil hinn mill-ambitu ta 'dan l-artikolu. Ejja ninnotaw biss li l-modularizzazzjoni f'Eclipse hija totali (kwalunkwe sottosistema, inkluż Runtime, tikkonsisti minn plugin wieħed jew aktar), u kważi kollox f'Eclipse huwa estensjoni. Barra minn hekk, dawn il-prinċipji kienu inkorporati fl-arkitettura Eclipse ħafna qabel l-introduzzjoni ta 'OSGi (dak iż-żmien kienu jużaw it-teknoloġija tagħhom stess, simili ħafna għal OSGi).

Spazju tax-Xogħol Core

Kważi kull ambjent ta' żvilupp integrat mibni fuq il-Pjattaforma Eclipse jaħdem mal-ispazju tax-xogħol Eclipse. Huwa l-ispazju tax-xogħol li normalment ikun fih il-kodiċi tas-sors tal-applikazzjoni żviluppata fl-IDE. Il-mapep tal-ispazju tax-xogħol direttament mas-sistema tal-fajls u jikkonsisti fi proġetti, li fihom folders u fajls. Dawn il-proġetti, folders, u fajls jissejħu riżorsi spazju tax-xogħol. L-implimentazzjoni tal-ispazju tax-xogħol f'Eclipse sservi bħala cache fir-rigward tas-sistema tal-fajls, li tagħmilha possibbli li titħaffef b'mod sinifikanti t-traversament tas-siġra tar-riżorsi. Barra minn hekk, l-ispazju tax-xogħol jipprovdi għadd ta 'servizzi addizzjonali, inklużi mekkaniżmu ta’ notifika għal bidliet fir-riżorsi и infrastruttura inkrementali tal-bennej.

Il-komponent tar-Riżorsi Ewlenin (plugin org.eclipse.core.resources) huwa responsabbli għall-appoġġ tal-ispazju tax-xogħol u r-riżorsi tiegħu. B'mod partikolari, dan il-komponent jipprovdi aċċess programmatiku għall-ispazju tax-xogħol fil-forma mudelli tar-riżorsi. Biex jaħdmu b'mod effettiv ma 'dan il-mudell, il-klijenti jeħtieġu mod sempliċi biex jippreżentaw link għal riżorsa. F'dan il-każ, ikun mixtieq li jinħbew l-oġġett li jaħżen direttament l-istat tar-riżorsa fil-mudell mill-aċċess tal-klijent. Inkella, fil-każ ta ', pereżempju, tħassar fajl, il-klijent jista' jkompli jżomm oġġett li m'għadux fil-mudell, bil-problemi li jirriżultaw. Eclipse issolvi din il-problema billi tuża xi ħaġa msejħa jimmaniġġaw riżorsa. Immaniġġja jaġixxi bħala ċavetta (jaf biss it-triq għar-riżorsa fl-ispazju tax-xogħol) u tikkontrolla kompletament l-aċċess għall-oġġett tal-mudell intern, li jaħżen direttament informazzjoni dwar l-istat tar-riżorsa. Dan id-disinn huwa varjazzjoni tal-mudell Manku/Korp.

Ross. Il-Figura 2 turi l-idjoma Handle/Body kif applikata għall-mudell tar-riżorsi. L-interface IResource tirrappreżenta l-manku ta 'riżorsa u hija API, b'differenza mill-klassi Resource, li timplimenta din l-interface, u l-klassi ResourceInfo, li tirrappreżenta l-korp, li mhumiex APIs. Aħna nenfasizzaw li l-manku jaf biss it-triq għar-riżors relattiv għall-għerq tal-ispazju tax-xogħol u ma fihx link għall-informazzjoni tar-riżorsi. Oġġetti ta' informazzjoni tar-riżorsi jiffurmaw l-hekk imsejħa "siġra tal-elementi". Din l-istruttura tad-data hija kompletament immaterjalizzata fil-memorja. Biex issib l-istanza tal-informazzjoni tar-riżorsi li tikkorrispondi għal manku, is-siġra tal-element hija traversata skont il-mogħdija maħżuna f'dak il-manku.

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 2. IResource u ResourceInfo

Kif ser naraw aktar tard, id-disinn bażiku tal-mudell tar-riżorsi (nistgħu nsejħulu bbażat fuq il-manku) jintuża f'Eclipse għal mudelli oħra wkoll. Għalissa, ejja nsemmi xi wħud mill-proprjetajiet distintivi ta 'dan id-disinn:

  • Manku huwa oġġett ta 'valur. Oġġetti ta' valur huma oġġetti immutabbli li l-ugwaljanza tagħhom mhix ibbażata fuq l-identità. Oġġetti bħal dawn jistgħu jintużaw b'mod sigur bħala ċavetta f'kontenituri hashed. Każijiet multipli ta 'manku jistgħu jirreferu għall-istess riżorsa. Biex tqabbelhom, trid tuża l-metodu equals(Object).
  • Manku jiddefinixxi l-imġieba ta 'riżorsa, iżda ma fihx informazzjoni dwar l-istat tar-riżorsa (l-unika dejta li taħżen hija ċ-"ċavetta", it-triq għar-riżorsa).
  • L-immaniġġjar jista' jirreferi għal riżorsa li ma teżistix (jew riżorsa li għadha ma ġietx maħluqa, jew riżorsa li diġà tħassret). L-eżistenza ta' riżorsa tista' tiġi ċċekkjata bl-użu tal-metodu IResource.exists().
  • Xi operazzjonijiet jistgħu jiġu implimentati bbażati biss fuq informazzjoni maħżuna fil-manku innifsu (l-hekk imsejħa operazzjonijiet tal-manku biss). Eżempji huma IResource.getParent(), getFullPath(), eċċ. Ir-riżorsa m'għandhiex għalfejn teżisti biex operazzjoni bħal din tirnexxi. Operazzjonijiet li jeħtieġu li teżisti riżorsa biex tirnexxi jarmu CoreException jekk ir-riżorsa ma teżistix.

Eclipse jipprovdi mekkaniżmu effiċjenti biex jinnotifika bidliet fir-riżorsi tal-ispazju tax-xogħol (Figura 3). Ir-riżorsi jistgħu jinbidlu jew bħala riżultat ta 'azzjonijiet imwettqa fi ħdan l-IDE Eclipse innifsu jew bħala riżultat ta' sinkronizzazzjoni mas-sistema tal-fajls. Fiż-żewġ każijiet, il-klijenti li jabbonaw għan-notifiki jingħataw informazzjoni dettaljata dwar il-bidliet fil-forma ta '"deltas tar-riżorsi". Delta tiddeskrivi bidliet bejn żewġ stati ta’ (sotto-)siġra tar-riżorsi tal-ispazju tax-xogħol u hija stess siġra, li kull nodu tagħha jiddeskrivi bidla għal riżorsa u fih lista ta’ deltas fil-livell li jmiss li jiddeskrivu bidliet fir-riżorsi tat-tfal.

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 3. IResourceChangeEvent u IResourceDelta

Il-mekkaniżmu ta' notifika bbażat fuq deltas tar-riżorsi għandu l-karatteristiċi li ġejjin:

  • Bidla waħda u ħafna bidliet huma deskritti bl-użu tal-istess struttura, peress li d-delta hija mibnija bl-użu tal-prinċipju ta 'kompożizzjoni rikorsiv. Il-klijenti tal-abbonati jistgħu jipproċessaw notifiki ta’ tibdil tar-riżorsi billi jużaw dixxendenza rikorsiva permezz ta’ siġra tad-deltas.
  • Id-delta fiha informazzjoni kompluta dwar bidliet fir-riżorsa, inkluż il-moviment tagħha u/jew bidliet fil-“markaturi” assoċjati magħha (pereżempju, żbalji ta’ kumpilazzjoni huma rappreżentati bħala markaturi).
  • Peress li r-referenzi tar-riżorsi jsiru permezz tal-manku, delta jista 'naturalment jirreferi għal riżorsa remota.

Kif se naraw dalwaqt, il-komponenti ewlenin tad-disinn tal-mekkaniżmu ta 'notifika tal-bidla tal-mudell tar-riżorsi huma rilevanti wkoll għal mudelli oħra bbażati fuq il-manku.

JDT Core

Il-mudell tar-riżorsi tal-ispazju tax-xogħol Eclipse huwa mudell fundamentali agnostiku tal-lingwa. Il-komponent JDT Core (plugin org.eclipse.jdt.core) jipprovdi API għan-navigazzjoni u l-analiżi tal-istruttura tal-ispazju tax-xogħol minn perspettiva Java, l-hekk imsejjaħ "mudell Java" (Mudell Java). Din l-API hija definita f'termini ta 'elementi Java, għall-kuntrarju tal-mudell ta' riżorsi sottostanti API, li huwa definit f'termini ta 'folders u fajls. L-interfaces ewlenin tas-siġra tal-element Java huma murija fil-Fig. 4.

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 4. Elementi tal-Mudell Java

Il-mudell Java juża l-istess manku/idjoma tal-ġisem bħall-mudell tar-riżorsi (Figura 5). IJavaElement huwa l-manku, u JavaElementInfo għandu r-rwol tal-ġisem. L-interface IJavaElement tiddefinixxi protokoll komuni għall-elementi Java kollha. Uħud mill-metodi tiegħu huma manku biss: getElementName(), getParent(), eċċ. L-oġġett JavaElementInfo jaħżen l-istat tal-element korrispondenti: l-istruttura u l-attributi tiegħu.

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 5. IJavaElement u JavaElementInfo

Il-mudell Java għandu xi differenzi fl-implimentazzjoni tad-disinn bażiku tal-manku/korp meta mqabbel mal-mudell tar-riżorsi. Kif innutat hawn fuq, fil-mudell tar-riżorsi, is-siġra tal-element, li n-nodi tagħha huma oġġetti ta 'informazzjoni tar-riżorsi, tinsab kompletament fil-memorja. Iżda l-mudell Java jista 'jkollu numru ferm akbar ta' elementi mis-siġra tar-riżorsi, minħabba li jirrappreżenta wkoll l-istruttura interna tal-fajls .java u .class: tipi, oqsma, u metodi.

Biex tevita kompletament li timmaterjalizza s-siġra kollha tal-elementi fil-memorja, l-implimentazzjoni tal-mudell Java tuża cache LRU ta 'daqs limitat ta' informazzjoni dwar l-elementi, fejn iċ-ċavetta hija manku IJavaElement. oġġetti info element huma maħluqa fuq talba kif is-siġra element hija navigata. F'dan il-każ, l-oġġetti li jintużaw l-inqas ta 'spiss jiġu żgumbrati mill-cache, u l-konsum tal-memorja tal-mudell jibqa' limitat għad-daqs tal-cache speċifikat. Dan huwa vantaġġ ieħor ta 'disinn ibbażat fuq manku, li jaħbi kompletament dettalji ta' implimentazzjoni bħal dawn mill-kodiċi tal-klijent.

Il-mekkaniżmu għan-notifika tal-bidliet fl-elementi Java huwa ġeneralment simili għall-mekkaniżmu għall-intraċċar tal-bidliet fir-riżorsi tal-ispazju tax-xogħol diskuss hawn fuq. Klijent li jixtieq jissorvelja l-bidliet fil-mudell Java jissottoskrivi għan-notifiki, li huma rappreżentati bħala oġġett ElementChangedEvent li fih IJavaElementDelta (Figura 6).

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 6. ElementChangedEvent u IJavaElementDelta

Il-mudell Java ma fihx informazzjoni dwar il-korpi tal-metodi jew ir-riżoluzzjoni tal-ismijiet, għalhekk għal analiżi dettaljata tal-kodiċi miktub f'Java, JDT Core jipprovdi mudell addizzjonali (mhux ibbażat fuq il-manku): siġra tas-sintassi astratta (siġra tas-sintassi astratta, AST). AST jirrappreżenta r-riżultat tal-parsing tat-test sors. In-nodi AST jikkorrispondu għal elementi tal-istruttura tal-modulu tas-sors (dikjarazzjonijiet, operaturi, espressjonijiet, eċċ.) u fihom informazzjoni dwar il-koordinati tal-element korrispondenti fit-test sors, kif ukoll (bħala għażla) informazzjoni dwar ir-riżoluzzjoni tal-isem f' il-forma ta 'links għall-hekk imsejħa irbit. L-irbit huma oġġetti li jirrappreżentaw entitajiet imsemmija, bħal tipi, metodi, u varjabbli, magħrufa mill-kompilatur. B'differenza għan-nodi AST, li jiffurmaw siġra, l-irbit jappoġġjaw referenzi inkroċjati u ġeneralment jiffurmaw graff. Il-klassi astratta ASTNode hija l-klassi bażi komuni għan-nodi AST kollha. Is-sottoklassijiet ASTNode jikkorrispondu għal kostruzzjonijiet sintattiċi speċifiċi tal-lingwa Java.

Minħabba li s-siġar tas-sintassi jistgħu jikkunsmaw ammont sinifikanti ta 'memorja, JDT jaħżen AST wieħed biss għall-editur attiv. B'differenza mill-mudell Java, l-AST huwa tipikament meqjus bħala mudell "intermedju," "temporanju" li l-membri tiegħu m'għandhomx jinżammu referenzjati mill-klijenti barra mill-kuntest tal-operazzjoni li wasslet għall-ħolqien tal-AST.

It-tliet mudelli elenkati (mudell Java, AST, rbit) flimkien jiffurmaw il-bażi għall-bini ta '"għodod ta' żvilupp intelliġenti" f'JDT, inkluż editur Java b'saħħtu b'diversi "helpers", azzjonijiet varji għall-ipproċessar tal-kodiċi tas-sors (inkluż l-organizzazzjoni ta 'lista ta' importazzjoni ismijiet u ifformattjar skond l-istil personalizzat), għodod ta 'tfittxija u refactoring. F'dan il-każ, il-mudell Java għandu rwol speċjali, peress li huwa li jintuża bħala l-bażi għal rappreżentazzjoni viżwali tal-istruttura tal-applikazzjoni li qed tiġi żviluppata (pereżempju, f'Pakkett Explorer, Outline, Fittex, Ġerarkija tas-Sejħiet, u Ġerarkija tat-Tip).

Komponenti Eclipse użati f'1C: Għodda ta' Żviluppi ta' Intrapriża

Fil-Fig. Il-Figura 7 turi l-komponenti Eclipse li jiffurmaw il-pedament tal-pjattaforma tat-teknoloġija għal 1C:Enterprise Development Tools.

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 7. Eclipse bħala pjattaforma għal 1C:Enterprise Development Tools

Pjattaforma Eclipse jipprovdi infrastruttura bażika. Ħarsa lejn xi aspetti ta’ din l-infrastruttura fit-taqsima preċedenti.

Qafas tal-Immudellar tal-Eclipse (EMF) jipprovdi mezz ġenerali ta' mmudellar ta' data strutturata. EMF huwa integrat mal-Pjattaforma Eclipse, iżda jista' jintuża wkoll separatament f'applikazzjonijiet Java regolari. Spiss, l-iżviluppaturi ġodda Eclipse huma diġà familjari sew mal-EMF, għalkemm għadhom ma jifhmux bis-sħiħ l-intricacies tal-Pjattaforma Eclipse. Waħda mir-raġunijiet għal popolarità mistħoqqa bħal din hija d-disinn universali, li jinkludi, fost affarijiet oħra, API ta 'livell meta unifikat, li jippermettilek taħdem ma' kwalunkwe mudell EMF b'mod ġenerali. L-implimentazzjonijiet bażiċi għall-oġġetti mudell ipprovduti minn EMF u s-subsistema għall-ġenerazzjoni tal-kodiċi tal-mudell ibbażat fuq il-meta-mudell iżidu b'mod sinifikanti l-veloċità tal-iżvilupp u jnaqqsu n-numru ta 'żbalji. L-EMF fih ukoll mekkaniżmi għas-serjelizzazzjoni tal-mudelli, it-traċċar tal-bidliet fil-mudell, u ħafna aktar.

Bħal kull għodda ta 'għan tassew ġenerali, l-EMF hija adattata biex issolvi firxa wiesgħa ta' problemi ta 'mudellar, iżda xi klassijiet ta' mudelli (per eżempju, il-mudelli bbażati fuq il-manku diskussi hawn fuq) jistgħu jeħtieġu għodod ta 'mudellar aktar speċjalizzati. Li titkellem dwar l-EMF hija kompitu ingrat, speċjalment fil-limiti limitati ta 'artiklu wieħed, peress li dan huwa s-suġġett ta' ktieb separat, u wieħed pjuttost oħxon. Ejja ninnutaw biss li s-sistema ta 'ġeneralizzazzjonijiet ta' kwalità għolja sottostanti l-EMF ippermettiet it-twelid ta 'firxa sħiħa ta' proġetti ddedikati għall-immudellar, li huma inklużi fil-proġett tal-ogħla livell. Eclipse Modeling flimkien mal-EMF innifsu. Proġett bħal dan huwa Eclipse Xtext.

Eclipse Xtext jipprovdi infrastruttura ta' "immudellar ta' test". Xtext juża ANTLR għall-parsing tat-test sors u l-EMF biex tirrappreżenta l-ASG li tirriżulta (graff semantiku astratt, li essenzjalment huwa kombinazzjoni ta 'AST u rbit), imsejjaħ ukoll "mudell semantiku". Il-grammatika tal-lingwa mmudellata minn Xtext hija deskritta fil-lingwa ta' Xtext stess. Dan jippermettilek mhux biss li tiġġenera deskrizzjoni grammatika għal ANTLR, iżda wkoll li tikseb mekkaniżmu ta 'serialization AST (jiġifieri Xtext jipprovdi kemm parser kif ukoll unparser), ħjiel ta' kuntest, u numru ta 'komponenti lingwistiċi oħra. Min-naħa l-oħra, il-lingwa grammatika użata f'Xtext hija inqas flessibbli minn, ngħidu aħna, il-lingwa grammatika użata f'ANTLR. Għalhekk, xi drabi huwa meħtieġ li "tgħawweġ" il-lingwa implimentata għal Xtext, li normalment ma tkunx problema jekk qed nitkellmu dwar lingwa li qed tiġi żviluppata mill-bidu, iżda tista 'tkun inaċċettabbli għal lingwi b'sintassi diġà stabbilita. Minkejja dan, Xtext bħalissa huwa l-aktar għodda matura, b’ħafna karatteristiċi u versatili f’Eclipse għall-bini ta’ lingwi ta’ programmar u għodod ta’ żvilupp għalihom. B'mod partikolari, hija għodda ideali għall-prototyping rapidu lingwi speċifiċi għad-dominju (lingwa speċifika għad-dominju, DSL). Minbarra l-"qalba tal-lingwa" imsemmija hawn fuq ibbażata fuq ANTLR u EMF, Xtext jipprovdi ħafna komponenti utli ta 'livell ogħla, inklużi mekkaniżmi ta' indiċjar, kostruzzjoni inkrementali, "editur intelliġenti", u ħafna, ħafna aktar, iżda jħalli barra l-manku- mudelli lingwistiċi bbażati. Bħal EMF, Xtext huwa suġġett li jixraqlu ktieb separat, u ma tantx nistgħu nitkellmu fil-qosor dwar il-kapaċitajiet kollha tiegħu bħalissa.

1C:L-Għodod tal-Iżvilupp tal-Intrapriża jużaw b'mod attiv kemm l-EMF innifsu kif ukoll għadd ta' proġetti oħra ta' Eclipse Modeling. B'mod partikolari, Xtext huwa wieħed mill-pedamenti ta 'għodod ta' żvilupp għal 1C: lingwi Enterprise bħal lingwa ta 'programmar u lingwa ta' mistoqsija integrata. Bażi oħra għal dawn l-għodod ta 'żvilupp huwa l-proġett Eclipse Handly, li se niddiskutu f'aktar dettall (mill-komponenti elenkati ta' Eclipse, għadu l-inqas magħruf).

Eclipse Handly, sottoproġett tal-proġett tal-ogħla livell Eclipse Technology, ħareġ bħala riżultat ta 'kontribut inizjali tal-kodiċi lill-Fondazzjoni Eclipse li sar minn 1C fl-2014. Minn dakinhar, 1C kompla jappoġġa l-iżvilupp tal-proġett: Handly committers huma impjegati tal-kumpanija. Il-proġett huwa żgħir, iżda jokkupa niċċa pjuttost unika f'Eclipse: l-għan ewlieni tiegħu huwa li jappoġġja l-iżvilupp ta 'mudelli bbażati fuq il-manku.

Il-prinċipji arkitettoniċi bażiċi ta 'mudelli bbażati fuq manku, bħall-idjoma manku/korp, ġew diskussi hawn fuq bl-użu tal-mudell tar-riżorsi u l-mudell Java bħala eżempji. Innota wkoll li kemm il-mudell tar-riżorsi kif ukoll il-mudell Java huma pedamenti importanti għall-għodod ta 'żvilupp Eclipse Java (JDT). U peress li kważi l-proġetti kollha *DT Eclipse għandhom arkitettura simili għal JDT, ma tkunx esaġerazzjoni kbira li wieħed jgħid li mudelli bbażati fuq il-manku huma l-bażi ta' ħafna, jekk mhux kollha IDEs mibnija fuq il-Pjattaforma Eclipse. Pereżempju, l-Eclipse C/C++ Development Tooling (CDT) għandu mudell C/C++ ibbażat fuq il-manku li għandu l-istess rwol fl-arkitettura CDT bħall-mudell Java fil-JDT.

Qabel Handly, Eclipse ma offrietx libreriji speċjalizzati għall-bini ta' mudelli tal-lingwa bbażati fuq il-manku. Il-mudelli li jeżistu bħalissa nħolqu prinċipalment bl-adattament dirett tal-kodiċi tal-mudell Java (magħruf ukoll bħala kopja/pejst), f’każijiet fejn tippermetti Eclipse Public License (EPL). (Ovvjament, din is-soltu mhix kwistjoni legali għal, ngħidu aħna, proġetti Eclipse innifsu, iżda mhux għal prodotti ta 'sors magħluq.) Minbarra l-haphazardness inerenti tagħha, din it-teknika tintroduċi problemi magħrufa sew: duplikazzjoni tal-kodiċi introdotta minn meta tadatta għal żbalji, eċċ. L-agħar huwa li l-mudelli li jirriżultaw jibqgħu "affarijiet fihom infushom" u ma jieħdux vantaġġ mill-potenzjal għall-unifikazzjoni. Iżda l-iżolament ta 'kunċetti u protokolli komuni għal mudelli ta' lingwa bbażati fuq manku jista 'jwassal għall-ħolqien ta' komponenti li jistgħu jerġgħu jintużaw biex jaħdmu magħhom, simili għal dak li ġara fil-każ tal-EMF.

Mhux li Eclipse ma fehmitx dawn il-kwistjonijiet. Lura fl-2005 Martin Aeschlimann, li tiġbor fil-qosor l-esperjenza tal-iżvilupp tal-prototip CDT, argumentat il-ħtieġa li tinħoloq infrastruttura komuni għall-mudelli tal-lingwa, inklużi mudelli bbażati fuq il-manku. Iżda, kif jiġri ta' spiss, minħabba kompiti ta' prijorità ogħla, l-implimentazzjoni ta' dawn l-ideat qatt ma waslet għaliha. Sadanittant, il-fatturizzazzjoni tal-kodiċi *DT għadha waħda mis-suġġetti sottożviluppati f'Eclipse.

F'ċertu sens, il-proġett Handly huwa ddisinjat biex isolvi bejn wieħed u ieħor l-istess problemi bħall-EMF, iżda għal mudelli bbażati fuq il-manku, u primarjament dawk tal-lingwa (jiġifieri, li jirrappreżentaw elementi tal-istruttura ta 'xi lingwa ta' programmar). L-għanijiet ewlenin stabbiliti meta tfassal Handly huma elenkati hawn taħt:

  • Identifikazzjoni tal-astrazzjonijiet ewlenin tal-qasam tas-suġġett.
  • It-tnaqqis tal-isforz u t-titjib tal-kwalità tal-implimentazzjoni tal-mudelli tal-lingwa bbażati fuq il-manku permezz tal-użu mill-ġdid tal-kodiċi.
  • Tipprovdi API ta 'meta-livell unifikata lill-mudelli li jirriżultaw, li jagħmilha possibbli li jinħolqu komponenti IDE komuni li jaħdmu ma' mudelli bbażati fuq il-manku tal-lingwa.
  • Flessibilità u skalabbiltà.
  • Integrazzjoni ma 'Xtext (f'saff separat).

Biex jiġu enfasizzati kunċetti u protokolli komuni, ġew analizzati implimentazzjonijiet eżistenti ta 'mudelli bbażati fuq il-manku tal-lingwa. L-interfaces ewlenin u l-implimentazzjonijiet bażiċi pprovduti minn Handly huma murija fil-Fig. 8.

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 8. Interfaces komuni u implimentazzjonijiet bażiċi ta 'elementi Handly

L-interface IElement tirrappreżenta l-manku ta 'element u hija komuni għall-elementi tal-mudelli kollha bbażati fuq Handly. L-Element tal-klassi astratta timplimenta l-mekkaniżmu ġeneralizzat tal-manku/korp (Fig. 9).

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 9. IElement u manku ġeneriku/implimentazzjoni tal-ġisem

Barra minn hekk, Handly jipprovdi mekkaniżmu ġeneralizzat biex jinnotifika dwar bidliet fl-elementi tal-mudell (Fig. 10). Kif tistgħu taraw, huwa ġeneralment simili għall-mekkaniżmi ta 'notifika implimentati fil-mudell tar-riżorsi u l-mudell Java, u juża IElementDelta biex jipprovdi rappreżentazzjoni unifikata tal-informazzjoni dwar il-bidla tal-element.

Eclipse bħala pjattaforma teknoloġika għal 1C:Enterprise Development Tools
Ross. 10. Interfaċċji ġenerali u implimentazzjonijiet bażiċi tal-mekkaniżmu ta' notifika Handly

Il-parti Handly diskussa hawn fuq (Fig. 9 u 10) tista 'tintuża biex tirrappreżenta kważi kull mudelli bbażati fuq manku. Għall-ħolqien lingwistiku mudelli, il-proġett joffri funzjonalità addizzjonali - b'mod partikolari, interfaces komuni u implimentazzjonijiet bażiċi għal elementi tal-istruttura tat-test sors, l-hekk imsejħa elementi tas-sors (Fig. 8). L-interface ISourceFile tirrappreżenta fajl tas-sors, u ISourceConstruct jirrappreżenta element fil-fajl tas-sors. Il-klassijiet astratti SourceFile u SourceConstruct jimplimentaw mekkaniżmi ġeneralizzati biex jappoġġjaw il-ħidma mal-fajls tas-sors u l-elementi tagħhom, pereżempju, jaħdmu ma 'buffers tat-test, jorbtu mal-koordinati ta' element fit-test sors, jirrikonċiljaw mudelli mal-kontenut attwali ta 'buffer ta' kopja tax-xogħol. , eċċ. L-implimentazzjoni ta 'dawn il-mekkaniżmi ġeneralment hija pjuttost sfida, u Handly jista' jnaqqas b'mod sinifikanti l-isforz tal-iżvilupp ta 'mudelli tal-lingwa bbażati fuq il-manku billi jipprovdi implimentazzjonijiet bażiċi ta' kwalità għolja.

Minbarra l-mekkaniżmi ewlenin elenkati hawn fuq, Handly jipprovdi infrastruttura għal test buffers u snapshots, appoġġ għall-integrazzjoni mal-edituri tal-kodiċi tas-sors (inkluża integrazzjoni out-of-the-box mal-editur Xtext), kif ukoll xi komponenti komuni tal-UI li taħdem ma 'edituri tal-kodiċi tas-sors mudelli Handly bħal qafas outline. Biex juri l-kapaċitajiet tiegħu, il-proġett jipprovdi diversi eżempji, inkluża implimentazzjoni tal-mudell Java f'Handly. (Imqabbel mal-implimentazzjoni sħiħa tal-mudell Java f'JDT, dan il-mudell huwa intenzjonalment kemmxejn simplifikat għal aktar ċarezza.)

Kif innutat qabel, fokus ewlieni matul id-disinn inizjali ta 'Handly u l-iżvilupp sussegwenti kien u għadu fuq l-iskalabbiltà u l-flessibilità.

Fil-prinċipju, mudelli bbażati fuq il-manku jiskalaw pjuttost tajjeb "minn id-disinn". Pereżempju, l-idjoma tal-manku/korp jippermettilek tillimita l-ammont ta 'memorja kkunsmata minn mudell. Iżda hemm ukoll sfumaturi. Għalhekk, meta ttestja Handly għall-iskalabbiltà, ġiet skoperta problema fl-implimentazzjoni tal-mekkaniżmu ta 'notifika - meta nbidlu numru kbir ta' elementi, il-kostruzzjoni tad-deltas ħa wisq ħin. Irriżulta li l-istess problema kienet preżenti fil-mudell JDT Java, li minnu l-kodiċi korrispondenti darba ġie adattat. Irranġajna l-bug f'Handly u ħejjejna garża simili għal JDT, li waslet b'gratitudni. Dan huwa eżempju wieħed biss fejn l-introduzzjoni ta' Handly fl-implimentazzjonijiet tal-mudell eżistenti tista' tkun potenzjalment utli, għaliex f'dan il-każ tali bug jista' jiġi ffissat f'post wieħed biss.

Biex tagħmel l-implimentazzjoni ta' Handly f'implimentazzjonijiet ta' mudelli eżistenti teknikament fattibbli, il-librerija għandu jkollha flessibilità sinifikanti. Il-problema ewlenija hija li tinżamm il-kompatibilità b'lura madwar il-mudell API. Din il-problema ġiet solvuta fi Handly 0.5 billi tissepara b'mod ċar l-API speċifika għall-mudell, definita u kkontrollata bis-sħiħ mill-iżviluppatur, mill-API tal-meta-livell unifikata pprovduta mil-librerija. Dan mhux biss jagħmilha teknikament possibbli li jiġi implimentat Handly f'implimentazzjonijiet eżistenti, iżda wkoll jagħti lill-iżviluppatur tal-mudell il-ġdid libertà sinifikanti meta jfassal l-API.

Il-flessibbiltà għandha aspetti oħra wkoll. Pereżempju, Handly ma jimponi kważi l-ebda restrizzjoni fuq l-istruttura tal-mudell u jista 'jintuża biex jimmudella kemm lingwi għal skopijiet ġenerali kif ukoll lingwi speċifiċi għad-dominju. Meta tibni l-istruttura tal-fajl tas-sors, Handly ma jippreskrivi ebda forma partikolari ta 'rappreżentazzjoni AST u, fil-prinċipju, lanqas teħtieġ il-preżenza ta' AST innifsu, u b'hekk tiżgura kompatibilità ma 'kważi kull mekkaniżmu ta' parsing. Fl-aħħarnett, Handly jappoġġja integrazzjoni sħiħa mal-ispazju tax-xogħol Eclipse, iżda jista 'wkoll jaħdem direttament ma' sistemi ta 'fajls grazzi għall-integrazzjoni tiegħu ma' Sistema ta' Fajl Eclipse (EFS).

Verżjoni kurrenti Handly 0.6 ħareġ f’Diċembru 2016. Minkejja l-fatt li l-proġett bħalissa jinsab fi stat ta 'inkubazzjoni u l-API għadu ma ġiex iffissat finalment, Handly diġà jintuża f'żewġ prodotti kummerċjali kbar li ħadu r-riskju li jaġixxu bħala "early adopters", u, irrid ngħid, għad ma jiddispjaċinax.

Kif innutat hawn fuq, wieħed minn dawn il-prodotti huwa 1C:Enterprise Development Tools, fejn Handly jintuża mill-bidu nett biex jimmudella l-elementi tal-istruttura ta’ livell għoli ta’ tali 1C:Enterprise languages ​​​​bħala l-lingwa ta’ programmar u l-lingwa tal-mistoqsijiet inkorporati. . Prodott ieħor huwa inqas magħruf mill-pubbliku ġenerali. Dan Codasip Studio, ambjent ta' disinn integrat għal proċessur ta' sett ta' struzzjonijiet speċifiċi għall-applikazzjoni (ASIP), użat kemm fi ħdan il-kumpanija Ċeka Codasip innifisha kif ukoll mill-klijenti tagħha, inklużi AMD, AVG, Mobileye, Disinni Sigma. Codasip ilu juża Handly fil-produzzjoni mill-2015, u beda bil-verżjoni Handly 0.2. L-aħħar rilaxx ta 'Codasip Studio juża l-verżjoni 0.5, rilaxxata f'Ġunju 2016. Ondřej Ilčík, li jmexxi l-iżvilupp tal-IDE f'Codasip, huwa f'kuntatt mal-proġett, u jipprovdi feedback vitali f'isem il-"parti terza li jadotta". Huwa kien saħansitra kapaċi jsib ftit ħin liberu biex jipparteċipa direttament fl-iżvilupp tal-proġett, billi jimplimenta saff UI (~ 4000 linja ta 'kodiċi) għal wieħed mill-eżempji Handly, mudell Java. Informazzjoni diretta aktar dettaljata dwar l-użu ta' Handly minn dawk li jadottaw tista' tinstab fuq il-paġna Suċċess Stejjer proġett.

Nittamaw li wara r-rilaxx tal-verżjoni 1.0 b'garanzija ta 'stabbiltà tal-API u l-proġett li jħalli l-istat ta' inkubazzjoni, Handly ikollu adottaturi ġodda. Sadanittant, il-proġett ikompli jittestja u jtejjeb aktar l-API, jirrilaxxa żewġ rilaxxi "maġġuri" fis-sena - f'Ġunju (l-istess data tar-rilaxx simultanju ta 'Eclipse) u f'Diċembru, li jipprovdi skeda prevedibbli li dawk li jadottaw jistgħu jistrieħu fuqha. Nistgħu nżidu wkoll li r-"rata ta 'bug" tal-proġett tibqa' f'livell baxx b'mod konsistenti u Handly ilu jaħdem b'mod affidabbli fil-prodotti ta 'dawk li jadottaw l-ewwel sa mill-ewwel verżjonijiet. Biex tesplora aktar Eclipse Handly, tista 'tuża Tutorial dwar il-Bidu и Ħarsa Ġenerali Arkitettonika.

Sors: www.habr.com

Żid kumment