Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise

Шояд, офтобгирӣ кайхо боз ба сарсухани махсус эхтиёч надошт. Бисёр одамон бо Eclipse ба шарофати асбобҳои таҳияи Java Eclipse шиносанд (JDT). Маҳз ин маъмули Java IDE-и кушода аст, ки аксари таҳиягарон бо калимаи "Eclipse" алоқаманданд. Аммо, Eclipse ҳам як платформаи васеъшаванда барои ҳамгироии абзорҳои рушд (Eclipse Platform) ва як қатор IDE-ҳоест, ки дар асоси он сохта шудаанд, аз ҷумла JDT. Eclipse ҳам Лоиҳаи Eclipse, лоиҳаи сатҳи болоест, ки таҳияи Платформаи Eclipse ва JDT-ро ҳамоҳанг мекунад ва Eclipse SDK, ки натиҷаи ин рушд мебошад. Ниҳоят, Eclipse як Бунёди кушодаасос бо ҷомеаи бузурги лоиҳаҳо мебошад, ки на ҳама дар Java навишта шудаанд ё бо асбобҳои рушд алоқаманданд (масалан, лоиҳаҳо). Eclipse IoT и Илмҳои Eclipse). Ҷаҳони Eclipse хеле гуногун аст.

Дар ин мақола, ки хусусияти мухтасар дорад, мо кӯшиш хоҳем кард, ки баъзе асосҳои меъмории Eclipse-ро ҳамчун платформаи сохтани асбобҳои ҳамгирошудаи рушд дида бароем ва дар бораи ҷузъҳои Eclipse, ки асоси технологияро ташкил медиҳанд, тасаввуроти ибтидоӣ диҳем. платформаи "конфигуратори нав" 1C: Enterprise. 1С: Воситаҳои рушди корхона. Албатта, чунин барраси ногузир асосан рӯякӣ ва хеле маҳдуд хоҳад буд, аз он ҷумла, зеро мо на танҳо ба таҳиягарони Eclipse ҳамчун аудиторияи мақсаднок тамаркуз мекунем. Аммо, мо умедворем, ки ҳатто таҳиягарони ботаҷрибаи Eclipse метавонанд дар мақола маълумоти ҷолиб пайдо кунанд. Масалан, мо дар бораи яке аз "асрори Eclipse", як лоиҳаи нисбатан нав ва кам маълум сӯҳбат хоҳем кард. Eclipse Handly, ки онро 1С ташкил ва дастгирй кардааст.
Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise

Муқаддима ба меъмории Eclipse

Биёед аввал баъзе ҷанбаҳои умумии меъмории Eclipse-ро бо истифода аз мисол дида бароем Воситаҳои таҳияи Java Eclipse (JDT). Интихоби JDT ҳамчун намуна тасодуфӣ нест. Ин аввалин муҳити ҳамгирошудаи рушд аст, ки дар Eclipse пайдо мешавад. Дигар лоиҳаҳои *DT Eclipse, ба монанди Eclipse C/C++ Development Tooling (CDT) баъдтар сохта шудаанд ва ҳам принсипҳои асосии меъморӣ ва ҳам порчаҳои рамзии инфиродиро аз JDT мегиранд. Асосҳои меъмории дар JDT муқарраршуда то имрӯз барои ҳама гуна IDE дар болои Платформаи Eclipse сохташуда, аз ҷумла 1C: Tools Development Enterprise, мувофиқанд.

Пеш аз ҳама, бояд қайд кард, ки Eclipse бо қабати хеле равшани меъморӣ бо ҷудоии функсияҳои аз забон вобаста аз функсияе, ки барои дастгирии забонҳои мушаххаси барномасозӣ пешбинӣ шудааст ва ҷудо кардани ҷузъҳои "асосии" аз интерфейси мустақил аз ҷузъҳои алоқаманд тавсиф мешавад. бо интерфейси корбар дастгирӣ.

Ҳамин тариқ, Платформаи Eclipse инфрасохтори умумӣ ва мустақили забонро муайян мекунад ва абзорҳои таҳияи Java ба Eclipse IDE-и мукаммали Java илова мекунанд. Ҳарду Platform Eclipse ва JDT аз якчанд ҷузъҳо иборатанд, ки ҳар яки онҳо ба "аслӣ"-и мустақили UI ё қабати UI тааллуқ доранд (Расми 1).

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 1. Платформаи Eclipse ва JDT

Биёед ҷузъҳои асосии платформаи Eclipse-ро номбар кунем:

  • Вақти амал — Инфрасохтори плагинро муайян мекунад. Eclipse бо меъмории модулӣ хос аст. Аслан, Eclipse маҷмӯи "нуқтаҳои васеъ" ва "васеъшавӣ" аст.
  • Фазои корӣ - Як ё якчанд лоиҳаҳоро идора мекунад. Лоиҳа аз ҷузвдонҳо ва файлҳо иборат аст, ки мустақиман ба системаи файлӣ харита карда шудаанд.
  • Асбобҳои стандартии виджет (SWT) - Унсурҳои асосии интерфейси корбарро, ки бо системаи оператсионӣ муттаҳид шудаанд, таъмин мекунад.
  • JFace - Як қатор чаҳорчӯбаҳои UI-ро, ки дар болои SWT сохта шудаанд, таъмин мекунад.
  • Коркарди меҳнатӣ — Парадигмаи Eclipse UI-ро муайян мекунад: муҳаррирон, назарҳо, дурнамо.

