Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam

Tej zaum, dab noj hnub tau ntev txij li qhov xav tau tsis muaj kev qhia tshwj xeeb. Ntau tus neeg paub dab noj hnub ua tsaug rau Eclipse Java cov cuab yeej txhim kho (JDT). Nws yog qhov nrov qhib Java IDE uas cov neeg tsim khoom feem ntau koom nrog lo lus "Eclipse". Txawm li cas los xij, Dab Ntxwg Nyoog yog ob qho tib si lub platform txuas ntxiv rau kev sib koom ua ke cov cuab yeej txhim kho (Eclipse Platform), thiab ntau tus IDEs tsim los ntawm nws lub hauv paus, suav nrog JDT. Dab Ntxwg Nyoog yog ob qho tib si Dab Ntxwg Nyoog Txoj Haujlwm, qhov phiaj xwm saum toj kawg nkaus uas tswj hwm kev txhim kho ntawm Eclipse Platform thiab JDT, thiab Dab Ntxwg Nyoog SDK, qhov kev xa tawm ntawm qhov kev txhim kho ntawd. Thaum kawg, dab noj hnub yog qhov qhib-qhov Foundation nrog lub zej zog loj ntawm cov haujlwm, tsis yog txhua yam uas tau sau rau hauv Java lossis cuam tshuam nrog cov cuab yeej tsim kho (piv txwv li, tej yaam num. Dab noj hnub IoT ΠΈ Dab Ntxwg Nyoog Science). Eclipse ntiaj teb no muaj ntau haiv neeg.

Nyob rau hauv tsab xov xwm no, uas yog cov ntsiab lus nyob rau hauv cov xwm, peb yuav sim mus saib nyob rau hauv ib co ntawm cov hauv paus ntsiab lus ntawm dab noj hnub architecture raws li ib tug platform rau tsim integrated txoj kev loj hlob cov cuab yeej thiab muab ib tug thawj lub tswv yim ntawm dab noj hnub Cheebtsam uas tsim lub hauv paus ntawm lub tshuab. platform rau "Tshiab Configurator" 1C: Enterprise. 1C: Cov cuab yeej txhim kho kev lag luam. Tau kawg, qhov kev tshuaj xyuas zoo li no yuav ua rau muaj kev cuam tshuam loj heev thiab tsis txwv, suav nrog vim tias peb tab tom tsom tsis yog rau Eclipse developers nkaus xwb raws li cov neeg tuaj saib. Txawm li cas los xij, peb cia siab tias txawm tias Eclipse developers muaj kev paub dhau los yuav tuaj yeem nrhiav cov ntaub ntawv nthuav dav hauv tsab xov xwm. Piv txwv li, peb yuav tham txog ib qho ntawm "Secrets of Eclipse", ib qhov project tshiab thiab tsis tshua muaj neeg paub. Dab Ntxwg Nyoog Tes, uas tau tsim thiab txhawb nqa los ntawm 1C.
Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam

Introduction to Eclipse Architecture

Cia peb xub saib qee qhov dav dav ntawm Eclipse architecture siv qhov piv txwv Eclipse Java cov cuab yeej tsim kho (JDT). Qhov kev xaiv ntawm JDT ua piv txwv tsis yog yuam kev. Qhov no yog thawj qhov kev txhim kho kev sib koom ua ke los tshwm hauv dab noj hnub. Lwm yam * DT Eclipse tej yaam num, xws li dab noj hnub C / C ++ Development Tooling (CDT), tau tsim tom qab thiab qiv ob qho tib si hauv paus ntsiab lus ntawm architectural thiab tus kheej qhov chaws cov khoom tawg ntawm JDT. Cov hauv paus ntsiab lus ntawm kev tsim vaj tsev nyob hauv JDT muaj feem cuam tshuam rau niaj hnub no rau yuav luag txhua IDE ua rau saum Eclipse Platform, suav nrog 1C: Cov Cuab Yeej Txhim Kho Kev Lag Luam.

Ua ntej tshaj plaws, nws yuav tsum tau muab sau tseg tias Dab Ntxwg Nyoog yog tus cwj pwm los ntawm cov txheej txheem tsim vaj tsev zoo nkauj, nrog kev sib cais ntawm cov lus ywj pheej ntawm kev ua haujlwm los ntawm kev ua haujlwm tsim los txhawb cov lus programming tshwj xeeb, thiab kev sib cais ntawm UI-yooj yim "core" cov ntsiab lus los ntawm cov khoom cuam tshuam. nrog txhawb cov neeg siv interface.

Yog li, Dab Ntxwg Nyoog Platform txhais ib qho kev sib koom ua ke, kev ywj pheej ntawm kev hais lus, thiab cov cuab yeej tsim kho Java ntxiv rau Java IDE tag nrho rau dab noj hnub. Ob lub Eclipse Platform thiab JDT muaj ob peb yam khoom, txhua tus muaj nyob rau ntawm UI-ywj siab "core" lossis UI txheej (Daim duab 1).

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 1. Dab Ntxwg Nyoog Platform thiab JDT

Cia peb teev cov ntsiab lus tseem ceeb ntawm Eclipse Platform:

  • Sijhawm Sawv - Txhais lub plugin infrastructure. Dab noj hnub yog tus yam ntxwv los ntawm ib qho qauv tsim qauv. Qhov tseem ceeb, dab noj hnub yog ib phau ntawm "cov ntsiab lus txuas ntxiv" thiab "kev txuas ntxiv".
  • Ntshoo - Tswj ib lossis ntau qhov haujlwm. Ib qhov project muaj cov folders thiab cov ntaub ntawv uas yog mapped ncaj qha rau cov ntaub ntawv system.
  • Standard Widget Toolkit (SWT) - Muab cov ntsiab lus yooj yim rau cov neeg siv cuam tshuam nrog kev ua haujlwm.
  • JFace - Muab ntau lub UI lub moj khaum ua rau saum SWT.
  • workbench - Txhais lub Eclipse UI paradigm: cov neeg kho, kev pom, kev xav.

