Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе

Можда, Ецлипсе одавно није требало посебно представљање. Многи људи су упознати са Ецлипсе захваљујући Ецлипсе Јава развојним алатима (ЗТНП). Управо овај популарни Јава ИДЕ отвореног кода већина програмера повезује са речју „Ецлипсе“. Међутим, Ецлипсе је и проширива платформа за интеграцију развојних алата (Ецлипсе Платформа) и низ ИДЕ-ова изграђених на њеној основи, укључујући ЈДТ. Ецлипсе је и Ецлипсе пројекат, пројекат највишег нивоа који координира развој Ецлипсе платформе и ЈДТ-а, и Ецлипсе СДК, испоручени резултат тог развоја. Коначно, Ецлипсе је фондација отвореног кода са огромном заједницом пројеката, од којих нису сви написани на Јави или повезани са развојним алатима (на пример, пројекти Ецлипсе ИоТ и Ецлипсе Сциенце). Свет Ецлипсе је веома разнолик.

У овом чланку, који је прегледне природе, покушаћемо да сагледамо неке од основа Ецлипсе архитектуре као платформе за изградњу интегрисаних развојних алата и дамо почетну идеју о Ецлипсе компонентама које чине основу технологије платформа за „нови конфигуратор“ 1Ц: Ентерприсе. 1Ц: Алати за развој предузећа. Наравно, такав преглед ће неизбежно бити углавном површан и прилично ограничен, укључујући и зато што се фокусирамо не само на Ецлипсе програмере као циљну публику. Међутим, надамо се да ће чак и искусни програмери Ецлипсе моћи пронаћи занимљиве информације у чланку. На пример, говорићемо о једној од „тајни Ецлипсе“, релативно новом и мало познатом пројекту Ецлипсе Хандли, који је основао и подржава 1Ц.
Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе

Увод у Ецлипсе архитектуру

Хајде да прво погледамо неке опште аспекте Ецлипсе архитектуре користећи пример Ецлипсе Јава развојни алати (ЈДТ). Избор ЈДТ-а као примера није случајан. Ово је прво интегрисано развојно окружење које се појављује у Ецлипсе-у. Други *ДТ Ецлипсе пројекти, као што је Ецлипсе Ц/Ц++ развојни алат (ЦДТ), настали су касније и позајмљују основне архитектонске принципе и појединачне фрагменте изворног кода од ЈДТ-а. Основе архитектуре постављене у ЈДТ релевантне су до данас за скоро сваки ИДЕ изграђен на врху Ецлипсе платформе, укључујући 1Ц:Ентерприсе Девелопмент Тоолс.

Пре свега, треба напоменути да Ецлипсе карактерише прилично јасно архитектонско слојевитост, са одвајањем функционалности независне од језика од функционалности дизајниране да подрже специфичне програмске језике, и одвајањем „језгра“ независних од корисничког интерфејса компоненти од повезаних компоненти. са подржаним корисничким интерфејсом.

Дакле, Ецлипсе платформа дефинише заједничку инфраструктуру независну од језика, а Јава развојни алати додају Јава ИДЕ са пуном могућностима у Ецлипсе. И Ецлипсе платформа и ЈДТ се састоје од неколико компоненти, од којих свака припада „језгру“ независном од корисничког интерфејса или слоју корисничког интерфејса (слика 1).

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 1. Ецлипсе платформа и ЈДТ

Хајде да наведемо главне компоненте Ецлипсе платформе:

  • Рунтиме — Дефинише инфраструктуру додатака. Ецлипсе карактерише модуларна архитектура. У суштини, Ецлипсе је колекција „тачака проширења“ и „проширења“.
  • Радни простор — Управља једним или више пројеката. Пројекат се састоји од фасцикли и датотека које су мапиране директно у систем датотека.
  • Стандардни комплет алата за виџете (СВТ) - Обезбеђује основне елементе корисничког интерфејса интегрисане са оперативним системом.
  • ЈФаце — Пружа низ УИ оквира изграђених на врху СВТ-а.
  • радна тезга — Дефинише Ецлипсе УИ парадигму: уредници, погледи, перспективе.