Бояд гуфт, ки Платформаи Eclipse инчунин бисёр ҷузъҳои дигари муфидро барои сохтани абзорҳои ҳамгирошудаи рушд, аз ҷумла Debug, Муқоиса, Ҷустуҷӯ ва Гурӯҳ пешниҳод мекунад. Бояд қайд кард, ки JFace Text - асоси бунёди "муҳаррирони интеллектуалӣ" -и коди ибтидоӣ. Мутаассифона, ҳатто санҷиши курсии ин ҷузъҳо, инчунин ҷузъҳои қабати UI, дар доираи ин мақола имконнопазир аст, бинобар ин дар боқимондаи ин бахш мо худро танҳо бо шарҳи ҷузъҳои асосии "асосии" Платформаи Eclipse ва JDT.

Core Runtime

Инфрасохтори плагини Eclipse ба он асос ёфтааст ОСГи ва аз ҷониби лоиҳа пешбинӣ шудааст Eclipse Equinox. Ҳар як плагини Eclipse як бастаи OSGi мебошад. Мушаххасоти OSGi, аз ҷумла, механизмҳои версия ва ҳалли вобастагиро муайян мекунад. Илова ба ин механизмҳои стандартӣ, Equinox консепсияро муаррифӣ мекунад нуқтаҳои васеъшавӣ. Ҳар як плагин метавонад нуқтаҳои васеъшавии худро муайян кунад ва инчунин бо истифода аз нуқтаҳои васеъшавӣ, ки аз ҷониби ҳамон плагинҳо ё дигар плагинҳо муайян карда шудаанд, ба система функсияҳои иловагӣ (“васеъкунӣ”) ворид кунанд. Ҳар гуна тавсифи муфассали механизмҳои OSGi ва Equinox аз доираи ин мақола берун аст. Биёед танҳо қайд кунем, ки модулизатсия дар Eclipse умумӣ аст (ҳар як зерсистема, аз ҷумла Runtime, аз як ё якчанд плагинҳо иборат аст) ва қариб ҳама дар Eclipse васеъшавӣ мебошанд. Ғайр аз он, ин принсипҳо дар меъмории Eclipse хеле пеш аз ҷорӣ шудани OSGi ворид карда шуда буданд (дар он вақт онҳо технологияи худро, ки ба OSGi монанд буданд, истифода мебурданд).

Фазои асосии корӣ

Қариб ҳама муҳити ҳамгирошудаи рушд, ки дар болои платформаи Eclipse сохта шудааст, бо фазои кории Eclipse кор мекунад. Ин фазои корӣ аст, ки одатан рамзи сарчашмаи замимаи дар IDE таҳияшударо дар бар мегирад. Фазои корӣ бевосита ба системаи файлӣ харита мешавад ва аз лоиҳаҳое иборат аст, ки ҷузвдонҳо ва файлҳоро дар бар мегиранд. Ин лоиҳаҳо, ҷузвдонҳо ва файлҳо номида мешаванд захирахо фазои корӣ. Татбиқи фазои корӣ дар Eclipse ҳамчун кэш нисбат ба системаи файлӣ хизмат мекунад, ки имкон медиҳад, ки гардиши дарахти захираҳоро ба таври назаррас суръат бахшад. Илова бар ин, фазои корӣ як қатор хидматҳои иловагӣ, аз ҷумла механизми огоҳӣ дар бораи тағйироти захираҳо и инфраструктураи афзояндаи бинокорон.

Ҷузъи захираҳои аслӣ (плагини org.eclipse.core.resources) барои дастгирии фазои корӣ ва захираҳои он масъул аст. Аз ҷумла, ин ҷузъ дастрасии барномавиро ба фазои корӣ дар шакл таъмин мекунад моделҳои захиравӣ. Барои самаранок кор кардан бо ин модел, муштариён бояд роҳи оддии пешниҳоди истинод ба манбаъро дошта бошанд. Дар ин ҳолат, матлуб мебуд, ки объектеро, ки бевосита ҳолати захираро дар модел нигоҳ медорад, аз дастрасии муштарӣ нигоҳ дорад. Дар акси ҳол, дар сурати, масалан, нест кардани файл, муштарӣ метавонад нигоҳ доштани объектеро, ки дигар дар модел нест, бо мушкилоти минбаъда идома диҳад. Eclipse ин мушкилотро бо истифода аз чизе, ки ном дорад, ҳал мекунад идора карда мешаванд захира. Дастак ҳамчун калид амал мекунад (он танҳо роҳи манбаро дар фазои корӣ медонад) ва дастрасӣ ба объекти модели дохилиро, ки бевосита маълумот дар бораи ҳолати захираро нигоҳ медорад, комилан назорат мекунад. Ин тарҳ як варианти намуна аст Дастак / Бадан.

