Обласно-специфичан језик

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу

Обласно-специфичан језик (ОСЈ) је рачунарски језик специјализован за одређену област примене. Ово је у супротности са језиком опште намене (ОНЈ), који се широко примењује на различитим областима, и недостају му специјализоване функције за одређену област. Постоји широк избор ОСЈа, почев од широко коришћених језика заједничких области, као што су HTML за веб странице, до језика који су се користли само од стране једаног или неколико делова софтвера, као што су Емакс Лисп за ГНУ Емакс и ИXЕмакс. ДСЛови може бити даље деле подподељени према врсти језика и укључују обласно специфичне језике за обележаваље, обласно специфичне језике моделовања (уопштеније, спецификациске језике), и облсно-специфичне програмске језике. Наменски рачунарски језици су увек постојали у рачунарском добу, али термин "обласно-специфичан језик" је постао више популаран због пораста областно-специфичног моделовања. Једноставнији ОСЈци, посебно они који се користе од стране једне апликације, неформално се понекад називају мини језицима.

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

Употреба[уреди]

Дизајн и употреба одговарајућих ОСЈа је кључни део обласног инжењеринга, користећи језик који одговара области при руци - ово се може састојати од коришћења постојећих ОСЈ или НЈ, или развоја новог OSJ. Језиčko-оријентисано програмирање сматра да је стварање специјално-наменског језика за изражавање проблема стандардни део процеса решавања проблема. Креирање обласно-специфичног језика (са софтвером да га подржава), у односу на поновно коришћење постојећег језика, може бити корисно ако језик дозвољава да се одређена врста проблема или решења изрази јасније него што би постојећи језик дозволо и да се тип проблема, који је у питању, поново појављује довољно често. Прагматично, ОСЈ може бити специјализован за одређену област проблема, посебану технику репрезентације проблема, одређену технику решења, или други аспект области.

Преглед[уреди]

Обласно-специфичан језик је посебно створен за решавање проблема у одређеној области и није намењен да буде у стању да реши проблеме изван ње (мада то може да буде технички могуће). Насупрот томе, опште-наменски језици су створени да реше проблеме у многим областима. Домен може бити пословни простор. Неки примери пословних простора обухватају:

  • обласно-специфични језик за полисе животног осигурања развијених интерно у великим осигуравајућим предузећима
  • обласно-специфични језик за симулације борби
  • обласно-специфични језик за обрачун плате
  • обласно-специфични језик за наплату

Обласно-специфичан језик је негде између малог програмског језика и скриптног језика, и често се користи на начин аналогно библиотеци програмирања. Границе између ових појмова су прилично мутне, слично као границе између скриптних језика и језика опште намене.

У дизајну и имплементацији[уреди]

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

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

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

Програмски алати[уреди]

Неки обласни-специфични језици су се проширили током времена да укључују комплетне програмске алате, што додатно компликује питање да ли је језик обласно-специфичан или не. Добар пример је функционални језик XSLT, специјално дизајниран за претварање једног XML графика у други, који је повећан од његовог оснивања да дозволи (посебно у верзији 2.0) за различите облике фајлсистем интеракције, манипулацију низовима и датумом, а куцање података.

У моделима-вођеном инжењерству многи примери обласно-специфичнх језика могу се наћи као ОКЈ, језик за украшавање модела са тврдњама или КУВТ, обласно-специфичан језик трансформације. Међутим језици као што су УМЛ су обично језици опште намене моделирања.

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

Теме обласно-специфичног језика[уреди]

Модели коришћења[уреди]

Постоји неколико начина употребе обласно-специфичних језика:[1][2]

  • обрада са самосталним алатима, позваним преко директне операције корисника, често на командној линији или са Мејкфајла (нпр греп за регуларно подударање израза , сед, лекс, јац, скуп алата Графуиз, итд)
  • обласно-специфични језици који се реализују коришћењем макроа система програмског језика, а које се претварају или проширују у опште наменском језику у времену компилирања или читање
  • Уграђени (или интерни) обласно-специфични језици, реализовани као библиотеке које експлоатишу синтаксу свог језика домаћина опште намене или подскупе истих, додајући обласно-специфичне елементе језика (типови података, рутине, методе, макрое итд). (нпр Уграђени SQL, LINQ)
  • обласно-специфични језици који се позивају (у току рада) из програма писаних на језицима опште намене као што су C или Перл, да обављју одређену функцију, често враћају резултате пословања у "домаћина" програмског језика за даљу обраду; генерално, интерпретатор или виртуелна машина за обласно-специфичан језик је уграђена у апликацију домаћина (нпр форматиране ниске, регуларна излазна машина)
  • обласно-специфични језици који су уграђени у корисничке апликације (на пример, макро језици са табелама) и који се (1) користе за извршавање кода који је написан од стране корисника апликације, (2) динамички генеришу од стране апликације, или (3) обоје.