Мора се рећи да Ецлипсе платформа такође пружа многе друге корисне компоненте за изградњу интегрисаних развојних алата, укључујући отклањање грешака, упоређивање, претрагу и тим. Посебно треба поменути ЈФаце Тект – основу за изградњу „паметних уређивача“ изворног кода. Нажалост, чак ни површно испитивање ових компоненти, као и компоненти слоја корисничког интерфејса, није могуће у оквиру овог чланка, тако да ћемо се у остатку овог одељка ограничити на преглед главних „језгрових“ компоненти Ецлипсе платформа и ЈДТ.

Цоре Рунтиме

Инфраструктура додатака Ецлипсе је заснована на ОСГи а предвиђена пројектом Ецлипсе Екуинок. Сваки Ецлипсе додатак је ОСГи пакет. ОСГи спецификација дефинише, посебно, механизме за управљање верзијама и решавање зависности. Поред ових стандардних механизама, Екуинок уводи концепт тачке проширења. Сваки додатак може да дефинише сопствене тачке проширења, као и да уведе додатну функционалност („проширења“) у систем користећи тачке проширења дефинисане истим или другим додацима. Сваки детаљан опис механизама ОСГи и Екуинок је ван оквира овог чланка. Приметимо само да је модуларизација у Ецлипсе-у потпуна (било који подсистем, укључујући Рунтиме, састоји се од једног или више додатака), а скоро све у Ецлипсе-у је проширење. Штавише, ови принципи су били уграђени у Ецлипсе архитектуру много пре увођења ОСГи-а (у то време су користили сопствену технологију, много сличну ОСГи-у).

Цоре Воркспаце

Скоро свако интегрисано развојно окружење изграђено на Ецлипсе платформи ради са Ецлипсе радним простором. То је радни простор који обично садржи изворни код апликације развијене у ИДЕ-у. Радни простор се мапира директно у систем датотека и састоји се од пројеката, који садрже фасцикле и датотеке. Ови пројекти, фасцикле и датотеке се зову ресурси радни простор. Имплементација радног простора у Ецлипсе-у служи као кеш у односу на систем датотека, што омогућава значајно убрзање обиласка стабла ресурса. Поред тога, радни простор пружа низ додатних услуга, укључујући механизам обавештавања за промене ресурса и инкрементална грађевинска инфраструктура.

Компонента Основни ресурси (орг.ецлипсе.цоре.ресоурцес додатак) је одговорна за подршку радног простора и његових ресурса. Конкретно, ова компонента омогућава програмски приступ радном простору у обрасцу модели ресурса. Да би ефикасно радили са овим моделом, клијентима је потребан једноставан начин да представе везу до ресурса. У овом случају, било би пожељно сакрити објекат који директно чува стање ресурса у моделу од приступа клијента. У супротном, у случају, на пример, брисања датотеке, клијент би могао да настави да држи објекат који више није у моделу, са насталим проблемима. Ецлипсе решава овај проблем користећи нешто што се зове руковати ресурс. Хандле се понаша као кључ (зна само путању до ресурса у радном простору) и потпуно контролише приступ унутрашњем објекту модела, који директно чува информације о стању ресурса. Овај дизајн је варијација узорка Дршка/тело.

Пиринач. Слика 2 илуструје идиом Хандле/Боди примењен на модел ресурса. Интерфејс ИРесоурце представља рукохват ресурса и представља АПИ, за разлику од класе Ресоурце, која имплементира овај интерфејс, и класе РесоурцеИнфо, која представља тело, који нису АПИ-ји. Наглашавамо да ручка зна само путању до ресурса у односу на корен радног простора и не садржи везу до информација о ресурсу. Подаци о ресурсима формирају такозвано „стабло елемената“. Ова структура података је у потпуности материјализована у меморији. Да би се пронашла инстанца информација о ресурсу која одговара рукохвату, стабло елемената се прелази у складу са путањом ускладиштеном у том ручку.

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 2. ИРесоурце и РесоурцеИнфо