Nws yuav tsum tau hais tias Eclipse Platform tseem muab ntau lwm yam tseem ceeb rau kev tsim cov cuab yeej tsim kho, suav nrog Debug, Sib Piv, Tshawb Nrhiav, thiab Pab Pawg. Cov lus tshwj xeeb yuav tsum tau ua los ntawm JFace Text - lub hauv paus rau kev tsim "ntse editors" ntawm qhov chaws. Hmoov tsis zoo, txawm tias kev tshuaj xyuas cursory ntawm cov khoom no, nrog rau cov txheej txheem UI txheej, tsis tuaj yeem ua tau nyob rau hauv qhov kev nthuav dav ntawm tsab xov xwm no, yog li nyob rau hauv seem ntawm tshooj no peb yuav txwv peb tus kheej mus rau kev saib xyuas ntawm lub ntsiab "core" Cheebtsam ntawm Eclipse Platform thiab JDT.

Core Runtime

Lub Eclipse plugin infrastructure yog raws li OSGi thiab muab los ntawm qhov project Dab noj hnub Equinox. Txhua Eclipse plugin yog OSGi pob. OSGi specification txhais, tshwj xeeb tshaj yog, mechanisms rau versioning thiab dependency daws teeb meem. Ntxiv rau cov txheej txheem txheej txheem no, Equinox qhia txog lub tswv yim nthuav cov ntsiab lus. Txhua lub plugin tuaj yeem txhais nws tus kheej cov ntsiab lus txuas ntxiv, thiab tseem qhia txog kev ua haujlwm ntxiv ("extensions") rau lub kaw lus siv cov ntsiab lus txuas ntxiv tau txhais los ntawm tib yam lossis lwm yam plugins. Ib qho kev piav qhia ntxaws ntxaws ntawm OSGi thiab Equinox cov txheej txheem yog dhau ntawm cov kab lus no. Cia peb tsuas yog nco ntsoov tias modularization hauv dab noj hnub yog tag nrho (txhua qhov subsystem, suav nrog Runtime, muaj ib lossis ntau lub plugins), thiab yuav luag txhua yam hauv dab noj hnub yog qhov txuas ntxiv. Ntxiv mus, cov ntsiab cai no tau muab tso rau hauv Eclipse architecture ntev ua ntej kev taw qhia ntawm OSGi (thaum lub sijhawm lawv siv lawv tus kheej thev naus laus zis, zoo ib yam li OSGi).

Core Workspace

Yuav luag txhua qhov kev txhim kho kev sib koom ua ke tsim nyob rau sab saum toj ntawm Eclipse Platform ua haujlwm nrog Eclipse workspace. Nws yog qhov chaw ua haujlwm uas feem ntau muaj cov cai ntawm daim ntawv thov tsim hauv IDE. Workspace maps ncaj qha rau cov ntaub ntawv kaw lus thiab muaj cov haujlwm uas muaj cov folders thiab cov ntaub ntawv. Cov haujlwm no, folders, thiab cov ntaub ntawv raug hu ua peev txheej chaw ua haujlwm. Kev siv qhov chaw ua haujlwm hauv dab noj hnub ua haujlwm ua ib qho kev sib raug zoo nrog cov ntaub ntawv kaw lus, uas ua rau nws muaj peev xwm ua kom nrawm nrawm ntawm cov peev txheej ntoo. Tsis tas li ntawd, chaw ua haujlwm muab ntau yam kev pabcuam ntxiv, suav nrog ceeb toom mechanism rau kev hloov pauv ΠΈ Incremental builder infrastructure.

Core Resources tivthaiv (org.eclipse.core.resources plugin) yog lub luag haujlwm los txhawb qhov chaw ua haujlwm thiab nws cov peev txheej. Tshwj xeeb, cov khoom siv no muab cov programmatic nkag mus rau qhov chaw ua haujlwm hauv daim ntawv cov qauv tsim. Txhawm rau ua haujlwm zoo nrog cov qauv no, cov neeg siv khoom xav tau ib txoj hauv kev yooj yim los nthuav qhia qhov txuas mus rau cov peev txheej. Nyob rau hauv rooj plaub no, nws yuav tsim nyog los nkaum cov khoom uas ncaj qha khaws lub xeev ntawm cov peev txheej hauv cov qauv los ntawm cov neeg siv khoom. Txwv tsis pub, piv txwv li, rho tawm cov ntaub ntawv, tus neeg siv khoom tuaj yeem tuav cov khoom uas tsis nyob hauv tus qauv, nrog rau cov teeb meem tom qab. Dab noj hnub daws qhov teeb meem no siv qee yam hu ua lis peev txheej. Kov ua raws li tus yuam sij (nws tsuas yog paub txog txoj hauv kev rau cov peev txheej hauv qhov chaw ua haujlwm) thiab tswj kev nkag mus rau cov khoom siv sab hauv, uas ncaj qha khaws cov ntaub ntawv hais txog lub xeev cov peev txheej. Qhov kev tsim no yog kev hloov pauv ntawm tus qauv Kov / Lub cev.

