Предметно ориентиран език
Предметно ориентираният език за програмиране (ПОЕ) (на английски: Domain-specific language или DSL) е компютърен език, специализиран за конкретна област на приложение за разлика от езиците с общо предназначение, които могат да се ползват доста широко. Има голямо разнообразие от предметно ориентирани езици, вариращи от популярния HTML за уеб страници, до езици използвани само от един софтуер, като например MUSH soft code. ПОЕ могат да бъдат допълнително подразделени по вида език и включват: езици за маркиране, езици за моделиране (по-общо езици на спецификация) и специфични езици за програмиране. Компютърните езици със специално предназначение винаги са съществували още от зората на компютрите, но терминът „предметно ориентиран език“ е станал популярен поради нарастването на предметното моделиране. По-простите ПОЕ, особено тези, използвани от едно приложение, понякога неофициално се наричат миниезици.
Границата между езиците с общо предназначение и предметно ориентираните езици не е ясно изразена, тъй като езикът може да има специализирани характеристики за определена област, но да бъде приложим по-широко, както и обратното – може да има широко приложение, но да се използва за определена област. Например първоначално Perl е разработен като език за текстообработка, така, както и езикът AWK и shell скриптовете, но по-късно е станал език с общо предназначение. Обратният пример е с езика PostScript, който по принцип може да се използва за всяка задача, но на практика се използва като език за описание на страници.
Употреба
[редактиране | редактиране на кода]Проектирането и използването на подходящ предметно ориентиран език (или езици) е ключова част от разработването на съответната област (домейн). Би могло да се ползва съществуващ ПОЕ или език за обща употреба или например разработване на нов ПОЕ. Езиково-ориентираното програмиране разглежда създаването на езици със специално предназначение за описването на проблеми като стандартна част от процеса на решаване на проблемите. Създаването на специфичен за областта език (със софтуер, който да го поддържа) вместо използването на съществуващ език, би могло да бъде полезно, ако езикът позволява определен тип проблем или решение да бъде изразени по-ясно.
Преглед
[редактиране | редактиране на кода]Предметно ориентираният език е специално създаден за решаване на проблеми в определена област и не е предназначен да решава проблеми извън нея (въпреки че това може да е технически възможно). За разлика от ПОЕ, езиците с общо предназначение са създадени за решаване на проблеми в много области.
Например има езици, създадени за определен бизнес като:
- животозастрахователни полици (разработени вътрешно от големи застрахователи)
- бойни симулации
- изчисляване на заплати
- фактуриране
Предметно ориентираният език е някъде между малък език за програмиране и скриптов език и често се използва по начин, аналогичен на библиотеките за програмиране. Границите между тези понятия са доста размити, подобно на границите между скриптовите езици и езиците с общо предназначение.
Примери
[редактиране | редактиране на кода]Примерите за предметно ориентирани езици включват HTML, Logo ползван за рисуване, езици за описание на хардуер Verilog и VHDL, MATLAB и GNU Octave за матрично програмиране, Mathematica, Maple и Maxima за символна математика, езици за описание на реактивни и разпределени системи, формули и макроси за електронни таблици, SQL за заявки за релационни бази данни, YACC граматики за създаване на парсери, регулярни изрази за определяне на лексери, Generic Eclipse Modeling System за създаване на езици за диаграми, Csound за синтез на звук и музика и езиците за въвеждане на GraphViz и GrGen, софтуер пакети, използвани за оформление на графики и пренаписване на графики, език за конфигурация на Hashicorp, използван за Terraform и други инструменти на Hashicorp, Puppet също има свой собствен език за конфигурация.
Език на GameMaker
[редактиране | редактиране на кода]Скриптовият език GML, използван от GameMaker Studio, е пример за предметно ориентиран език, насочен към начинаещи програмисти, с цел по-лесно научаване основите на програмирането. Езикът е по-скоро смесица от множество езици (включително Delphi, C++ и BASIC), но липсват структури, типове данни и други характеристики на пълноценните езици за програмиране. Много от вградените функции са затворени с цел по-лесна преносимост. Езикът основно служи за улесняване на потребителите в разработването на собствени игри.
Език за маркиране ColdFusion
[редактиране | редактиране на кода]Скриптовия език на ColdFusion е друг пример за специфичен език, предназначен за уебсайтове управлявани от данни. Този скриптов език се използва за обединяване на езици и услуги като Java, .NET, C++, SMS, електронни пощи и техните сървъри, http, ftp и други услуги и файлови системи, които се ползват в уебсайтовете.
Шаблони на MediaWiki
[редактиране | редактиране на кода]Функцията Шаблон на MediaWiki е вграден специфичен език, с основна цел поддръжката създаването на шаблони на страници и включването (включване чрез препратка) на MediaWiki страници в други страници на MediaWiki.
Други примери
[редактиране | редактиране на кода]Други известни примери за предметно ориентирани езици включват:
- Emacs Lisp
- Game Description Language
- OpenGL Shading Language
- Gradle
- ActionScript
Предимства и недостатъци
[редактиране | редактиране на кода]- Предметно ориентираните езици позволяват решенията да бъдат изразени на ниво абстракция на проблемната област. Идеята е, че самите експерти в съответната област биха могли да разбират, валидират, модифицират и често дори да разработват езикови програми, специфични за тях. Това обаче рядко е така.
- Предметно ориентираните езици позволяват валидиране на ниво предметна област. След като езиковите конструкции са безопасни, всяка програма написана с тях, може да се счита за безопасна. Това твърдение също подлежи на проверка.
- Тези езици могат да помогнат за изместването на развитието на бизнес информационните системи от традиционните разработчици на софтуер към обикновено по-голямата група от експерти в съответната област, които (въпреки че имат по-малко технически познания) имат по-задълбочени познания в своята област.
- Специфичните за домейна езици са по-лесни за научаване, предвид ограничения им обхват.
Някои от недостатъците:
- Необходимост от изучаване на нов език
- Ограничена приложимост
- Разходи за проектиране, внедряване и поддържане на специфичен език, както и за инструментите, необходими за разработването с него (интегрирани среди – IDE)
- Намиране, настройка и поддържане на подходящ обхват.
- Трудност при намирането на компромиси между специфични за областта инструменти и конструкции на езика за програмиране с общо предназначение.
- Потенциална загуба на ефективност на процесора в сравнение с ръчно кодирания софтуер.
- Трудно прехвърляне на подобни нестандартни езици, например ПОЕ използван в една застрахователна компания, срещу ПОЕ използван в друга застрахователна компания.
- Не всички експерти в дадена област биха могли да пишат или променят програми на ПОЕ.
- Повишена трудност при интегрирането на ПОЕ с други компоненти на ИТ системата (в сравнение с интегрирането с език с общо предназначение).
- Ниското предлагане на експерти за конкретен специфичен език води до повишаване на разходите за труд.
- По-трудно е да се намерят примери за код.
Препратки
[редактиране | редактиране на кода]- ↑ 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
- ↑ 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