Райс. Дар расми 2 идиомаи Handle/Body тасвир шудааст, ки ба модели манбаъ истифода мешавад. Интерфейси IResource дастаки захираро ифода мекунад ва бар хилофи синфи Resource, ки ин интерфейсро амалӣ мекунад ва синфи ResourceInfo, ки баданро ифода мекунад, ки API нестанд, API мебошад. Мо таъкид мекунем, ки даста танҳо роҳи манбаро нисбат ба решаи фазои корӣ медонад ва дорои истиноди иттилооти манбаъ нест. Объектҳои иттилооти захиравӣ ба истилоҳ "дарахти элемент" -ро ташкил медиҳанд. Ин сохтори додаҳо пурра дар хотира моддӣ карда мешавад. Барои пайдо кардани мисоли иттилооти захиравӣ, ки ба даста мувофиқ аст, дарахти элемент мувофиқи роҳе, ки дар он даста захира шудааст, тай карда мешавад.

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 2. IResource ва ResourceInfo

Тавре ки мо дертар хоҳем дид, тарҳи асосии модели захиравӣ (мо метавонем онро ба даста асоснок меномем) дар Eclipse барои дигар моделҳо низ истифода мешавад. Ҳоло, биёед баъзе аз хусусиятҳои фарқкунандаи ин тарҳро номбар кунем:

  • Дастак объекти арзишманд аст. Объектҳои арзиш объектҳои тағирнашаванда мебошанд, ки баробарии онҳо ба шахсият асос намеёбад. Чунин объектҳоро метавон ҳамчун калид дар контейнерҳои ҳашшуда бехатар истифода бурд. Якчанд мисолҳои коркард метавонанд ба як манбаъ муроҷиат кунанд. Барои муқоисаи онҳо, шумо бояд усули баробар (Object) -ро истифода баред.
  • Handle рафтори захираро муайян мекунад, аммо дар бораи ҳолати захира маълумот надорад (ягона маълумоте, ки он "калид" нигоҳ медорад, роҳ ба манбаъ аст).
  • Дастгоҳ метавонад ба манбаи мавҷуда муроҷиат кунад (ё манбаи ҳанӯз эҷод нашудааст ё захирае, ки аллакай нест карда шудааст). Мавҷудияти захираро метавон бо истифода аз усули IResource.exists() тафтиш кард.
  • Баъзе амалиётҳоро танҳо дар асоси маълумоте, ки дар худи даста нигоҳ дошта мешавад, амалӣ кардан мумкин аст (ба ном амалиёти танҳо барои дастаки). Намунаҳо IResource.getParent(), getFullPath() ва ғайра мебошанд. Барои муваффақ шудан ба чунин амалиёт захира мавҷуд нест. Амалиётҳое, ки мавҷудияти захираро талаб мекунанд, то муваффақ шаванд, агар захира мавҷуд набошад, CoreException -ро мепартояд.

Eclipse механизми муассирро барои огоҳ кардани тағйироти захираҳои фазои корӣ таъмин мекунад (Расми 3). Сарчашмаҳо метавонанд ё дар натиҷаи амалҳое, ки дар худи Eclipse IDE иҷро мешаванд ё дар натиҷаи ҳамоҳангсозӣ бо системаи файлӣ тағйир ёбанд. Дар ҳарду ҳолат, муштариёне, ки ба огоҳиномаҳо обуна мешаванд, маълумоти муфассалро дар бораи тағирот дар шакли "делтаҳои захиравӣ" пешниҳод мекунанд. Делта тағиротро байни ду ҳолати дарахти захираи фазои кории (зер) тавсиф мекунад ва худ дарахт аст, ки ҳар як гиреҳи он тағиротро ба захира тавсиф мекунад ва рӯйхати делтаҳоро дар сатҳи оянда, ки тағиротро ба захираҳои кӯдакро тавсиф мекунад, дар бар мегирад.

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 3. IResourceChangeEvent ва IResourceDelta

Механизми огоҳӣ дар асоси дельтаҳои захиравӣ дорои хусусиятҳои зерин мебошад:

  • Тағйироти ягона ва бисёр тағйиротҳо бо истифода аз як сохтор тавсиф карда мешаванд, зеро дельта бо истифода аз принсипи таркиби рекурсивӣ сохта шудааст. Мизоҷони муштарӣ метавонанд огоҳиномаҳои тағирёбии захираҳоро бо истифода аз насли рекурсивӣ тавассути дарахти делтаҳо коркард кунанд.
  • Делта маълумоти мукаммалро дар бораи тағирот ба манбаъ, аз ҷумла ҳаракати он ва/ё тағирот дар "маркерҳо"-и бо он алоқаманд дар бар мегирад (масалан, хатогиҳои компиляция ҳамчун маркерҳо нишон дода мешаванд).
  • Азбаски истинодҳои захираҳо тавассути даста анҷом дода мешаванд, дельта табиатан метавонад ба манбаи дурдаст муроҷиат кунад.

Тавре ки мо ба зудӣ мебинем, ҷузъҳои асосии тарҳрезии механизми огоҳинома дар бораи тағирёбии модели захиравӣ барои дигар моделҳои бар асоси даста низ мувофиқанд.

Core JDT

Модели захираҳои фазои кории Eclipse модели асосии забон-агностикӣ мебошад. Ҷузъи асосии JDT (plugin org.eclipse.jdt.core) API-ро барои паймоиш ва таҳлили сохтори фазои корӣ аз нуқтаи назари Java, ба истилоҳ "Модели Java" (Модели Java). Ин API дар муқоиса бо модели асосии API, ки аз рӯи ҷузвдонҳо ва файлҳо муайян карда мешавад, аз рӯи унсурҳои Java муайян карда мешавад. Интерфейсҳои асосии дарахти элементҳои Java дар расми 4 нишон дода шудаанд. XNUMX.

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 4. Унсурҳои модели Java