Rice. Daim duab 2 piav qhia txog qhov Handle/Body idiom raws li siv rau cov qauv kev pab. IResource interface sawv cev rau tus tuav ntawm cov peev txheej thiab yog API, tsis zoo li cov chav kawm Resource, uas siv qhov kev sib tshuam no, thiab chav kawm ResourceInfo, uas sawv cev rau lub cev, uas tsis yog APIs. Peb hais ntxiv tias tuav tsuas yog paub txog txoj hauv kev rau cov peev txheej txheeb ze rau qhov chaw ua haujlwm hauv paus thiab tsis muaj qhov txuas rau cov ntaub ntawv peev txheej. Cov ntaub ntawv xov xwm cov ntaub ntawv tsim ib lub npe hu ua "element tree". Cov ntaub ntawv no yog kiag li materialized nyob rau hauv lub cim xeeb. Txhawm rau nrhiav cov ntaub ntawv cov ntaub ntawv piv txwv cuam tshuam rau tus kov, lub caij ntoo yog hla raws li txoj hauv kev khaws cia hauv qhov kov.

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 2. IResource thiab ResourceInfo

Raws li peb yuav pom tom qab, tus qauv tsim qauv ntawm cov peev txheej (peb yuav hu nws ua raws) yog siv hauv dab noj hnub rau lwm cov qauv thiab. Txog tam sim no, cia peb sau qee qhov tshwj xeeb ntawm qhov tsim no:

  • Kov yog qhov khoom muaj nqis. Cov khoom muaj nqis yog cov khoom tsis hloov pauv uas nws qhov sib npaug tsis yog raws li tus kheej. Cov khoom zoo li no tuaj yeem siv nyab xeeb los ua tus yuam sij hauv cov thawv ntim khoom. Ntau qhov xwm txheej ntawm tus kov tuaj yeem siv tib yam khoom siv. Txhawm rau sib piv lawv, koj yuav tsum siv qhov sib npaug (Object) txoj kev.
  • Kov txhais tus cwj pwm ntawm cov peev txheej, tab sis tsis muaj cov ntaub ntawv hais txog lub xeev ntawm cov peev txheej (tsuas yog cov ntaub ntawv nws khaws cia yog "tus yuam sij", txoj hauv kev rau cov peev txheej).
  • Kov tuaj yeem xa mus rau cov peev txheej uas tsis muaj nyob (txawm yog ib qho peev txheej uas tseem tsis tau tsim, lossis cov peev txheej uas twb tau muab tshem tawm lawm). Qhov muaj nyob ntawm cov peev txheej tuaj yeem tshawb xyuas siv IResource.exists() txoj kev.
  • Qee qhov kev ua haujlwm tuaj yeem ua tiav raws li cov ntaub ntawv khaws cia hauv tus kheej nkaus xwb (hu ua haujlwm nkaus xwb). Piv txwv li IRResource.getParent(), getFullPath(), thiab lwm yam. Cov peev txheej tsis tas yuav muaj nyob rau qhov haujlwm no kom ua tiav. Kev ua haujlwm uas xav tau cov peev txheej kom muaj nyob kom ua tiav tau pov CoreException yog tias tsis muaj peev txheej.

Dab noj hnub muab cov txheej txheem ua haujlwm tau zoo rau kev ceeb toom chaw ua haujlwm hloov chaw (Daim duab 3). Cov peev txheej tuaj yeem hloov pauv raws li qhov tshwm sim ntawm kev ua haujlwm hauv Eclipse IDE nws tus kheej lossis los ntawm kev sib txuas nrog cov ntaub ntawv kaw lus. Hauv ob qhov xwm txheej, cov neeg siv khoom uas sau npe rau cov ntawv ceeb toom tau muab cov ncauj lus kom ntxaws txog cov kev hloov pauv hauv daim ntawv ntawm "peev txheej deltas". Ib lub delta piav qhia txog kev hloov pauv ntawm ob lub xeev ntawm qhov chaw ua haujlwm (sub-) tsob ntoo thiab nws tus kheej yog tsob ntoo, txhua qhov ntawm cov lus piav qhia txog kev hloov pauv rau cov peev txheej thiab muaj cov npe ntawm deltas nyob rau qib tom ntej uas piav qhia txog kev hloov pauv rau cov peev txheej me me.

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 3. IResourceChangeEvent thiab IResourceDelta

Cov txheej txheem ceeb toom raws li cov peev txheej deltas muaj cov yam ntxwv hauv qab no:

  • Ib qho kev hloov pauv thiab ntau qhov kev hloov pauv tau piav qhia siv tib lub qauv, txij li lub delta yog tsim los ntawm lub hauv paus ntsiab lus ntawm recursive muaj pes tsawg leeg. Cov neeg siv khoom tuaj yeem ua cov ntawv ceeb toom hloov pauv siv cov qhovntsej thiaj tsis mob los ntawm tsob ntoo ntawm deltas.
  • Lub delta muaj cov ntaub ntawv tiav txog kev hloov pauv rau cov peev txheej, suav nrog nws txoj kev txav mus los thiab / lossis kev hloov pauv hauv "cov cim" cuam tshuam nrog nws (piv txwv li, kev sib sau ua yuam kev yog sawv cev ua cov cim).
  • Txij li thaum cov ntaub ntawv pov thawj tau tsim los ntawm tus kov, delta tuaj yeem siv ib qho chaw nyob deb.

Raws li peb yuav pom sai sai no, cov ntsiab lus tseem ceeb ntawm kev tsim cov peev txheej qauv hloov kev ceeb toom mechanism kuj tseem cuam tshuam rau lwm cov qauv ua qauv.

