Можда,
У овом чланку, који је прегледне природе, покушаћемо да сагледамо неке од основа Ецлипсе архитектуре као платформе за изградњу интегрисаних развојних алата и дамо почетну идеју о Ецлипсе компонентама које чине основу технологије платформа за „нови конфигуратор“ 1Ц: Ентерприсе.
Увод у Ецлипсе архитектуру
Хајде да прво погледамо неке опште аспекте Ецлипсе архитектуре користећи пример
Пре свега, треба напоменути да Ецлипсе карактерише прилично јасно архитектонско слојевитост, са одвајањем функционалности независне од језика од функционалности дизајниране да подрже специфичне програмске језике, и одвајањем „језгра“ независних од корисничког интерфејса компоненти од повезаних компоненти. са подржаним корисничким интерфејсом.
Дакле, Ецлипсе платформа дефинише заједничку инфраструктуру независну од језика, а Јава развојни алати додају Јава ИДЕ са пуном могућностима у Ецлипсе. И Ецлипсе платформа и ЈДТ се састоје од неколико компоненти, од којих свака припада „језгру“ независном од корисничког интерфејса или слоју корисничког интерфејса (слика 1).
Пиринач. 1. Ецлипсе платформа и ЈДТ
Хајде да наведемо главне компоненте Ецлипсе платформе:
- Рунтиме — Дефинише инфраструктуру додатака. Ецлипсе карактерише модуларна архитектура. У суштини, Ецлипсе је колекција „тачака проширења“ и „проширења“.
- Радни простор — Управља једним или више пројеката. Пројекат се састоји од фасцикли и датотека које су мапиране директно у систем датотека.
- Стандардни комплет алата за виџете (СВТ) - Обезбеђује основне елементе корисничког интерфејса интегрисане са оперативним системом.
- ЈФаце — Пружа низ УИ оквира изграђених на врху СВТ-а.
- радна тезга — Дефинише Ецлипсе УИ парадигму: уредници, погледи, перспективе.
Мора се рећи да Ецлипсе платформа такође пружа многе друге корисне компоненте за изградњу интегрисаних развојних алата, укључујући отклањање грешака, упоређивање, претрагу и тим. Посебно треба поменути ЈФаце Тект – основу за изградњу „паметних уређивача“ изворног кода. Нажалост, чак ни површно испитивање ових компоненти, као и компоненти слоја корисничког интерфејса, није могуће у оквиру овог чланка, тако да ћемо се у остатку овог одељка ограничити на преглед главних „језгрових“ компоненти Ецлипсе платформа и ЈДТ.
Цоре Рунтиме
Инфраструктура додатака Ецлипсе је заснована на
Цоре Воркспаце
Скоро свако интегрисано развојно окружење изграђено на Ецлипсе платформи ради са Ецлипсе радним простором. То је радни простор који обично садржи изворни код апликације развијене у ИДЕ-у. Радни простор се мапира директно у систем датотека и састоји се од пројеката, који садрже фасцикле и датотеке. Ови пројекти, фасцикле и датотеке се зову ресурси радни простор. Имплементација радног простора у Ецлипсе-у служи као кеш у односу на систем датотека, што омогућава значајно убрзање обиласка стабла ресурса. Поред тога, радни простор пружа низ додатних услуга, укључујући
Компонента Основни ресурси (орг.ецлипсе.цоре.ресоурцес додатак) је одговорна за подршку радног простора и његових ресурса. Конкретно, ова компонента омогућава програмски приступ радном простору у обрасцу модели ресурса. Да би ефикасно радили са овим моделом, клијентима је потребан једноставан начин да представе везу до ресурса. У овом случају, било би пожељно сакрити објекат који директно чува стање ресурса у моделу од приступа клијента. У супротном, у случају, на пример, брисања датотеке, клијент би могао да настави да држи објекат који више није у моделу, са насталим проблемима. Ецлипсе решава овај проблем користећи нешто што се зове руковати ресурс. Хандле се понаша као кључ (зна само путању до ресурса у радном простору) и потпуно контролише приступ унутрашњем објекту модела, који директно чува информације о стању ресурса. Овај дизајн је варијација узорка
Пиринач. Слика 2 илуструје идиом Хандле/Боди примењен на модел ресурса. Интерфејс ИРесоурце представља рукохват ресурса и представља АПИ, за разлику од класе Ресоурце, која имплементира овај интерфејс, и класе РесоурцеИнфо, која представља тело, који нису АПИ-ји. Наглашавамо да ручка зна само путању до ресурса у односу на корен радног простора и не садржи везу до информација о ресурсу. Подаци о ресурсима формирају такозвано „стабло елемената“. Ова структура података је у потпуности материјализована у меморији. Да би се пронашла инстанца информација о ресурсу која одговара рукохвату, стабло елемената се прелази у складу са путањом ускладиштеном у том ручку.
Пиринач. 2. ИРесоурце и РесоурцеИнфо
Као што ћемо касније видети, основни дизајн модела ресурса (могли бисмо га назвати заснован на ручки) се користи у Ецлипсе-у и за друге моделе. За сада, хајде да наведемо неке од карактеристичних особина овог дизајна:
- Хандле је објекат вредности. Објекти вредности су непроменљиви објекти чија једнакост није заснована на идентитету. Такви објекти се могу безбедно користити као кључ у хешираним контејнерима. Више инстанци ручке може референцирати исти ресурс. Да бисте их упоредили, морате користити методу екуалс(Објецт).
- Хандле дефинише понашање ресурса, али не садржи информације о стању ресурса (једини подаци које чува је „кључ“, путања до ресурса).
- Хандле се може односити на ресурс који не постоји (или ресурс који још није креиран, или ресурс који је већ обрисан). Постојање ресурса се може проверити коришћењем методе ИРесоурце.екистс().
- Неке операције се могу имплементирати искључиво на основу информација које се чувају у самој ручки (тзв. операције само за руковање). Примери су ИРесоурце.гетПарент(), гетФуллПатх() итд. Ресурс не мора да постоји да би таква операција успела. Операције које захтевају постојање ресурса да би успеле изазивају ЦореЕкцептион ако ресурс не постоји.
Ецлипсе пружа ефикасан механизам за обавештавање о променама ресурса радног простора (слика 3). Ресурси се могу променити или као резултат радњи које се обављају унутар самог Ецлипсе ИДЕ-а или као резултат синхронизације са системом датотека. У оба случаја, клијенти који се претплате на обавештења добијају детаљне информације о променама у облику „делта ресурса“. Делта описује промене између два стања (под)стабла ресурса радног простора и сама је стабло, чији сваки чвор описује промену ресурса и садржи листу делта на следећем нивоу које описују промене подређених ресурса.
Пиринач. 3. ИРесоурцеЦхангеЕвент и ИРесоурцеДелта
Механизам обавештавања заснован на делтама ресурса има следеће карактеристике:
- Једна промена и многе промене су описане користећи исту структуру, пошто је делта изграђена по принципу рекурзивне композиције. Претплатнички клијенти могу да обрађују обавештења о промени ресурса користећи рекурзивно спуштање делта стабла.
- Делта садржи потпуне информације о променама на ресурсу, укључујући његово кретање и/или промене у „маркерима“ повезаним са њим (на пример, грешке компилације су представљене као маркери).
- Пошто се референце ресурса праве преко ручке, делта може природно референцирати удаљени ресурс.
Као што ћемо ускоро видети, главне компоненте дизајна механизма обавештења о промени модела ресурса су такође релевантне за друге моделе засноване на ручкама.
ЈДТ Цоре
Модел ресурса радног простора Ецлипсе је основни модел који не зависи од језика. Компонента ЈДТ Цоре (додатак орг.ецлипсе.јдт.цоре) обезбеђује АПИ за навигацију и анализу структуре радног простора из Јава перспективе, такозвани „Јава модел“ (Јава модел). Овај АПИ је дефинисан у смислу Јава елемената, за разлику од основног АПИ модела ресурса, који је дефинисан у смислу фасцикли и датотека. Главни интерфејси стабла Јава елемената приказани су на Сл. 4.
Пиринач. 4. Елементи Јава модела
Јава модел користи исти идиом ручке/тела као и модел ресурса (слика 5). ИЈаваЕлемент је ручка, а ЈаваЕлементИнфо игра улогу тела. Интерфејс ИЈаваЕлемент дефинише протокол заједнички за све Јава елементе. Неке од његових метода су само за руковање: гетЕлементНаме(), гетПарент(), итд. Објекат ЈаваЕлементИнфо чува стање одговарајућег елемента: његову структуру и атрибуте.
Пиринач. 5. ИЈаваЕлемент и ЈаваЕлементИнфо
Јава модел има неке разлике у имплементацији основног дизајна ручке/тела у поређењу са моделом ресурса. Као што је горе наведено, у моделу ресурса, стабло елемената, чији су чворови објекти са информацијама о ресурсу, у потпуности је садржано у меморији. Али Јава модел може имати знатно већи број елемената од стабла ресурса, јер такође представља унутрашњу структуру .јава и .цласс датотека: типове, поља и методе.
Да би се избегла потпуна материјализација целог стабла елемената у меморији, имплементација Јава модела користи ограничену величину ЛРУ кеш информација о елементима, где је кључ хандле ИЈаваЕлемент. информациони објекти елемента се креирају на захтев док се креће по стаблу елемената. У овом случају, ставке које се најмање често користе се избацују из кеша, а потрошња меморије модела остаје ограничена на наведену величину кеша. Ово је још једна предност дизајна заснованог на ручки, који у потпуности сакрива такве детаље имплементације од клијентског кода.
Механизам за обавештавање о променама Јава елемената је генерално сличан механизму за праћење промена у ресурсима радног простора о коме се говорило горе. Клијент који жели да прати промене у Јава моделу пријављује се на обавештења, која су представљена као ЕлементЦхангедЕвент објекат који садржи ИЈаваЕлементДелта (слика 6).
Пиринач. 6. ЕлементЦхангедЕвент и ИЈаваЕлементДелта
Јава модел не садржи информације о телима метода или резолуцији имена, тако да за детаљну анализу кода написаног у Јави, ЈДТ Цоре обезбеђује додатни модел (не заснован на руци):
Пошто стабла синтаксе могу заузети значајну количину меморије, ЈДТ кешира само један АСТ за активни уређивач. За разлику од Јава модела, АСТ се обично посматра као „средњи“, „привремени“ модел, на чије елементе клијенти не би требало да држе референце ван контекста операције која је довела до стварања АСТ-а.
Наведена три модела (Јава модел, АСТ, везе) заједно чине основу за изградњу „интелигентних развојних алата“ у ЈДТ-у, укључујући моћни Јава едитор са разним „помоћницима“, разним радњама за обраду изворног кода (укључујући организовање листе увоза). имена и форматирање према прилагођеном стилу), алати за претрагу и рефакторисање. У овом случају, Јава модел игра посебну улогу, јер се управо он користи као основа за визуелни приказ структуре апликације која се развија (на пример, у Пацкаге Екплорер, Оутлине, Сеарцх, Цалл Хиерарцхи и Хијерархија типа).
Компоненте Ецлипсе које се користе у алатима за развој 1Ц:Ентерприсе Девелопментс
На сл. На слици 7 приказане су компоненте Ецлипсе које чине основу технолошке платформе за 1Ц:Ентерприсе Девелопмент Тоолс.
Пиринач. 7. Ецлипсе као платформа за развојне алате 1Ц:Ентерприсе
Ецлипсе Платформ обезбеђује основну инфраструктуру. Погледали смо неке аспекте ове инфраструктуре у претходном одељку.
Као и сваки алат истински опште намене, ЕМФ је погодан за решавање широког спектра проблема моделирања, али неке класе модела (на пример, модели засновани на ручки о којима је било речи горе) могу захтевати специјализованије алате за моделирање. Причати о ЕМФ-у је незахвалан задатак, посебно у ограниченим оквирима једног чланка, пошто је ово тема посебне књиге, и то прилично дебеле. Напоменимо само да је висококвалитетан систем генерализација на којем се темељи ЕМФ омогућио рађање читавог низа пројеката посвећених моделирању, који су укључени у пројекат највишег нивоа.
1Ц: Алати за развој предузећа активно користе и сам ЕМФ и низ других пројеката Ецлипсе Моделинг. Конкретно, Кстект је један од темеља развојних алата за 1Ц:Ентерприсе језике као што су уграђени програмски језик и језик упита. Још једна основа за ове развојне алате је пројекат Ецлипсе Хандли, о коме ћемо детаљније говорити (од наведених компоненти Ецлипсе, он је и даље најмање познат).
Основни архитектонски принципи модела заснованих на ручки, као што је идиом ручка/тело, су разматрани изнад користећи модел ресурса и Јава модел као примере. Такође је приметио да су и модел ресурса и Јава модел важне основе за Ецлипсе Јава развојне алате (ЈДТ). А пошто скоро сви *ДТ Ецлипсе пројекти имају архитектуру сличну ЈДТ-у, не би било велико претеривање рећи да модели засновани на ручкама леже у основи многих, ако не и свих ИДЕ-ова изграђених на врху Ецлипсе платформе. На пример, Ецлипсе Ц/Ц++ развојни алат (ЦДТ) има Ц/Ц++ модел заснован на ручкама који игра исту улогу у ЦДТ архитектури као Јава модел у ЈДТ-у.
Пре Хандли-ја, Ецлипсе није нудио специјализоване библиотеке за прављење језичких модела заснованих на ручкама. Модели који тренутно постоје настали су углавном директним прилагођавањем кода Јава модела (ака цопи/пасте), у случајевима када то дозвољава Ецлипсе јавна лиценца (ЕПЛ). (Очигледно, ово обично није правно питање за, рецимо, саме пројекте Ецлипсе, али не и за производе затвореног кода.) Поред своје инхерентне насумице, ова техника уводи добро познате проблеме: дуплирање кода које уводи приликом прилагођавања грешкама, итд. Што је још горе, добијени модели остају „ствари по себи“ и не искоришћавају потенцијал за уједињење. Али изоловање заједничких концепата и протокола за језичке моделе засноване на ручкама могло би довести до стварања компоненти за вишекратну употребу за рад са њима, слично ономе што се догодило у случају ЕМФ-а.
Није да Ецлипсе није разумео ова питања. Још 2005. године
У извесном смислу, пројекат Хандли је дизајниран да решава приближно исте проблеме као ЕМФ, али за моделе засноване на ручкама, и то првенствено језичке (тј. који представљају елементе структуре неког програмског језика). Главни циљеви постављени приликом дизајнирања Хандли-а су наведени у наставку:
- Идентификација главних апстракција предметне области.
- Смањење напора и побољшање квалитета имплементације језичких модела заснованих на ручкама кроз поновну употребу кода.
- Обезбеђивање обједињеног АПИ мета нивоа за резултирајуће моделе, омогућавајући креирање заједничких ИДЕ компоненти које раде са моделима заснованим на језичким ручкама.
- Флексибилност и скалабилност.
- Интеграција са Кстектом (у посебном слоју).
Да би се истакли заједнички концепти и протоколи, анализиране су постојеће имплементације модела заснованих на језичким ручкама. Главни интерфејси и основне имплементације које пружа Хандли приказани су на Сл. 8.
Пиринач. 8. Уобичајени интерфејси и основне имплементације Хандли елемената
Интерфејс ИЕлемент представља рукохват елемента и заједнички је елементима свих модела заснованих на руци. Апстрактна класа Елемент имплементира генерализовани механизам дршка/тело (слика 9).
Пиринач. 9. Имплементација ИЕлемента и генеричке ручке/тела
Поред тога, Хандли обезбеђује генерализовани механизам за обавештавање о променама у елементима модела (слика 10). Као што видите, у великој мери је сличан механизмима обавештења који су имплементирани у моделу ресурса и Јава моделу, и користи ИЕлементДелта да обезбеди обједињени приказ информација о промени елемента.
Пиринач. 10. Општи интерфејси и основне имплементације Хандли механизма обавештења
Део Хандли-а који је горе размотрен (сл. 9 и 10) може се користити за представљање скоро свих модела заснованих на ручкама. За стварање лингвистички модела, пројекат нуди додатну функционалност – посебно заједничке интерфејсе и основне имплементације за елементе структуре изворног текста, тзв. изворни елементи (слика 8). Интерфејс ИСоурцеФиле представља изворну датотеку, а ИСоурцеЦонструцт представља елемент унутар изворне датотеке. Апстрактне класе СоурцеФиле и СоурцеЦонструцт имплементирају генерализоване механизме за подршку рада са изворним датотекама и њиховим елементима, на пример, рад са текстуалним баферима, везивање за координате елемента у изворном тексту, усклађивање модела са тренутним садржајем бафера радне копије , итд. Имплементација ових механизама је обично прилично изазов, а Хандли може значајно смањити напоре у развоју језичких модела заснованих на ручкама тако што ће обезбедити висококвалитетне основне имплементације.
Поред основних механизама наведених изнад, Хандли обезбеђује инфраструктуру за текстуалне бафере и снимке, подршку за интеграцију са уређивачима изворног кода (укључујући интеграцију ван кутије са Кстект едитором), као и неке уобичајене компоненте корисничког интерфејса које рад са уређивачима изворног кода Хандли моделима као што је оквирни оквир. Да би илустровао своје могућности, пројекат пружа неколико примера, укључујући имплементацију Јава модела у Хандли. (У поређењу са потпуном имплементацијом Јава модела у ЈДТ, овај модел је намерно донекле поједностављен ради веће јасноће.)
Као што је раније наведено, главни фокус током Хандлијевог почетног дизајна и каснијег развоја био је и наставља бити на скалабилности и флексибилности.
У принципу, модели засновани на ручкама су прилично добро скалирани „по дизајну“. На пример, идиом ручке/тела вам омогућава да ограничите количину меморије коју модел троши. Али постоје и нијансе. Тако је приликом тестирања Хандли-ја на скалабилност откривен проблем у имплементацији механизма обавештења – када је промењен велики број елемената, конструисање делта је одузимало превише времена. Испоставило се да је исти проблем присутан и у ЈДТ Јава моделу, из којег је некада адаптиран одговарајући код. Исправили смо грешку у Хандли-у и припремили сличну закрпу за ЈДТ, која је са захвалношћу примљена. Ово је само један пример где би увођење Хандли-ја у постојеће имплементације модела могло бити потенцијално корисно, јер би у овом случају таква грешка могла бити исправљена на само једном месту.
Да би имплементација Хандли-а у постојеће имплементације модела била технички изводљива, библиотека мора имати значајну флексибилност. Главни проблем је одржавање компатибилности уназад преко АПИ модела. Овај проблем је решен у
Флексибилност има и друге аспекте. На пример, Хандли не намеће скоро никаква ограничења на структуру модела и може се користити за моделовање језика опште намене и језика специфичних за домен. Када конструише структуру изворне датотеке, Хандли не прописује никакав посебан облик АСТ репрезентације и, у принципу, не захтева чак ни присуство самог АСТ-а, чиме се обезбеђује компатибилност са скоро свим механизмом рашчлањивања. Коначно, Хандли подржава потпуну интеграцију са Ецлипсе радним простором, али такође може да ради директно са системима датотека захваљујући интеграцији са
Тренутна верзија
Као што је горе наведено, један од ових производа су 1Ц:Ентерприсе Девелопмент Тоолс, где се Хандли користи од самог почетка за моделирање елемената структуре високог нивоа таквих 1Ц:Ентерприсе језика као што су уграђени програмски језик и језик упита. . Још један производ је мање познат широј јавности. Ово
Надамо се да ће након издавања верзије 1.0 са гаранцијом стабилности АПИ-ја и изласка пројекта из стања инкубације, Хандли имати нове усвојитеље. У међувремену, пројекат наставља да тестира и даље унапређује АПИ, објављујући два „главна“ издања годишње – у јуну (исти датум као и истовремено издање Ецлипсе) и у децембру, пружајући предвидљив распоред на који се корисници могу ослонити. Такође можемо додати да „стопа грешака“ пројекта остаје на константно ниском нивоу и Хандли поуздано ради у производима раних корисника још од првих верзија. Да бисте даље истражили Ецлипсе Хандли, можете користити
Извор: ввв.хабр.цом