Као што ћемо касније видети, основни дизајн модела ресурса (могли бисмо га назвати заснован на ручки) се користи у Ецлипсе-у и за друге моделе. За сада, хајде да наведемо неке од карактеристичних особина овог дизајна:

  • Хандле је објекат вредности. Објекти вредности су непроменљиви објекти чија једнакост није заснована на идентитету. Такви објекти се могу безбедно користити као кључ у хешираним контејнерима. Више инстанци ручке може референцирати исти ресурс. Да бисте их упоредили, морате користити методу екуалс(Објецт).
  • Хандле дефинише понашање ресурса, али не садржи информације о стању ресурса (једини подаци које чува је „кључ“, путања до ресурса).
  • Хандле се може односити на ресурс који не постоји (или ресурс који још није креиран, или ресурс који је већ обрисан). Постојање ресурса се може проверити коришћењем методе ИРесоурце.екистс().
  • Неке операције се могу имплементирати искључиво на основу информација које се чувају у самој ручки (тзв. операције само за руковање). Примери су ИРесоурце.гетПарент(), гетФуллПатх() итд. Ресурс не мора да постоји да би таква операција успела. Операције које захтевају постојање ресурса да би успеле изазивају ЦореЕкцептион ако ресурс не постоји.

Ецлипсе пружа ефикасан механизам за обавештавање о променама ресурса радног простора (слика 3). Ресурси се могу променити или као резултат радњи које се обављају унутар самог Ецлипсе ИДЕ-а или као резултат синхронизације са системом датотека. У оба случаја, клијенти који се претплате на обавештења добијају детаљне информације о променама у облику „делта ресурса“. Делта описује промене између два стања (под)стабла ресурса радног простора и сама је стабло, чији сваки чвор описује промену ресурса и садржи листу делта на следећем нивоу које описују промене подређених ресурса.

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 3. ИРесоурцеЦхангеЕвент и ИРесоурцеДелта

Механизам обавештавања заснован на делтама ресурса има следеће карактеристике:

  • Једна промена и многе промене су описане користећи исту структуру, пошто је делта изграђена по принципу рекурзивне композиције. Претплатнички клијенти могу да обрађују обавештења о промени ресурса користећи рекурзивно спуштање делта стабла.
  • Делта садржи потпуне информације о променама на ресурсу, укључујући његово кретање и/или промене у „маркерима“ повезаним са њим (на пример, грешке компилације су представљене као маркери).
  • Пошто се референце ресурса праве преко ручке, делта може природно референцирати удаљени ресурс.

Као што ћемо ускоро видети, главне компоненте дизајна механизма обавештења о промени модела ресурса су такође релевантне за друге моделе засноване на ручкама.

ЈДТ Цоре

Модел ресурса радног простора Ецлипсе је основни модел који не зависи од језика. Компонента ЈДТ Цоре (додатак орг.ецлипсе.јдт.цоре) обезбеђује АПИ за навигацију и анализу структуре радног простора из Јава перспективе, такозвани „Јава модел“ (Јава модел). Овај АПИ је дефинисан у смислу Јава елемената, за разлику од основног АПИ модела ресурса, који је дефинисан у смислу фасцикли и датотека. Главни интерфејси стабла Јава елемената приказани су на Сл. 4.

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 4. Елементи Јава модела

Јава модел користи исти идиом ручке/тела као и модел ресурса (слика 5). ИЈаваЕлемент је ручка, а ЈаваЕлементИнфо игра улогу тела. Интерфејс ИЈаваЕлемент дефинише протокол заједнички за све Јава елементе. Неке од његових метода су само за руковање: гетЕлементНаме(), гетПарент(), итд. Објекат ЈаваЕлементИнфо чува стање одговарајућег елемента: његову структуру и атрибуте.

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 5. ИЈаваЕлемент и ЈаваЕлементИнфо

Јава модел има неке разлике у имплементацији основног дизајна ручке/тела у поређењу са моделом ресурса. Као што је горе наведено, у моделу ресурса, стабло елемената, чији су чворови објекти са информацијама о ресурсу, у потпуности је садржано у меморији. Али Јава модел може имати знатно већи број елемената од стабла ресурса, јер такође представља унутрашњу структуру .јава и .цласс датотека: типове, поља и методе.

Да би се избегла потпуна материјализација целог стабла елемената у меморији, имплементација Јава модела користи ограничену величину ЛРУ кеш информација о елементима, где је кључ хандле ИЈаваЕлемент. информациони објекти елемента се креирају на захтев док се креће по стаблу елемената. У овом случају, ставке које се најмање често користе се избацују из кеша, а потрошња меморије модела остаје ограничена на наведену величину кеша. Ово је још једна предност дизајна заснованог на ручки, који у потпуности сакрива такве детаље имплементације од клијентског кода.