Модели Java ҳамон як идиомаи даста/баданро ҳамчун модели манбаъ истифода мебарад (Расми 5). IJavaElement дастаки аст ва JavaElementInfo нақши баданро мебозад. Интерфейси IJavaElement протоколеро, ки барои ҳама унсурҳои Java умумӣ аст, муайян мекунад. Баъзе аз усулҳои он танҳо барои коркард мебошанд: getElementName(), getParent() ва ғайра. Объекти JavaElementInfo ҳолати элементи мувофиқро нигоҳ медорад: сохтор ва атрибутҳои он.

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 5. IJavaElement ва JavaElementInfo

Модели Java дар татбиқи тарҳи асосии даста/бадан нисбат ба модели захиравӣ баъзе фарқиятҳо дорад. Тавре ки дар боло қайд карда шуд, дар модели захиравӣ дарахти элемент, ки гиреҳҳои онҳо объектҳои иттилоотии захиравӣ мебошанд, пурра дар хотира мавҷуд аст. Аммо модели Java метавонад нисбат ба дарахти захираҳо шумораи хеле зиёди элементҳо дошта бошад, зеро он инчунин сохтори дохилии файлҳои .java ва .class: намудҳо, майдонҳо ва усулҳоро ифода мекунад.

Барои он ки пурра ба амал наомадани тамоми дарахти элементҳо дар хотира, татбиқи модели Java кэши маҳдуди LRU-и иттилооти элементро истифода мебарад, ки дар он калид дастаки IJavaElement мебошад. Объектҳои иттилооти элементҳо тибқи дархост сохта мешаванд, зеро дарахти элемент паймоиш мешавад. Дар ин ҳолат, ҷузъҳои камтар истифодашаванда аз кэш хориҷ карда мешаванд ва истеъмоли хотираи модел бо андозаи муайяншудаи кэш маҳдуд мемонад. Ин як бартарии дигари тарҳи бар асоси даста мебошад, ки чунин тафсилоти татбиқро аз рамзи муштарӣ комилан пинҳон мекунад.

Механизми огоҳ кардани тағирот ба унсурҳои Java дар маҷмӯъ ба механизми пайгирии тағирот дар захираҳои фазои корӣ, ки дар боло баррасӣ шуд, монанд аст. Мизоҷ, ки мехоҳад тағиротро дар модели Java назорат кунад, ба огоҳиномаҳо обуна мешавад, ки онҳо ҳамчун объекти ElementChangedEvent, ки дорои IJavaElementDelta мебошанд (расми 6).

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 6. ElementChangedEvent ва IJavaElementDelta

Модели Java маълумот дар бораи сохторҳои методӣ ё ҳалли номро дар бар намегирад, аз ин рӯ барои таҳлили муфассали коди дар Java навишташуда, JDT Core модели иловагиро (ғайри даста асоснок) пешниҳод мекунад: дарахти синтаксиси абстрактӣ (дарахти абстрактии синтаксис, АСТ). AST натиҷаи таҳлили матни сарчашмаро нишон медиҳад. Гиреҳҳои AST ба унсурҳои сохтори модули манбаъ (эъломияҳо, операторҳо, ифодаҳо ва ғайра) мувофиқат мекунанд ва дорои маълумот дар бораи координатҳои элементи мувофиқ дар матни манбаъ, инчунин (ҳамчун вариант) маълумот дар бораи ҳалли ном дар шакли пайвандҳо ба ном пайвастагиҳо. Пайвастшавӣ объектҳое мебошанд, ки объектҳои номбаршударо намояндагӣ мекунанд, ба монанди намудҳо, усулҳо ва тағирёбандаҳо, ки ба компилятор маълуманд. Баръакси гиреҳҳои AST, ки дарахтро ташкил медиҳанд, пайвандҳо истинодҳои байниҳамдигариро дастгирӣ мекунанд ва умуман графикро ташкил медиҳанд. Синфи абстрактии ASTNode синфи асосии умумӣ барои ҳама гиреҳҳои AST мебошад. Зерклассҳои ASTNode ба сохторҳои мушаххаси синтаксиси забони Java мувофиқат мекунанд.

Азбаски дарахтони синтаксис метавонанд миқдори зиёди хотираро истеъмол кунанд, JDT танҳо як AST-ро барои муҳаррири фаъол кэш мекунад. Баръакси модели Java, AST маъмулан ҳамчун модели "мобайнӣ", "муваққатӣ" баррасӣ мешавад, ки унсурҳои он муштариён набояд ба берун аз контексти амалиёте, ки боиси эҷоди AST гардид, истинод дошта бошанд.

Се модели номбаршуда (модели Java, AST, пайвандҳо) дар якҷоягӣ барои сохтани "асбобҳои интеллектуалии рушд" дар JDT, аз ҷумла як муҳаррири пурқуввати Java бо "ёрирасони гуногун", амалҳои гуногун барои коркарди коди манбаъ (аз ҷумла ташкили рӯйхати воридот) асосиро ташкил медиҳанд. номҳо ва форматкунӣ мувофиқи услуби фармоишӣ), абзорҳои ҷустуҷӯ ва рефакторинг. Дар ин ҳолат модели Java нақши махсус мебозад, зеро маҳз он ҳамчун асос барои муаррифии визуалии сохтори замимаи таҳияшаванда истифода мешавад (масалан, дар Package Explorer, Outline, Search, Call Hierarchy ва Навъи иерархия).