JDT Core

Eclipse workspace resource model yog ib hom lus tseem ceeb-agnostic qauv. JDT Core tivthaiv (plugin org.eclipse.jdt.core) muab ib qho API rau kev tshawb nrhiav thiab tshuaj xyuas qhov chaw ua haujlwm los ntawm qhov kev xav ntawm Java, lub npe hu ua "Java qauv" (Java qauv). Qhov API no tau txhais nyob rau hauv cov nqe lus ntawm Java ntsiab, as opposed to the underlying resource model API, uas yog txhais nyob rau hauv cov nqe lus ntawm folders thiab cov ntaub ntawv. Lub ntsiab interfaces ntawm Java element tsob ntoo yog qhia nyob rau hauv daim duab. 4.

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 4. Java Model Elements

Tus qauv Java siv tib lub cev / lub cev idiom raws li cov qauv peev txheej (Daim duab 5). IJavaElement yog tus kov, thiab JavaElementInfo ua lub luag haujlwm ntawm lub cev. IJavaElement interface txhais cov txheej txheem sib xws rau txhua yam Java. Qee qhov ntawm nws txoj kev yog kov-tsuas yog: getElementName(), getParent(), thiab lwm yam. Cov khoom JavaElementInfo khaws lub xeev ntawm cov khoom sib xws: nws cov qauv thiab cov yam ntxwv.

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 5. IJavaElement thiab JavaElementInfo

Tus qauv Java muaj qee qhov sib txawv hauv kev ua raws li qhov yooj yim kov / lub cev tsim piv rau cov qauv peev txheej. Raws li tau sau tseg saum toj no, hauv cov qauv peev txheej, cov khoom ntoo, uas nws cov nodes yog cov khoom siv ntaub ntawv, yog tag nrho hauv kev nco. Tab sis tus qauv Java tuaj yeem muaj cov ntsiab lus ntau dua li cov khoom siv ntoo, vim nws kuj sawv cev rau cov qauv sab hauv ntawm .java thiab .class cov ntaub ntawv: hom, teb, thiab cov txheej txheem.

Txhawm rau kom tsis txhob ua tiav tag nrho cov ntoo ntawm cov ntsiab lus hauv kev nco, Java qauv siv siv qhov loj me LRU cache ntawm cov ntaub ntawv keeb kwm, qhov tseem ceeb yog tuav IJavaElement. element info khoom yog tsim los ntawm kev thov raws li cov khoom ntoo yog navigated. Hauv qhov no, cov khoom siv tsawg tshaj plaws raug tshem tawm ntawm lub cache, thiab tus qauv siv lub cim xeeb tseem txwv rau qhov loj ntawm cache. Qhov no yog lwm qhov kom zoo dua ntawm kev tsim qauv tsim, uas zais tag nrho cov ntsiab lus ntawm kev siv los ntawm tus neeg siv khoom code.

Cov txheej txheem rau kev ceeb toom kev hloov pauv rau Java cov ntsiab lus feem ntau zoo ib yam li cov txheej txheem rau kev taug qab cov kev hloov pauv rau cov chaw ua haujlwm tau tham saum toj no. Ib tus neeg siv xav saib xyuas cov kev hloov pauv hauv Java qauv sau npe rau cov ntawv ceeb toom, uas yog sawv cev raws li ElementChangedEvent khoom uas muaj IJavaElementDelta (Daim duab 6).

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 6. ElementChangedEvent thiab IJavaElementDelta

Tus qauv Java tsis muaj cov ntaub ntawv hais txog lub cev lossis lub npe daws teeb meem, yog li txhawm rau txheeb xyuas cov lej sau hauv Java, JDT Core muab tus qauv ntxiv (tsis yog-kho-raws li) qauv: abstract syntax tsob ntoo (Abstract syntax tree, AST). AST sawv cev rau qhov tshwm sim ntawm kev txheeb xyuas cov ntawv nyeem. AST nodes sib raug rau cov ntsiab lus ntawm cov qauv ntawm lub hauv paus module (daim ntawv tshaj tawm, cov neeg ua haujlwm, cov lus qhia, thiab lwm yam) thiab muaj cov ntaub ntawv hais txog kev sib koom ua ke ntawm cov ntsiab lus sib xws hauv cov ntawv nyeem, nrog rau (raws li kev xaiv) cov ntaub ntawv hais txog lub npe daws teeb meem hauv daim ntawv txuas mus rau lub npe hu ua khi. Bindings yog cov khoom uas sawv cev rau lub npe, xws li hom, txoj kev, thiab kev hloov pauv, paub rau tus neeg sau. Tsis zoo li AST nodes, uas tsim ib tsob ntoo, bindings txhawb nqa cross-referencing thiab feem ntau tsim ib daim duab. Chav kawm paub daws teeb ASTNode yog cov chav hauv paus rau txhua qhov AST nodes. ASTNode subclasses sib raug rau cov syntactic tsim ntawm Java lus.

Vim hais tias cov ntoo syntax tuaj yeem haus ntau lub cim xeeb, JDT caches tsuas yog ib qho AST rau tus kws kho mob nquag. Tsis zoo li Java qauv, AST feem ntau pom tias yog "nruab nrab", "ntev" qauv, cov ntsiab lus ntawm cov neeg siv khoom yuav tsum tsis txhob tuav cov ntaub ntawv tawm sab nraud ntawm cov ntsiab lus ntawm kev ua haujlwm uas ua rau tsim AST.