Механизам за обавештавање о променама Јава елемената је генерално сличан механизму за праћење промена у ресурсима радног простора о коме се говорило горе. Клијент који жели да прати промене у Јава моделу пријављује се на обавештења, која су представљена као ЕлементЦхангедЕвент објекат који садржи ИЈаваЕлементДелта (слика 6).

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 6. ЕлементЦхангедЕвент и ИЈаваЕлементДелта

Јава модел не садржи информације о телима метода или резолуцији имена, тако да за детаљну анализу кода написаног у Јави, ЈДТ Цоре обезбеђује додатни модел (не заснован на руци): апстрактно синтаксно дрво (стабло апстрактне синтаксе, АСТ). АСТ представља резултат рашчлањивања изворног текста. АСТ чворови одговарају елементима структуре изворног модула (декларације, оператори, изрази итд.) и садрже информације о координатама одговарајућег елемента у изворном тексту, као и (као опцију) информације о резолуцији имена у облик линкова на тзв биндингс. Везивања су објекти који представљају именоване ентитете, као што су типови, методе и променљиве, познати компајлеру. За разлику од АСТ чворова, који формирају стабло, везивања подржавају унакрсно упућивање и генерално формирају граф. Апстрактна класа АСТНоде је заједничка основна класа за све АСТ чворове. Подкласе АСТНоде одговарају специфичним синтаксичким конструкцијама Јава језика.

Пошто стабла синтаксе могу заузети значајну количину меморије, ЈДТ кешира само један АСТ за активни уређивач. За разлику од Јава модела, АСТ се обично посматра као „средњи“, „привремени“ модел, на чије елементе клијенти не би требало да држе референце ван контекста операције која је довела до стварања АСТ-а.

Наведена три модела (Јава модел, АСТ, везе) заједно чине основу за изградњу „интелигентних развојних алата“ у ЈДТ-у, укључујући моћни Јава едитор са разним „помоћницима“, разним радњама за обраду изворног кода (укључујући организовање листе увоза). имена и форматирање према прилагођеном стилу), алати за претрагу и рефакторисање. У овом случају, Јава модел игра посебну улогу, јер се управо он користи као основа за визуелни приказ структуре апликације која се развија (на пример, у Пацкаге Екплорер, Оутлине, Сеарцх, Цалл Хиерарцхи и Хијерархија типа).

Компоненте Ецлипсе које се користе у алатима за развој 1Ц:Ентерприсе Девелопментс

На сл. На слици 7 приказане су компоненте Ецлипсе које чине основу технолошке платформе за 1Ц:Ентерприсе Девелопмент Тоолс.

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 7. Ецлипсе као платформа за развојне алате 1Ц:Ентерприсе

Ецлипсе Платформ обезбеђује основну инфраструктуру. Погледали смо неке аспекте ове инфраструктуре у претходном одељку.

Ецлипсе Моделинг Фрамеворк (ЕМС) пружа општа средства за моделирање структурираних података. ЕМФ је интегрисан са Ецлипсе платформом, али се такође може користити засебно у редовним Јава апликацијама. Често су нови програмери Ецлипсе-а већ добро упознати са ЕМФ-ом, иако још увек не разумеју у потпуности замршености Ецлипсе платформе. Један од разлога за тако заслужену популарност је универзални дизајн, који укључује, између осталог, јединствени АПИ мета нивоа, који вам омогућава да радите са било којим ЕМФ моделом на општи начин. Основне имплементације за објекте модела које обезбеђује ЕМФ и подсистем за генерисање кода модела на основу мета-модела значајно повећавају брзину развоја и смањују број грешака. ЕМФ такође садржи механизме за серијализацију модела, праћење промена модела и још много тога.

Као и сваки алат истински опште намене, ЕМФ је погодан за решавање широког спектра проблема моделирања, али неке класе модела (на пример, модели засновани на ручки о којима је било речи горе) могу захтевати специјализованије алате за моделирање. Причати о ЕМФ-у је незахвалан задатак, посебно у ограниченим оквирима једног чланка, пошто је ово тема посебне књиге, и то прилично дебеле. Напоменимо само да је висококвалитетан систем генерализација на којем се темељи ЕМФ омогућио рађање читавог низа пројеката посвећених моделирању, који су укључени у пројекат највишег нивоа. Ецлипсе Моделинг заједно са самим ЕМФ. Један такав пројекат је Ецлипсе Кстект.