Компонентҳои Eclipse, ки дар Tools 1C: Enterprise Developments истифода мешаванд

Дар расми. Дар расми 7 ҷузъҳои Eclipse нишон дода шудааст, ки асоси платформаи технологии 1C: Tools Development Enterprise -ро ташкил медиҳанд.

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 7. Eclipse ҳамчун платформа барои 1C: Tools Development Enterprise

Платформаи Eclipse инфраструктураи асосиро таъмин мекунад. Мо баъзе ҷанбаҳои ин инфрасохторро дар фасли қаблӣ дида баромадем.

Чаҳорчӯбаи моделсозии Eclipse (EMF) воситаи умумии моделсозии маълумоти сохториро таъмин менамояд. EMF бо Platform Eclipse муттаҳид карда шудааст, аммо инчунин метавонад дар барномаҳои муқаррарии Java алоҳида истифода шавад. Аксар вақт, таҳиягарони нави Eclipse аллакай бо EMF хуб шиносанд, гарчанде ки онҳо то ҳол нозукиҳои Платформаи Eclipse-ро пурра дарк намекунанд. Яке аз сабабҳои чунин маъруфияти сазовор ин тарҳи универсалӣ мебошад, ки дар байни чизҳои дигар, API-и ягонаи сатҳи метаро дар бар мегирад, ки ба шумо имкон медиҳад бо ҳама гуна модели EMF ба таври умумӣ кор кунед. Татбиқҳои асосӣ барои объектҳои моделие, ки аз ҷониби EMF пешниҳод шудаанд ва зерсистемаи тавлиди коди моделӣ дар асоси мета-модел суръати рушдро ба таври назаррас афзоиш медиҳанд ва шумораи хатогиҳоро кам мекунанд. EMF инчунин дорои механизмҳои силсилавии моделҳо, пайгирии тағирот дар модел ва ғайра мебошад.

Мисли ҳама гуна асбоби воқеии умумӣ, EMF барои ҳалли доираи васеи масъалаҳои моделсозӣ мувофиқ аст, аммо баъзе синфҳои моделҳо (масалан, моделҳои дар асоси дастаки дар боло муҳокимашуда) метавонанд асбобҳои махсуси моделсозии бештарро талаб кунанд. Гуфтугӯ дар бораи EMF кори ношукрист, алахусус дар доираи маҳдуди як мақола, зеро ин мавзӯи як китоби алоҳида ва хеле ғафс аст. Фақат қайд кунем, ки системаи баландсифати умумӣ дар асоси EMF имкон дод, ки як қатор лоиҳаҳое, ки ба моделсозӣ бахшида шудаанд, ба лоиҳаи сатҳи олӣ дохил карда шаванд. Моделсозии Eclipse дар баробари худи EMF. Яке аз чунин лоиҳаҳо Eclipse Xtext мебошад.

Eclipse Xtext инфрасохтори "моделсозии матн" -ро таъмин мекунад. Xtext истифода мебарад АНТЛР барои таҳлили матни сарчашма ва EMF барои муаррифии ASG (графи абстрактии семантикӣ, ки аслан омезиши AST ва пайвандҳо мебошад) низ "модели семантикӣ" номида мешавад. Грамматикаи забоне, ки аз ҷониби Xtext модел шудааст, бо забони худи Xtext тасвир шудааст. Ин ба шумо имкон медиҳад, ки на танҳо тавсифи грамматикиро барои ANTLR тавлид кунед, балки механизми силсиласозии AST (яъне Xtext ҳам таҳлилгар ва ҳам ҷудокунандаро таъмин мекунад), ишораи контекст ва як қатор ҷузъҳои дигари забонро ба даст оред. Аз тарафи дигар, забони грамматикие, ки дар Xtext истифода мешавад, нисбат ба забони грамматикии дар ANTLR истифодашаванда камтар чандир аст. Аз ин рӯ, баъзан лозим аст, ки забони татбиқшударо ба Xtext "хам" кардан лозим аст, ки ин одатан мушкиле нест, агар сухан дар бораи забоне, ки аз сифр таҳия мешавад, аммо барои забонҳои дорои синтаксиси аллакай муқарраршуда қобили қабул нест. Бо вуҷуди ин, Xtext дар айни замон воситаи баркамол, аз ҷиҳати хусусиятҳо бой ва ҳамаҷониба дар Eclipse барои сохтани забонҳои барномасозӣ ва абзорҳои таҳия барои онҳо мебошад. Махсусан, он як воситаи беҳтарин барои прототипсозии зуд аст забонҳои мушаххаси домен (забони мушаххаси домен, DSL). Илова ба "асоси забон"-и дар боло зикршуда, ки бар ANTLR ва EMF асос ёфтааст, Xtext бисёр ҷузъҳои муфиди сатҳи олиро таъмин мекунад, аз ҷумла механизмҳои индексатсия, сохтмони афзоянда, "муҳаррири интеллектуалӣ" ва бисёр чизҳои дигар, аммо идоракуниро тарк мекунад - моделҳои забон асос ёфтааст. Мисли EMF, Xtext як мавзӯи сазовори китоби алоҳида аст ва мо ҳоло ҳатто дар бораи тамоми қобилиятҳои он ба таври кӯтоҳ сӯҳбат карда наметавонем.