Cov qauv peb teev (Java qauv, AST, bindings) ua ke tsim lub hauv paus rau kev tsim "cov cuab yeej kev txhim kho ntse" hauv JDT, suav nrog cov neeg tsim kho Java muaj zog nrog ntau "tus neeg pab", ntau yam kev ua rau kev ua cov cai (nrog rau kev teeb tsa cov npe ntawm cov khoom lag luam. npe thiab formatting raws li tus kheej style), nrhiav thiab refactoring cov cuab yeej. Hauv qhov no, tus qauv Java ua lub luag haujlwm tshwj xeeb, vim nws yog nws uas yog siv los ua lub hauv paus rau qhov pom kev sawv cev ntawm cov qauv ntawm daim ntawv thov raug tsim (piv txwv li, hauv Package Explorer, Outline, Nrhiav, Hu rau Hierarchy, thiab Hom Hierarchy).

Eclipse Cheebtsam siv nyob rau hauv 1C: Enterprise Developments Tools

Hauv daim duab. Daim duab 7 qhia txog dab noj hnub cov khoom uas tsim lub hauv paus ntawm lub tshuab thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam.

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 7. Dab Ntxwg Nyoog ua lub platform rau 1C: Cov cuab yeej txhim kho kev lag luam

Dab noj hnub Platform muab kev yooj yim infrastructure. Peb tau saib qee qhov ntawm cov txheej txheem no hauv ntu dhau los.

Eclipse Modeling Framework (EMF) muab ib qho kev qhia dav dav ntawm cov qauv tsim cov ntaub ntawv. EMF yog kev koom ua ke nrog Dab Ntxwg Nyoog Platform, tab sis kuj tuaj yeem siv sib cais hauv cov ntawv thov Java niaj hnub. Feem ntau, dab noj hnub cov neeg tsim tawm tshiab tau paub zoo nrog EMF, txawm hais tias lawv tseem tsis tau nkag siab txog qhov tsis txaus ntseeg ntawm Eclipse Platform. Ib qho ntawm cov laj thawj rau qhov muaj txiaj ntsig zoo yog qhov tsim nyog thoob ntiaj teb, uas suav nrog, ntawm lwm yam, kev sib koom ua ke meta-theem API, uas tso cai rau koj ua haujlwm nrog txhua tus qauv EMF hauv txoj hauv kev. Cov kev siv yooj yim rau cov qauv khoom muab los ntawm EMF thiab lub subsystem rau tsim cov qauv code raws li cov qauv meta ua rau muaj kev loj hlob sai thiab txo cov kev ua yuam kev. EMF tseem muaj cov txheej txheem rau serializing qauv, taug qab cov kev hloov pauv rau tus qauv, thiab ntau ntxiv.

Zoo li txhua yam cuab yeej siv dav dav, EMF yog qhov tsim nyog rau kev daws teeb meem ntau yam ntawm cov qauv, tab sis qee cov chav kawm ntawm cov qauv (piv txwv li, cov qauv ua qauv sib tham saum toj no) yuav xav tau cov cuab yeej tsim qauv tshwj xeeb. Tham txog EMF yog ib txoj haujlwm ua tsaug, tshwj xeeb tshaj yog nyob rau hauv qhov txwv txwv ntawm ib tsab xov xwm, vim qhov no yog cov ntsiab lus ntawm phau ntawv cais, thiab ib qho tuab heev. Cia peb tsuas yog nco ntsoov tias qhov kev ua tau zoo ntawm cov txheej txheem dav dav hauv qab EMF tau tso cai yug me nyuam ntawm tag nrho cov haujlwm uas tau mob siab rau kev ua qauv, uas suav nrog hauv qhov project saum toj kawg nkaus. Eclipse Modeling nrog rau EMF nws tus kheej. Ib qhov project no yog dab noj hnub Xtext.

Eclipse Xtext muab ib qho "text modeling" infrastructure. Xtext siv QAIB rau parsing lub hauv paus ntawv nyeem thiab EMF rau sawv cev rau qhov tshwm sim ASG (abstract semantic graph, uas yog ib qho tseem ceeb ua ke ntawm AST thiab bindings), kuj hu ua "semantic qauv". Cov qauv sau ntawv ntawm cov lus qauv los ntawm Xtext tau piav qhia hauv Xtext tus kheej cov lus. Qhov no tso cai rau koj tsis tsuas yog tsim cov lus piav qhia kab lus rau ANTLR, tab sis kuj kom tau txais AST serialization mechanism (piv txwv li Xtext muab ob qho tib si parser thiab unparser), cov ntsiab lus hint, thiab ntau lwm yam lus. Ntawm qhov tod tes, cov qauv sau ntawv siv hauv Xtext yog qhov hloov pauv tsawg dua, hais tias, cov qauv sau ntawv siv hauv ANTLR. Yog li ntawd, qee zaum nws yog qhov yuav tsum tau "khoov" cov lus siv rau Xtext, uas feem ntau tsis muaj teeb meem yog tias peb tab tom tham txog ib hom lus uas tau tsim los ntawm kos, tab sis tej zaum yuav tsis raug rau cov lus nrog cov syntax uas twb tau tsim lawm. Txawm li cas los xij, Xtext tam sim no yog qhov paub tab tshaj plaws, muaj txiaj ntsig zoo, thiab ntau yam cuab yeej hauv dab noj hnub rau kev tsim cov lus programming thiab cov cuab yeej tsim kho rau lawv. Tshwj xeeb, nws yog ib qho cuab yeej zoo tshaj plaws rau kev tsim qauv sai hom lus tshwj xeeb (domain-specific language, DSL). Ntxiv rau cov lus hais saum toj no "cov ntsiab lus tseem ceeb" raws li ANTLR thiab EMF, Xtext muab ntau yam tseem ceeb hauv qib siab, suav nrog cov txheej txheem kev ntsuas, kev tsim kho ntxiv, "ntse editor", thiab ntau, ntau ntxiv, tab sis tawm ntawm tes- raws li hom lus. Zoo li EMF, Xtext yog ib qho kev tsim nyog ntawm phau ntawv cais, thiab peb tsis tuaj yeem tham luv luv txog tag nrho nws cov peev xwm tam sim no.