Ецлипсе Кстект обезбеђује инфраструктуру за „моделирање текста“. Кстект користи АНТЛР за рашчлањивање изворног текста и ЕМФ-а за представљање резултујућег АСГ-а (апстрактног семантичког графа, који је у суштини комбинација АСТ-а и повезивања), који се такође назива „семантички модел“. Граматика језика који је моделовао Кстект је описана на сопственом језику Кстект-а. Ово вам омогућава не само да генеришете граматички опис за АНТЛР, већ и да добијете механизам АСТ серијализације (тј. Кстект обезбеђује и парсер и унпарсер), наговештај контекста и низ других компоненти језика. С друге стране, граматички језик који се користи у Кстекту је мање флексибилан од, рецимо, граматичког језика који се користи у АНТЛР-у. Стога је понекад потребно „савијати“ имплементирани језик у Кстект, што обично није проблем ако говоримо о језику који се развија од нуле, али може бити неприхватљиво за језике са већ успостављеном синтаксом. Упркос томе, Кстект је тренутно најзрелији, најбогатији и најсвестранији алат у Ецлипсе-у за прављење програмских језика и развојних алата за њих. Конкретно, то је идеалан алат за брзу израду прототипа језици специфични за домен (језик специфичан за домен, ДСЛ). Поред горе поменутог „језичког језгра“ заснованог на АНТЛР-у и ЕМФ-у, Кстект пружа многе корисне компоненте вишег нивоа, укључујући механизме индексирања, инкременталну конструкцију, „паметни уређивач“ и још много, много више, али изоставља управљање- засновани на језичким моделима. Као и ЕМФ, Кстект је тема вредна посебне књиге и тешко да сада можемо чак и укратко говорити о свим његовим могућностима.

1Ц: Алати за развој предузећа активно користе и сам ЕМФ и низ других пројеката Ецлипсе Моделинг. Конкретно, Кстект је један од темеља развојних алата за 1Ц:Ентерприсе језике као што су уграђени програмски језик и језик упита. Још једна основа за ове развојне алате је пројекат Ецлипсе Хандли, о коме ћемо детаљније говорити (од наведених компоненти Ецлипсе, он је и даље најмање познат).

Ецлипсе Хандли, потпројекат пројекта највишег нивоа Ецлипсе Тецхнологи, настао је као резултат иницијалног доприноса коду Ецлипсе фондацији од стране 1Ц 2014. године. Од тада, 1Ц је наставио да подржава развој пројекта: Хандли цоммиттерс су запослени у компанији. Пројекат је мали, али заузима прилично јединствену нишу у Ецлипсе-у: његов главни циљ је да подржи развој модела заснованих на ручкама.

Основни архитектонски принципи модела заснованих на ручки, као што је идиом ручка/тело, су разматрани изнад користећи модел ресурса и Јава модел као примере. Такође је приметио да су и модел ресурса и Јава модел важне основе за Ецлипсе Јава развојне алате (ЈДТ). А пошто скоро сви *ДТ Ецлипсе пројекти имају архитектуру сличну ЈДТ-у, не би било велико претеривање рећи да модели засновани на ручкама леже у основи многих, ако не и свих ИДЕ-ова изграђених на врху Ецлипсе платформе. На пример, Ецлипсе Ц/Ц++ развојни алат (ЦДТ) има Ц/Ц++ модел заснован на ручкама који игра исту улогу у ЦДТ архитектури као Јава модел у ЈДТ-у.

Пре Хандли-ја, Ецлипсе није нудио специјализоване библиотеке за прављење језичких модела заснованих на ручкама. Модели који тренутно постоје настали су углавном директним прилагођавањем кода Јава модела (ака цопи/пасте), у случајевима када то дозвољава Ецлипсе јавна лиценца (ЕПЛ). (Очигледно, ово обично није правно питање за, рецимо, саме пројекте Ецлипсе, али не и за производе затвореног кода.) Поред своје инхерентне насумице, ова техника уводи добро познате проблеме: дуплирање кода које уводи приликом прилагођавања грешкама, итд. Што је још горе, добијени модели остају „ствари по себи“ и не искоришћавају потенцијал за уједињење. Али изоловање заједничких концепата и протокола за језичке моделе засноване на ручкама могло би довести до стварања компоненти за вишекратну употребу за рад са њима, слично ономе што се догодило у случају ЕМФ-а.