1C: Воситаҳои рушди корхона ҳам худи EMF ва ҳам як қатор лоиҳаҳои дигари моделсозии Eclipse-ро фаъолона истифода мебаранд. Аз ҷумла, Xtext яке аз асосҳои асбобҳои таҳияи чунин забонҳои 1C: Enterprise ба монанди забони дохилии барномасозӣ ва забони дархост мебошад. Асоси дигари ин абзорҳои таҳия лоиҳаи Eclipse Handly мебошад, ки мо онро ба таври муфассал баррасӣ хоҳем кард (аз ҷузъҳои Eclipse номбаршуда, он то ҳол камтар маълум аст).

Eclipse Handly, як зерлоиҳаи лоиҳаи сатҳи болоии Eclipse Technology, дар натиҷаи саҳми ибтидоии код ба Бунёди Eclipse аз ҷониби 1C дар соли 2014 ба вуҷуд омадааст. Аз он вақт инҷониб, 1C дастгирии рушди лоиҳаро идома дод: Комитентҳои дастӣ кормандони ширкат мебошанд. Лоиҳа хурд аст, аммо он дар Eclipse ҷои хеле беназирро ишғол мекунад: ҳадафи асосии он дастгирии таҳияи моделҳои ба даста асосёфта мебошад.

Принсипҳои асосии меъмории моделҳои ба даста асосёфта, ба монанди идиомаи даста/бадан, дар боло бо истифода аз модели захиравӣ ва модели Java ҳамчун мисол муҳокима карда шуданд. Он инчунин қайд кард, ки ҳам модели захиравӣ ва ҳам модели Java заминаи муҳим барои абзорҳои таҳияи Java Eclipse (JDT) мебошанд. Ва азбаски қариб ҳамаи лоиҳаҳои *DT Eclipse дорои меъмории шабеҳ ба JDT мебошанд, гуфтан муболиғаи бузург нест, агар бигӯем, ки моделҳои ба даста асосёфта дар асоси бисёриҳо қарор доранд, агар на ҳама IDE-ҳои дар болои Платформаи Eclipse сохташуда. Масалан, Eclipse C/C++ Tooling (CDT) дорои модели ба даста асосёфтаи C/C++ мебошад, ки дар меъмории CDT ҳамон нақшро мебозад, ки модели Java дар JDT иҷро мекунад.

Пеш аз Handly, Eclipse китобхонаҳои махсусро барои сохтани моделҳои забон дар асоси даста пешниҳод намекард. Моделҳое, ки дар айни замон вуҷуд доранд, асосан тавассути мутобиқсозии бевоситаи коди модели Java сохта шудаанд (масалан, нусхабардорӣ / часбонед), дар мавридхое, ки он имкон медихад Литсензияи ҷамъиятии Eclipse (EPL). (Аён аст, ки ин одатан барои худи лоиҳаҳои Eclipse як масъалаи ҳуқуқӣ нест, аммо на барои маҳсулоти манбаи пӯшида.) Илова бар тасодуфии хоси худ, ин усул мушкилоти маъруфро пешниҳод мекунад: такрори код ҳангоми мутобиқшавӣ ба хатогиҳо, ва ғайра. Бадтараш он аст, ки моделҳои натиҷавӣ "чизҳои худ" боқӣ мемонанд ва аз потенсиали муттаҳидшавӣ истифода намебаранд. Аммо ҷудо кардани мафҳумҳо ва протоколҳои умумӣ барои моделҳои забонӣ метавонад боиси эҷоди ҷузъҳои такрорӣ барои кор бо онҳо гардад, ба монанди он чизе, ки дар мавриди EMF рӯй дод.

Ин нест, ки Eclipse ин масъалаҳоро нафаҳмидааст. Бозгашт ба соли 2005 Мартин Эслиман, ҷамъбасти таҷрибаи таҳияи прототипи CDT, баҳс кард зарурати эҷоди инфрасохтори умумӣ барои моделҳои забонӣ, аз ҷумла моделҳои ба даста асосёфта. Аммо, чунон ки аксар вақт рӯй медиҳад, бинобар вазифаҳои афзалиятнок, татбиқи ин ғояҳо ҳеҷ гоҳ ба он намерасид. Дар ҳамин ҳол, факторизатсияи коди *DT то ҳол яке аз мавзӯъҳои камтаҳияшуда дар Eclipse мебошад.

Ба маънои муайян, лоиҳаи Handly барои ҳалли тақрибан ҳамон мушкилоте, ки EMF дорад, тарҳрезӣ шудааст, аммо барои моделҳои ба даста асосёфта ва пеш аз ҳама забонҳо (яъне, унсурҳои сохтори баъзе забони барномасозӣ). Ҳадафҳои асосӣ ҳангоми тарҳрезии Handly дар зер оварда шудаанд:

  • Муайян кардани абстраксияҳои асосии соҳаи мавзӯъ.
  • Коҳиш додани саъю кӯшиш ва баланд бардоштани сифати татбиқи моделҳои забон дар асоси даста тавассути истифодаи такрории код.
  • Таъмини API-и ягонаи сатҳи мета-сатҳи ба моделҳои натиҷавӣ, имкон медиҳад, ки ҷузъҳои умумии IDE, ки бо моделҳои ба забон асосёфта кор мекунанд, эҷод кунанд.
  • Фасеҳӣ ва миқёспазирӣ.
  • Интегратсия бо Xtext (дар қабати алоҳида).