1C: Cov cuab yeej txhim kho kev lag luam nquag siv ob qho tib si EMF nws tus kheej thiab ntau lwm yam dab noj hnub qauv ua haujlwm. Tshwj xeeb, Xtext yog ib lub hauv paus ntawm kev txhim kho cov cuab yeej rau xws li 1C: Cov Lus Lag Luam Ua Lag Luam raws li cov lus tsim thiab cov lus nug. Lwm lub hauv paus rau cov cuab yeej tsim kho no yog Eclipse Handly project, uas peb yuav tham txog ntau yam ntxiv (ntawm cov khoom siv dab noj hnub, nws tseem yog qhov paub tsawg tshaj plaws).

Dab Ntxwg Nyoog Tes, ib lub phiaj xwm me me ntawm Eclipse Technology qhov project saum toj kawg nkaus, tau tshwm sim los ntawm kev pib ua lej pab rau Eclipse Foundation ua los ntawm 1C hauv 2014. Txij thaum ntawd los, 1C tau txuas ntxiv txhawb kev txhim kho ntawm qhov project: Cov neeg ua haujlwm tuav tes yog cov neeg ua haujlwm ntawm lub tuam txhab. Qhov project me me, tab sis nws nyob hauv ib qho tshwj xeeb niche hauv dab noj hnub: nws lub hom phiaj tseem ceeb yog los txhawb kev txhim kho ntawm cov qauv ua qauv.

Cov hauv paus ntsiab lus ntawm cov qauv tsim qauv, xws li tus kov / lub cev lus, tau tham saum toj no siv cov qauv siv thiab cov qauv Java ua piv txwv. Nws kuj tau sau tseg tias ob qho tib si tus qauv peev txheej thiab tus qauv Java yog lub hauv paus tseem ceeb rau Eclipse Java development tools (JDT). Thiab txij li yuav luag tag nrho * DT Eclipse tej yaam num muaj ib tug architecture zoo ib yam li JDT, nws yuav tsis yog ib tug zoo exaggeration hais tias kov-raws li qauv underlie ntau, yog hais tias tsis yog tag nrho cov IDEs ua nyob rau sab saum toj ntawm Eclipse Platform. Piv txwv li, Eclipse C / C ++ Development Tooling (CDT) muaj tus qauv siv C / C ++ uas ua haujlwm tib lub luag haujlwm hauv CDT architecture li Java qauv ua hauv JDT.

Ua ntej Handly, Dab Ntxwg Nyoog tsis tau muab cov tsev qiv ntawv tshwj xeeb rau kev tsim cov qauv lus siv. Cov qauv uas muaj nyob tam sim no tau tsim los ntawm kev ncaj qha rau Java qauv code (aka theej / paste), nyob rau hauv rooj plaub uas nws tso cai Eclipse Public License (EPL). (Qhov tseeb, qhov no feem ntau tsis yog qhov teeb meem kev cai lij choj rau, hais tias, dab noj hnub cov phiaj xwm nws tus kheej, tab sis tsis yog rau cov khoom lag luam kaw.) Ntxiv rau nws qhov kev tsis txaus ntseeg, cov txheej txheem no qhia txog cov teeb meem paub zoo: code duplication qhia los ntawm thaum hloov mus rau qhov yuam kev, lwm. Dab tsi yog qhov phem tshaj yog tias cov qauv tsim nyob hauv "cov khoom hauv lawv tus kheej" thiab tsis txhob siv qhov zoo ntawm qhov muaj peev xwm rau kev sib koom ua ke. Tab sis kev cais cov tswv yim thiab cov txheej txheem rau cov qauv lus siv tau tuaj yeem ua rau kev tsim cov khoom siv rov qab siv tau rau kev ua haujlwm nrog lawv, zoo ib yam li qhov tshwm sim hauv EMF.

Tsis yog Eclipse tsis nkag siab cov teeb meem no. Rov qab rau xyoo 2005 Martin Aeschlimann, xaus cov kev paub ntawm kev tsim CDT qauv, sib cav qhov yuav tsum tau tsim kom muaj ib qho kev sib koom ua ke rau cov qauv lus, suav nrog cov qauv ua qauv. Tab sis, raws li feem ntau tshwm sim, vim yog cov haujlwm tseem ceeb dua, kev siv cov tswv yim no yeej tsis tau mus txog rau nws. Meanwhile, factorization ntawm * DT code tseem yog ib qho ntawm cov underdeveloped cov ntsiab lus nyob rau hauv dab noj hnub.