Није да Ецлипсе није разумео ова питања. Још 2005. године Мартин Аесцхлиманн, сумирајући искуство развоја ЦДТ прототипа, аргументовано потреба за стварањем заједничке инфраструктуре за језичке моделе, укључујући моделе засноване на ручкама. Али, као што се често дешава, због приоритетних задатака, имплементација ових идеја никада није стигла. У међувремену, факторизација *ДТ кода је још увек једна од недовољно развијених тема у Ецлипсе-у.

У извесном смислу, пројекат Хандли је дизајниран да решава приближно исте проблеме као ЕМФ, али за моделе засноване на ручкама, и то првенствено језичке (тј. који представљају елементе структуре неког програмског језика). Главни циљеви постављени приликом дизајнирања Хандли-а су наведени у наставку:

  • Идентификација главних апстракција предметне области.
  • Смањење напора и побољшање квалитета имплементације језичких модела заснованих на ручкама кроз поновну употребу кода.
  • Обезбеђивање обједињеног АПИ мета нивоа за резултирајуће моделе, омогућавајући креирање заједничких ИДЕ компоненти које раде са моделима заснованим на језичким ручкама.
  • Флексибилност и скалабилност.
  • Интеграција са Кстектом (у посебном слоју).

Да би се истакли заједнички концепти и протоколи, анализиране су постојеће имплементације модела заснованих на језичким ручкама. Главни интерфејси и основне имплементације које пружа Хандли приказани су на Сл. 8.

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 8. Уобичајени интерфејси и основне имплементације Хандли елемената

Интерфејс ИЕлемент представља рукохват елемента и заједнички је елементима свих модела заснованих на руци. Апстрактна класа Елемент имплементира генерализовани механизам дршка/тело (слика 9).

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 9. Имплементација ИЕлемента и генеричке ручке/тела

Поред тога, Хандли обезбеђује генерализовани механизам за обавештавање о променама у елементима модела (слика 10). Као што видите, у великој мери је сличан механизмима обавештења који су имплементирани у моделу ресурса и Јава моделу, и користи ИЕлементДелта да обезбеди обједињени приказ информација о промени елемента.

Ецлипсе као технолошка платформа за развојне алате 1Ц:Ентерприсе
Пиринач. 10. Општи интерфејси и основне имплементације Хандли механизма обавештења

Део Хандли-а који је горе размотрен (сл. 9 и 10) може се користити за представљање скоро свих модела заснованих на ручкама. За стварање лингвистички модела, пројекат нуди додатну функционалност – посебно заједничке интерфејсе и основне имплементације за елементе структуре изворног текста, тзв. изворни елементи (слика 8). Интерфејс ИСоурцеФиле представља изворну датотеку, а ИСоурцеЦонструцт представља елемент унутар изворне датотеке. Апстрактне класе СоурцеФиле и СоурцеЦонструцт имплементирају генерализоване механизме за подршку рада са изворним датотекама и њиховим елементима, на пример, рад са текстуалним баферима, везивање за координате елемента у изворном тексту, усклађивање модела са тренутним садржајем бафера радне копије , итд. Имплементација ових механизама је обично прилично изазов, а Хандли може значајно смањити напоре у развоју језичких модела заснованих на ручкама тако што ће обезбедити висококвалитетне основне имплементације.

Поред основних механизама наведених изнад, Хандли обезбеђује инфраструктуру за текстуалне бафере и снимке, подршку за интеграцију са уређивачима изворног кода (укључујући интеграцију ван кутије са Кстект едитором), као и неке уобичајене компоненте корисничког интерфејса које рад са уређивачима изворног кода Хандли моделима као што је оквирни оквир. Да би илустровао своје могућности, пројекат пружа неколико примера, укључујући имплементацију Јава модела у Хандли. (У поређењу са потпуном имплементацијом Јава модела у ЈДТ, овај модел је намерно донекле поједностављен ради веће јасноће.)

Као што је раније наведено, главни фокус током Хандлијевог почетног дизајна и каснијег развоја био је и наставља бити на скалабилности и флексибилности.