Барои нишон додани мафҳумҳо ва протоколҳои умумӣ, татбиқи мавҷудаи моделҳои ба забон асосёфта таҳлил карда шуданд. Интерфейсҳои асосӣ ва татбиқи асосие, ки аз ҷониби Handly пешниҳод шудаанд, дар расм нишон дода шудаанд. 8.

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 8. Интерфейсҳои умумӣ ва татбиқи асосии унсурҳои Handly

Интерфейси IElement дастаки элементро ифода мекунад ва барои унсурҳои ҳама моделҳои ба Handly асосёфта маъмул аст. Синфи абстрактӣ Element механизми дастаки/танаи умумиро амалӣ мекунад (расми 9).

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 9. IElement ва дастаки умумӣ / татбиќи бадан

Илова бар ин, Handly як механизми умумиро барои огоҳӣ дар бораи тағирот дар элементҳои модел пешниҳод мекунад (расми 10). Тавре ки шумо мебинед, он ба таври васеъ ба механизмҳои огоҳие, ки дар модели захиравӣ ва модели Java амалӣ карда шудаанд, шабоҳат дорад ва IElementDelta-ро барои пешниҳоди ягонаи иттилооти тағирёбии унсурҳо истифода мебарад.

Eclipse ҳамчун платформаи технологӣ барои 1C: Асбобҳои рушди Enterprise
Райс. 10. Интерфейсҳои умумӣ ва татбиқи асосии механизми огоҳии Handly

Қисми Handly, ки дар боло баррасӣ шуд (расми 9 ва 10) метавонад барои муаррифии қариб ҳама моделҳои ба даста асосёфта истифода шавад. Барои эҷод забоншиносӣ Моделҳо, лоиҳа функсияҳои иловагиро пешниҳод мекунад - аз ҷумла, интерфейсҳои умумӣ ва татбиқи асосӣ барои унсурҳои сохтори матни сарчашма, ба ном унсурҳои манбаъ (расми 8). Интерфейси ISourceFile файли сарчашмаро муаррифӣ мекунад ва ISourceConstruct як унсурро дар дохили файли манбаъ муаррифӣ мекунад. Синфҳои абстрактии SourceFile ва SourceConstruct механизмҳои умумиро барои дастгирии кор бо файлҳои ибтидоӣ ва унсурҳои онҳо амалӣ мекунанд, масалан, кор бо буферҳои матнӣ, пайваст кардани координатаҳои элемент дар матни манбаъ, мувофиқ кардани моделҳо бо мундариҷаи ҷории буфери нусхаи корӣ , ва гайра. Татбиқи ин механизмҳо одатан хеле мушкил аст ва Handly метавонад саъю кӯшиши таҳияи моделҳои забонҳои ба даста асосёфтаро тавассути пешниҳоди татбиқи босифати асосиро ба таври назаррас коҳиш диҳад.

Илова ба механизмҳои асосии дар боло номбаршуда, Handly инфрасохтори буферҳои матнӣ ва аксҳои аксбардорӣ, дастгирии ҳамгироӣ бо муҳаррирони коди ибтидоӣ (аз ҷумла ҳамгироии берун аз қуттӣ бо муҳаррири Xtext), инчунин баъзе ҷузъҳои маъмули UI, ки кор бо муҳаррирҳои коди сарчашма Моделҳои дастӣ ба монанди чаҳорчӯбаи контур. Барои нишон додани қобилиятҳои худ, лоиҳа якчанд мисолҳоро пешниҳод мекунад, аз ҷумла татбиқи модели Java дар Handly. (Дар муқоиса бо татбиқи пурраи модели Java дар JDT, ин модел барои возеҳи бештар қасдан то андозае содда карда шудааст.)

Тавре ки қаблан зикр гардид, таваҷҷӯҳи асосӣ ҳангоми тарҳрезии ибтидоии Handly ва рушди минбаъда ба миқёспазирӣ ва чандирӣ буд ва боқӣ мемонад.

Аслан, моделҳои ба даста асосёфта «аз рӯи тарҳ» хеле хуб миқёс доранд. Масалан, идиомаи дастаки/бадан ба шумо имкон медиҳад, ки миқдори хотираи аз ҷониби модел истеъмолшударо маҳдуд кунед. Аммо нозукиҳо низ ҳастанд. Ҳамин тариқ, ҳангоми санҷиши Handly барои миқёспазирӣ, дар татбиқи механизми огоҳӣ мушкилот ошкор карда шуд - вақте ки шумораи зиёди элементҳо иваз карда шуданд, сохтани дельтҳо вақти аз ҳад зиёдро талаб кард. Маълум шуд, ки ҳамин мушкилот дар модели JDT Java вуҷуд дорад, ки як маротиба коди мувофиқ аз он мутобиқ карда шудааст. Мо хатогиро дар Handly ислоҳ кардем ва як ямоқи шабеҳро барои JDT омода кардем, ки бо миннатдорӣ қабул карда шуд. Ин танҳо як мисолест, ки ворид кардани Handly ба татбиқи моделҳои мавҷуда метавонад муфид бошад, зеро дар ин ҳолат чунин хатогиро танҳо дар як ҷо ислоҳ кардан мумкин аст.