Hauv qee qhov kev txiav txim siab, qhov project Handly yog tsim los daws cov teeb meem tib yam li EMF, tab sis rau cov qauv siv, thiab feem ntau cov lus sawv cev (piv txwv li, sawv cev ntawm cov qauv ntawm qee cov lus programming). Lub hom phiaj tseem ceeb tau teeb tsa thaum tsim Handly yog teev hauv qab no:

  • Kev txheeb xyuas cov ntsiab lus tseem ceeb ntawm thaj chaw kawm.
  • Txo kev siv zog thiab txhim kho qhov ua tau zoo ntawm kev siv cov qauv lus siv los ntawm kev siv code rov qab.
  • Muab ib qho kev sib koom ua ke meta-level API rau cov qauv tsim, ua kom nws muaj peev xwm tsim cov IDE cov khoom sib xws uas ua haujlwm nrog cov qauv siv lus.
  • Flexibility thiab scalability.
  • Kev koom ua ke nrog Xtext (hauv ib txheej nyias).

Txhawm rau hais txog cov ntsiab lus sib xws thiab cov txheej txheem, cov kev siv uas twb muaj lawm ntawm cov qauv kev hais lus tau raug tshuaj xyuas. Lub ntsiab interfaces thiab cov kev siv yooj yim muab los ntawm Handly yog qhia hauv Fig. 8.

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 8. Kev sib txuas ua ke thiab kev siv yooj yim ntawm Handly ntsiab

Lub IElement interface sawv cev rau tus tuav ntawm ib lub caij thiab yog ib yam rau cov ntsiab lus ntawm txhua tus qauv Handly-based. Cov chav kawm paub daws teeb meem Element siv cov txheej txheem dav dav / lub cev lub cev (Fig. 9).

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 9. IElement thiab generic kov/lub cev siv

Tsis tas li ntawd, Handly muab cov txheej txheem dav dav rau kev ceeb toom txog kev hloov pauv hauv cov qauv (Daim duab 10). Raws li koj tuaj yeem pom, nws yog qhov dav zoo ib yam li cov txheej txheem ceeb toom tau siv hauv cov qauv peev txheej thiab cov qauv Java, thiab siv IElementDelta los muab kev sib koom ua ke ntawm cov ntaub ntawv hloov pauv.

Dab noj hnub ua lub platform thev naus laus zis rau 1C: Cov cuab yeej txhim kho kev lag luam
Rice. 10. General interfaces thiab kev siv yooj yim ntawm Handly ceeb toom mechanism

Qhov Handly tau tham saum toj no (Daim duab 9 thiab 10) tuaj yeem siv los sawv cev yuav luag txhua tus qauv ua qauv. Rau kev tsim lus cov qauv, qhov project muaj kev ua haujlwm ntxiv - tshwj xeeb, kev sib cuam tshuam thiab kev siv yooj yim rau cov ntsiab lus ntawm cov qauv ntawv, lub npe hu ua qhov chaw (Daim duab 8). ISourceFile interface sawv cev rau cov ntaub ntawv qhov chaw, thiab ISourceConstruct sawv cev rau cov khoom hauv cov ntaub ntawv. Cov chav kawm paub daws teeb meem SourceFile thiab SourceConstruct siv cov txheej txheem dav dav los txhawb kev ua haujlwm nrog cov ntaub ntawv hauv qhov chaw thiab lawv cov ntsiab lus, piv txwv li, ua haujlwm nrog cov ntawv tsis sib xws, khi rau cov kev sib koom ua ke ntawm cov ntsiab lus hauv cov ntawv nyeem, sib koom ua qauv nrog cov ntsiab lus tam sim no ntawm cov ntawv ua haujlwm tsis zoo. , lwm. Kev ua raws li cov txheej txheem no feem ntau yog ib qho kev sib tw, thiab Handly tuaj yeem txo qhov kev siv zog ntawm kev tsim cov qauv lus siv los ntawm kev muab cov kev siv tau zoo.

Ntxiv nrog rau cov txheej txheem tseem ceeb uas tau teev tseg saum toj no, Handly muab cov txheej txheem rau cov ntawv nyeem buffers thiab snapshots, kev txhawb nqa rau kev koom ua ke nrog cov code editors (suav nrog kev sib koom ua ke tawm ntawm lub thawv nrog Xtext editor), nrog rau qee qhov sib xyaw UI uas. Ua hauj lwm nrog cov code editors, Handly qauv xws li cov qauv txheej txheem. Txhawm rau piav qhia nws lub peev xwm, qhov project muab ntau yam piv txwv, suav nrog kev siv Java qauv hauv Handly. (Piv rau tag nrho qhov kev siv ntawm Java qauv hauv JDT, tus qauv no yog txhob txwm ua me ntsis yooj yim dua kom pom tseeb dua.)

Raws li tau sau tseg ua ntej, lub hom phiaj tseem ceeb ntawm Handly qhov pib tsim thiab kev txhim kho tom ntej yog thiab txuas ntxiv mus rau qhov scalability thiab yooj.

Nyob rau hauv txoj cai, kov-raws li qauv ntsuas tau zoo heev "los ntawm kev tsim". Piv txwv li, tus kov / lub cev idiom tso cai rau koj los txwv tus nqi ntawm lub cim xeeb noj los ntawm tus qauv. Tab sis kuj muaj nuances. Yog li, thaum kuaj Handly rau scalability, ib qho teeb meem tau pom nyob rau hauv qhov kev siv ntawm lub ceeb toom mechanism - thaum ib tug loj tus naj npawb ntawm cov ntsiab lus tau hloov, tsim deltas siv sij hawm ntau heev. Nws muab tawm tias tib qhov teeb meem tau tshwm sim nyob rau hauv JDT Java qauv, los ntawm qhov sib thooj code tau hloov kho ib zaug. Peb kho cov kab laum hauv Handly thiab npaj ib thaj chaw zoo sib xws rau JDT, uas tau txais txiaj ntsig zoo. Qhov no tsuas yog ib qho piv txwv uas qhia Handly rau hauv cov qauv siv uas twb muaj lawm tuaj yeem muaj txiaj ntsig zoo, vim hais tias nyob rau hauv cov ntaub ntawv no xws li kab laum tuaj yeem kho hauv ib qho chaw xwb.