Многи обласно-специфични језици се могу користити на више начина. ОСЈ код уграђен у језик домаћина може имати посебну синтаксну подршку, као што су регуларни изрази у сед, АВК, Перл или ЈаваСкрипт, или могу да прођу као ниске.

Дизајн циљеви[уреди]

Усвајање обласно-специфичног језичког приступа за софтверско инжењерство укључује и ризике и могућности. Добро дизајниран обласно-специфичан језик успева да пронађе одговарајућу равнотежу између њих.

Обласно-специфични језици имају важне циљеве дизајна који контрирају онима опште наменских језика:

  • обласно-специфични језици су мање свеобухватни.
  • обласно-специфични језици су много израженији у својој области.
  • обласно-специфични језици треба испољавају минимална сувишност према следећој субјективној дефиницији.

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

Идиоми[уреди]

У програмирању, идиоми су методе наметнуте од стране програмера да рукују заједничким развојним задацима, нпр:

  • Обезбеђују да се подаци чувају пре него што је прозор затворен.
  • Пре извођења скупих тестова, обављају јефтине тестове који могу искључити потребу за скупим тестовима.
  • Уређују код кад год се командне линије параметара промене, јер оне утичу на понашање програма.

опште наменски програмски језици ретко подржавају такве идиома, али обласно-специфични језици могу да их описују, нпр:

  • Скрипта може аутоматски сачувати податке.
  • Паметно упрегнуће теста може научити шта су добри тестови.
  • обласно-специфични језик може да параметерише улаз командне линије.

Примери[уреди]

Примери обласно-специфичних језика укључују HTML, Лого за цртање попут оловком, Верилог и ВХДЛ језици описа хардвера, МАТЛАБ и ГНУ Октава за програмирање матрице, Математика, Мајпл и Максим за симболичку математикуСпецификациски и описни језик за реактивне и дистрибуиране системе, табеларне формуле и макрое, SQL за испитивања релационе базе података, Yacc граматика за креирање парсера, регуларни израз за прецизирање лексичке анализе, Генерични Еклипс Моделинг Систем за креирање језика диаграмирања, Цсаунд за звук и музичку синтезу, и језик уноса Графуиз и ГрГен, софтверски пакети који се користе за распоред графикона и преписивање графикона.

Језик стварања игара[уреди]

ГМЛ скритни језик користи ГејмМејкер: Студио је  обласно специфичан језик усмерен на програмере почетнике како би лако могли да науче програмирање. Док језик служи као спој више језика, укључујући ДелфиC++, и Бејсик, постоји недостатак објеката, типове података, и других карактеристика пуноправног програмског језика. Многи од уграђених функција се сандбоксирају ради лакше преносивости. Језик првенствено служи да би га свако лако научио и направио игру.

Јуникс скипте омотача[уреди]

Јуникс скрипте омотача дају добар пример како обласно специфичан језик ради за организацију података. Они могу да манипулишу подацима у фајловима или корисничким улазима на много различитих начина. Обласне апстракције и ознаке обухватају токове (као што су стдин и стдаут) и операција на токовима (као што су преусмеравање и цеви). Ове апстракције комбинују да се направи снажан језик који це да се бави током и организациом података.

Језик се састоји од једноставног интерфејса (скрипте) за рад и контролу процеса који обављају мале задатке. Ови задаци представљају идиоме организовања података у жељеном формату, табеле, графикони, слике и сл

Ови задаци се састоје од једноставних механизама контроле токова и манипулације нискама који покривају доста заједничких употреба, као што су претраживање и замена ниски у фајловима, или бројање појављивања ниски (фреквенционо бројање).

Иако су Јуникс скриптинг језици Тјуринг потпуни, они се разликују од језика опште намене.

У пракси, скриптни језици се користе за ткање заједничких малих Јуникс алата као што су АВК (нпр ГАВК), Лс сорт or Вц.

Колдфјужон Маржа језик[уреди]

Кодфјужон повезани скриптни језик је још један пример обласно специфичног језика за подацима вођене сајтове. Овај скриптни језик се користи заједно оплету језици и услуге као што су Јава, . НЕТ, C ++, СМС, имеил, имејл сервери, џттп, фтп, размене, именичке услуге, и фајл системи за употребу на веб страницама.

Колдфјужон Маржа језик (КФМЈ) обухвата скуп ознака које се могу користити у Колдфјужон странама да комуницира са изворима података, манипулише подацима и прикажете излаз. КФМЈ означена синтакса је слична HTML елементарној синтакси.

Ерланг ОТП[уреди]