Барои он ки татбиқи Handly ба татбиқи моделҳои мавҷуда аз ҷиҳати техникӣ имконпазир бошад, китобхона бояд чандирии назаррас дошта бошад. Мушкилоти асосӣ нигоҳ доштани мутобиқати ақиб дар модели API мебошад. Дар ин масъала хал карда шуд Дасти 0.5 тавассути ба таври возеҳ ҷудо кардани API-и мушаххаси модел, ки аз ҷониби таҳиякунанда муайян ва пурра назорат карда мешавад, аз API ягонаи сатҳи мета-сатҳи аз ҷониби китобхона пешниҳодшуда. Ин на танҳо аз ҷиҳати техникӣ имкон медиҳад, ки Handly дар татбиқҳои мавҷуда татбиқ карда шавад, балки инчунин ба таҳиягари модели нав ҳангоми тарҳрезии API озодии назаррас медиҳад.

Фарқият ҷанбаҳои дигар низ дорад. Масалан, Handly дар сохтори модел қариб ҳеҷ гуна маҳдудият ҷорӣ намекунад ва метавонад барои моделсозии забонҳои таъиноти умумӣ ва доменӣ истифода шавад. Ҳангоми сохтани сохтори файли манбаъ, Handly ягон шакли мушаххаси муаррифии AST-ро муқаррар намекунад ва аслан, ҳатто мавҷудияти худи AST-ро талаб намекунад ва ҳамин тавр мутобиқатро бо қариб ҳама механизми таҳлили таҳлил таъмин мекунад. Ниҳоят, Handly ҳамгироии пурраро бо фазои кории Eclipse дастгирӣ мекунад, аммо инчунин метавонад ба туфайли ҳамгироӣ бо системаҳои файлӣ мустақиман кор кунад. Системаи файлии Eclipse (EFS).

Версияи ҳозира Дасти 0.6 моҳи декабри соли 2016 баромад. Сарфи назар аз он, ки лоиҳа дар айни замон дар ҳолати инкубатсия қарор дорад ва API то ҳол ба охир нарасидааст, Handly аллакай дар ду маҳсулоти бузурги тиҷоратӣ истифода мешавад, ки хатари ҳамчун "кабулкунандагони барвақт" амал карданро ба ӯҳда гирифтаанд ва ман бояд бигӯям, то хол пушаймон нашавед.

Тавре ки дар боло зикр гардид, яке аз ин маҳсулот 1C: Tools Development Enterprise мебошад, ки дар он Handly аз ибтидо барои моделсозии унсурҳои сохтори сатҳи баланди чунин забонҳои 1C: Enterprise ҳамчун забони дохилии барномасозӣ ва забони дархост истифода мешавад. . Махсулоти дигар ба омма кам маълум аст. Ин Студияи Codasip, муҳити ҳамгирошудаи тарроҳӣ барои протсессори маҷмӯи дастурҳо (ASIP), ки ҳам дар худи ширкати чехӣ Codasip ва ҳам аз ҷониби муштариёни он истифода мешавад, аз ҷумла AMD, AVG, Мобилӣ, Тарҳҳои Sigma. Codasip аз соли 2015 аз версияи Handly 0.2 сар карда, Handly-ро дар истеҳсолот истифода мебарад. Нашри охирини Codasip Studio версияи 0.5-ро истифода мебарад, ки дар моҳи июни соли 2016 бароварда шудааст. Онджей Илчик, ки ба рушди IDE дар Codasip роҳбарӣ мекунад, бо лоиҳа дар тамос буда, аз номи "қабулкунандаи тарафи сеюм" фикру мулоҳизаҳои муҳимро пешниҳод мекунад. Вай ҳатто тавонист вақти холӣ пайдо кунад, то бевосита дар таҳияи лоиҳа иштирок кунад ва қабати UI (~4000 сатри код) барои яке аз намунаҳои Handly, модели Java татбиқ кунад. Маълумоти муфассали дасти аввалро дар бораи истифодаи Handly аз ҷониби қабулкунандагон дар саҳифа пайдо кардан мумкин аст Ҳикояҳои бомуваффақият лоиҳа.

Мо умедворем, ки пас аз нашри версияи 1.0 бо кафолати устувории API ва лоиҳае, ки аз ҳолати инкубатсия хориҷ мешавад, Handly қабулкунандагони нав хоҳад дошт. Дар ҳамин ҳол, лоиҳа озмоиш ва такмили минбаъдаи API-ро идома дода, дар як сол ду релизҳои "асосӣ" - дар моҳи июн (ҳамон санаи релизҳои ҳамзамон Eclipse) ва декабрро мебарорад, ки ҷадвали пешбинишавандаеро фароҳам меорад, ки қабулкунандагон метавонанд ба онҳо такя кунанд. Мо инчунин метавонем илова кунем, ки "суръати хатогиҳо" -и лоиҳа дар сатҳи пайваста паст боқӣ мемонад ва Handly аз версияҳои аввал дар маҳсулоти қабулкунандагони барвақт ба таври эътимодбахш кор мекунад. Барои омӯзиши минбаъдаи Eclipse Handly, шумо метавонед истифода баред Дастури оғозёбӣ и Шарҳи меъморӣ.

Манбаъ: will.com

Илова Эзоҳ