Txhawm rau ua kom siv Handly rau hauv cov qauv siv uas twb muaj lawm technically ua tau, lub tsev qiv ntawv yuav tsum muaj qhov yooj yim. Qhov teeb meem tseem ceeb yog tswj kev rov qab sib raug zoo thoob plaws API qauv. Qhov teeb meem no tau daws nyob rau hauv Handly 0.5 los ntawm kev sib cais kom meej cov qauv API tshwj xeeb, txhais thiab tswj tag nrho los ntawm tus tsim tawm, los ntawm kev sib koom ua ke meta-level API muab los ntawm lub tsev qiv ntawv. Qhov no tsis tsuas yog ua rau nws muaj peev xwm siv tau Handly rau hauv cov kev siv uas twb muaj lawm, tab sis kuj muab cov qauv tshiab tsim kev ywj pheej tseem ceeb thaum tsim API.

Flexibility kuj muaj lwm yam. Piv txwv li, Handly imposes yuav luag tsis muaj kev txwv rau cov qauv ntawm cov qauv thiab tuaj yeem siv los ua qauv ob qho tib si hom lus thiab hom lus tshwj xeeb. Thaum tsim cov qauv ntawm cov ntaub ntawv qhov chaw, Handly tsis tau sau ib daim ntawv tshwj xeeb ntawm AST tus sawv cev thiab, hauv paus ntsiab lus, tsis txawm xav kom muaj AST nws tus kheej, yog li ua kom muaj kev sib raug zoo nrog yuav luag txhua qhov kev sib cais. Thaum kawg, Handly txhawb nqa tag nrho kev koom ua ke nrog Eclipse workspace, tab sis kuj tuaj yeem ua haujlwm ncaj qha nrog cov ntaub ntawv ua tsaug rau nws kev koom ua ke nrog Eclipse File System (EFS).

Version tam sim no Handly 0.6 tau tawm hauv lub Kaum Ob Hlis 2016. Txawm hais tias qhov tseeb tias qhov project tam sim no nyob rau hauv lub xeev ntawm incubation thiab API tseem tsis tau raug kho thaum kawg, Handly twb tau siv nyob rau hauv ob loj coj mus muag khoom uas coj kev pheej hmoo ntawm ua raws li "thaum ntxov adopters", thiab, kuv yuav tsum hais, tsis txhob khuv xim nws.

Raws li tau sau tseg saum toj no, ib qho ntawm cov khoom no yog 1C: Cov Cuab Yeej Txhim Kho Kev Lag Luam, qhov twg Handly yog siv los ntawm qhov pib ua qauv ntawm cov qauv qib siab ntawm xws li 1C: Cov Lus Lag Luam ua cov lus tsim thiab cov lus nug. . Lwm yam khoom tsis tshua paub rau cov pej xeem. Qhov no Codasip Studio, ib puag ncig tsim kev sib koom ua ke rau daim ntawv thov kev qhia tshwj xeeb- txheej txheej txheej txheem (ASIP), siv ob qho tib si hauv Czech tuam txhab Codasip nws tus kheej thiab los ntawm nws cov neeg siv khoom, suav nrog AMD, AVG, Txawb, Sigma Tsim. Codasip tau siv Handly nyob rau hauv ntau lawm txij li thaum 2015, pib nrog version Handly 0.2. Qhov tseeb tso tawm ntawm Codasip Studio siv version 0.5, tso tawm thaum Lub Rau Hli 2016. OndΕ™ej Ilčík, uas yog tus thawj coj IDE txoj kev loj hlob ntawm Codasip, yog nyob rau hauv kev sib cuag nrog qhov project, muab cov lus qhia tseem ceeb sawv cev ntawm "thib peb tus neeg siv khoom". Nws tseem muaj peev xwm nrhiav tau qee lub sij hawm dawb los koom ncaj qha rau hauv txoj kev txhim kho, siv UI txheej (~ 4000 kab ntawm cov cai) rau ib qho piv txwv Handly, Java qauv. Cov ncauj lus kom ntxaws ntxiv txog kev siv Handly los ntawm cov neeg siv khoom tuaj yeem pom ntawm nplooj ntawv zoo dab neeg qhov project.

Peb cia siab tias tom qab tso tawm version 1.0 nrog kev lees paub ntawm API ruaj khov thiab qhov project tawm hauv lub xeev incubation, Handly yuav muaj cov neeg siv tshiab. Nyob rau hauv lub sijhawm no, qhov project tseem sim thiab txhim kho API ntxiv, tso ob "loj" tso tawm ib xyoos ib zaug - thaum Lub Rau Hli (tib lub hnub qub raws li kev tso tawm ib txhij Eclipse) thiab Kaum Ob Hlis, muab lub sijhawm kwv yees uas cov neeg siv yuav vam khom. Peb tseem tuaj yeem ntxiv tias qhov project "tus kab laum" tseem nyob rau theem qis tsis tu ncua thiab Handly tau ua haujlwm muaj kev ntseeg siab hauv cov khoom ntawm cov neeg siv khoom thaum ntxov txij li thawj cov qauv. Txhawm rau txhawm rau tshawb Eclipse Handly ntxiv, koj tuaj yeem siv Pib Tutorial ΠΈ Architectural Txheej txheem cej luam.

Tau qhov twg los: www.hab.com

Ntxiv ib saib