Ерланг Отворена Телеком Платформа је првобитно дизајнирана за употребу унутар Ериксона као обласно*специфичаног језика. Сам језик нуди платформу библиотека за креирање коначних стања машина, генерички сервери и менаџерима случаја који омогућавају инжењеру да брзо развија апликације или подржава библиотеке, које су приказане у индустријској одредници да надмашују друге језике намењене мешовитим сетовима домена , као што су C и C ++. Језик је сада званично отвореног порекла и може се преузети са њиховог сајта.

ФилтерМајстер[уреди]

ФилтерМајстер је програмско окружење, са програмским језику ом који се заснива на C, за одређену сврху стварања Фотошоп-компатибилне филтерне додатке за обраду слике; ФилтерМајстер ради као Фотошоп додатак себи и може учитати и извршавати скрипте, или саставити и изводити их као независне додатаке. Иако ФилтерМајстер језик репродукује значајан део C језика и функције библиотека, он садржи само оне карактеристике које могу бити коришћене у контексту Фотошоп додатака и додаје бројне специфичности корисних само у овој конкретној области.

МедијаВики шаблони[уреди]

Функција Шаблона Медијавики је уграђени обласно-специфични језик чија је основна сврха да подрже стварање стварање шаблона и укључивање страница(укључивање позивањем) од МедијаВики страница у друге МедијаВики странице.

Детаљан опис тог обласно-специфичног језика може се наћи на одговарајућем чланаку на Wikimedia Foundation's Meta-Wiki.

Софтверско инжењерска примена[уреди]

Било је велико интересовање у обласно специфичне језике за побољшање продуктивности и квалитета софтверског инжењеринга. Обласно-пецифичан језик могао да обезбеди снажан сет алата за ефикасно софтверско инжењерствао. Такви инструменти почињу да праве свој пут у развоју критичних софтверских система.

Софтвер за смањење трошкова алата[3] је пример овога. Приручник је пакет услужних програма, укључујући спецификацијски едитор за креирање спецификацију захтева, и графички прегледач зависности да прикаже променљивост зависности, контролор доследности да ухвати нестале ствари у Добро формирана формула у спецификацији, контролор модела и доказивач теорема да провери својства програма у односу на спецификацију, и инвариантни генератор који аутоматски конструише инварианте на основу захтева.

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

Метакомпилатори[уреди]

Као допуна језичко-оријентисаном програмирању, као и свим другим облицима обласно-специфичних језика, метакомпилатори су класа за писање преводилачких алата. Метакомпилатор није само користан за генерисање парсера и генератора  кода за обласно-специфичне језике, али метакомпилатор сам по себи саставља обласно-специфични метајезик посебно дизајниран за области метапрограмирања.

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

Метакомпилатори који су играли значајну улогу у рачунарској науци и рачунарској индустрији укључују Мета-II[4] и његов потомак ДрвоМета.[5]

Unreal Engine before version 4 and other games[уреди]

Унриал и Унриал Турнамент представио је језик који се зове УнриалСкрипт. То је омогућило бржи развој модификације у односу на конкурентски Куеик (користећи ид тек 2 engine). Ид Тек машина користи стандардни C код значи, C се морао научити и правилно применити, док је УнриалСкрипт оптимизован за лакоћу коришћења и ефикасност. Слично томе, развој нових игара увео је своје специфичне језике, једна од чешћих примера тога је Луа за скриптовање.

Системи Правила за Политичку Аутоматизацију [уреди]

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

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

Језици статичког моделирања[уреди]

Статистички моделари су развили обласно-специфични језике као што су Багс, Јагс и Стен. Ови језици пружају синтаксу за описивање Бајесовог модела, и створити метод за његово решавање користећи симулацију.

Генерисани модел и услуге на више програмских језика[уреди]

Генерисано објектно руковање и услуге засноване на интерфејс Описном Језику за обласно-специфични језик као што је ЈаваСцрипт за веб апликације, HTML за документацију, C++ за код високих перформанси, итд. Ово се ради са укрштеним језичким оквирима као што су Апаћи Трифт или Гугл Протокол Буффери .

Други примери[уреди]

Други истакнути примери обласно-специфичних језика су:

  • Емак Лисп
  • Језик описа игара
  • OpenGL језик сенчења

Предности и мане[уреди]

Неке од предности:[1][2]

  • Обласно специфичан језик омогућава решењима да буду изражени у идиома и на нивоу апстракције области проблема. Идеја је да стручњаци области сами могу да разумеју, потврђују, мењају, а често и развијају обласно-специфични језички програм. Међутим, ово је ретко случај.[6]
  • Обласно-специфични језици дозвољавају потврду на нивоу области. Докле год су језичке конструкције безбедне свака реченица написана на њима може да се сматра сигурном.
  • Обласно-специфични језици могу помоћи да се пребаци развој пословних информационих система од традиционалних програмера у типично већу групу Обласних-стручњака који (упркос томе што имају мању техничку експертизу) имају дубље познавање области.[7]