У принципу, модели засновани на ручкама су прилично добро скалирани „по дизајну“. На пример, идиом ручке/тела вам омогућава да ограничите количину меморије коју модел троши. Али постоје и нијансе. Тако је приликом тестирања Хандли-ја на скалабилност откривен проблем у имплементацији механизма обавештења – када је промењен велики број елемената, конструисање делта је одузимало превише времена. Испоставило се да је исти проблем присутан и у ЈДТ Јава моделу, из којег је некада адаптиран одговарајући код. Исправили смо грешку у Хандли-у и припремили сличну закрпу за ЈДТ, која је са захвалношћу примљена. Ово је само један пример где би увођење Хандли-ја у постојеће имплементације модела могло бити потенцијално корисно, јер би у овом случају таква грешка могла бити исправљена на само једном месту.

Да би имплементација Хандли-а у постојеће имплементације модела била технички изводљива, библиотека мора имати значајну флексибилност. Главни проблем је одржавање компатибилности уназад преко АПИ модела. Овај проблем је решен у Хандли 0.5 јасним одвајањем АПИ-ја специфичног за модел, дефинисаног и потпуно контролисаног од стране програмера, од обједињеног АПИ-ја мета нивоа који обезбеђује библиотека. Ово не само да чини технички могућим да се Хандли имплементира у постојеће имплементације, већ и даје програмеру новог модела значајну слободу при дизајнирању АПИ-ја.

Флексибилност има и друге аспекте. На пример, Хандли не намеће скоро никаква ограничења на структуру модела и може се користити за моделовање језика опште намене и језика специфичних за домен. Када конструише структуру изворне датотеке, Хандли не прописује никакав посебан облик АСТ репрезентације и, у принципу, не захтева чак ни присуство самог АСТ-а, чиме се обезбеђује компатибилност са скоро свим механизмом рашчлањивања. Коначно, Хандли подржава потпуну интеграцију са Ецлипсе радним простором, али такође може да ради директно са системима датотека захваљујући интеграцији са Ецлипсе систем датотека (ЕФС).

Тренутна верзија Хандли 0.6 изашао је у децембру 2016. Упркос чињеници да је пројекат тренутно у стању инкубације и да АПИ још увек није коначно поправљен, Хандли се већ користи у два велика комерцијална производа који су ризиковали да делују као „рани корисници“, и, морам да кажем, немојте се још кајати.

Као што је горе наведено, један од ових производа су 1Ц:Ентерприсе Девелопмент Тоолс, где се Хандли користи од самог почетка за моделирање елемената структуре високог нивоа таквих 1Ц:Ентерприсе језика као што су уграђени програмски језик и језик упита. . Још један производ је мање познат широј јавности. Ово Цодасип Студио, интегрисано дизајнерско окружење за процесор скупа инструкција специфичан за апликацију (АСИП), који се користи како у самој чешкој компанији Цодасип тако и од стране њених клијената, укључујући Интел, АВГ, Мобилеие, Сигма Десигнс. Цодасип користи Хандли у производњи од 2015. године, почевши од верзије Хандли 0.2. Најновије издање Цодасип Студио-а користи верзију 0.5, објављену у јуну 2016. Ондреј Илчик, који води развој ИДЕ-а у Цодасипу, у контакту је са пројектом, пружајући виталне повратне информације у име „треће стране усвојиоца“. Чак је могао да нађе мало слободног времена да директно учествује у развоју пројекта, имплементирајући слој корисничког интерфејса (~4000 линија кода) за један од примера Хандли, Јава модел. Детаљније информације из прве руке о коришћењу Хандли-а од стране усвојитеља могу се наћи на страници Успешна прича пројекат.

Надамо се да ће након издавања верзије 1.0 са гаранцијом стабилности АПИ-ја и изласка пројекта из стања инкубације, Хандли имати нове усвојитеље. У међувремену, пројекат наставља да тестира и даље унапређује АПИ, објављујући два „главна“ издања годишње – у јуну (исти датум као и истовремено издање Ецлипсе) и у децембру, пружајући предвидљив распоред на који се корисници могу ослонити. Такође можемо додати да „стопа грешака“ пројекта остаје на константно ниском нивоу и Хандли поуздано ради у производима раних корисника још од првих верзија. Да бисте даље истражили Ецлипсе Хандли, можете користити Упутство за почетак и Архитектонски преглед.

Извор: ввв.хабр.цом

Додај коментар