Неке од мана:

  • Трошкови учење новог језика против своје ограниченое применљивости
  • Трошкови пројектовања, имплементације и одржавања обласно-специфичних језика, као и обавезан алат за развој са њим (ИДЕ)
  • Проналажење, постављање и одржавање одговарајућег простора.
  • Тешкоћа балансирања компромиса између обласно-специфичких и опште-наменских програмско језиких конструкција.
  • Потенцијални губитак ефикасности процесора у поређењу са ручно кодирани софтвером.
  • Ширење сличних нестандардних обласно-специфичних језика, на пример, ОСЈ корисшћен унутар једног осигуравајућег друштва у односу на ОСЈ коришћен унутар другог осигуравајућег друштва.[8]
  • Не-техничким стрчњацима области може бити тешко да напишу или промене ОСЈ програме сами.[6]
  • Повећана потешкоћа интеграције ОСЈ са другим компонентама ИТ система (у односу на интеграцију са језиком опште намене).
  • Мања залиха стручњака у одређеном ОСЈ тежи да повећа трошкове рада.
  • Теже је наћи примере кода.

Види још[уреди]

Референце[уреди]

  1. 1,0 1,1 Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ACM Computing Surveys, 37(4):316–344, 2005.doi:10.1145/1118890.1118892
  2. 2,0 2,1 Diomidis Spinellis. Notable design patterns for domain specific languages. Journal of Systems and Software, 56(1):91–99, February 2001. doi:10.1016/S0164-1212(00)00089-3
  3. ^ „{title}” (PDF). Архивирано из оригинала (PDF) на датум 19. 07. 2004. Приступљено 22. 11. 2015. 
  4. ^ Shorre, D.V., META II a syntax-oriented compiler writing language, Proceedings of the 1964 19th ACM National Conference. стр. 41301–41.3011, 1964
  5. ^ C. Stephen Carr, David A. Luther, Sherian Erdmann, 'The TREE-META Compiler-Compiler System: A Meta Compiler System for the Univac 1108 and General Electric 645', University of Utah Technical Report RADC-TR-69-83.
  6. 6,0 6,1 Freudenthal, Margus (1. 1. 2009). „Domain Specific Languages in a Customs Information System”. IEEE Software. doi:10.1109/MS.2009.152. 
  7. ^ Aram, Michael; Neumann, Gustaf (1. 7. 2015). „Multilayered analysis of co-development of business information systems” (PDF). Journal of Internet Services and Applications. 6 (1). doi:10.1186/s13174-015-0030-8. 
  8. ^ Miotto, Eric. „On the integration of domain-specific and scientific bodies of knowledge in Model Driven Engineering” (PDF). Архивирано из оригинала (PDF) на датум 24. 07. 2011. Приступљено 22. 11. 2015. 

Литература[уреди]

  • Dunlavey, "Building Better Applications: a Theory of Efficient Software Development" International Thomson Publishing ISBN 978-0-442-01740-8, 1994.
  • Constance Heitmeyer. Коришћење СЦР сета алата за Навођење Софтварских захтева. Proceedings, Second IEEE Workshop on Industrial Strength Formal Specification Techniques, Boca Raton, FL, Oct. 19, 1998.
  • Marjan Mernik, Jan Heering, and Anthony M. Sloane. Када и како развити обласно-специфичне језике. ACM Computing Surveys, 37(4):316–344, 2005. [1] doi:10.1145/1118890.1118892
  • Diomidis Spinellis. Notable design patterns for domain specific languages. Journal of Systems and Software, 56(1):91–99, February 2001. doi:10.1016/S0164-1212(00)00089-3
  • Terence Parr. The Definitive ANTLR Reference: Building Domain-Specific Languages. ISBN 978-0-9787392-5-6.
  • James Larus. Spending Moore's Dividend. ISSN:0001-0782. Communications of the ACM. Volume 52, Issue 5 (May 2009).
  • Werner Schuster (June 15, 2007). "What's a Ruby DSL and what isn't?". C4Media. Retrieved 2009-09-08.
  • Martin Fowler. Domain Specific Languages. ISBN 978-0-321-71294-3.
  • Marco Brambilla, Jordi Cabot, Manuel Wimmer, Model Driven Software Engineering in Practice, foreword by Richard Soley (OMG Chairman), Morgan & Claypool, USA, 2012, Synthesis Lectures on Software Engineering #1. 182 pages. ISBN paperback: 9781608458820, ISBN ebook: 9781608458837. http://www.mdse-book.com

Спољашње везе[уреди]

Чланци