Кіріспе

Компьютерлік тіл нақты талаптарға немесе функционалдыққа маманданған. Домендік тіл (DSL) – белгілі бір қолдану саласына маманданған компьютерлік тіл. Бұл жалпы мақсаттағы тілге (GPL) қарама-қарсы, ол түрлі салаларда кеңінен қолданылады. DSL-дің кеңінен таралған тілдері бар, мысалы, веб-беттер үшін HTML, ал MUSH сияқты бір немесе бірнеше бағдарламалық құралдармен ғана қолданылатын тілдер де кездеседі. DSL-ді тілдің түріне қарай тағы да бөлуге болады, оларға домендік арнайы таңбалау тілдері, домендік арнайы модельдеу тілдері (жалпы алғанда, сипаттама тілдері) және домендік арнайы бағдарламалау тілдері жатады. Компьютерлік дәуірде арнайы мақсаттағы компьютерлік тілдер әрқашан болған, бірақ «домендік тіл» термині домендік модельдеудің дамуына байланысты кеңінен танымал болды. Тек бір қолданба қолданатын қарапайым DSL тілдері кейде бейресми түрде «шағын тілдер» деп аталады. Жалпы мақсаттағы тілдер мен домендік тілдер арасындағы шекара әрқашан да анық болмайды, себебі тіл белгілі бір салаға арналған ерекше мүмкіндіктерге ие болуы мүмкін, бірақ оны кеңінен қолдануға болады, немесе керісінше, теориялық тұрғыдан кең қолданылуға қабілетті болса да, практикада нақты бір сала үшін ғана қолданылады. Мысалы, Perl бастапқыда AWK және shell скрипттері сияқты мәтінді өңдеу және байланыстыру тілі ретінде жасалған, бірақ кейіннен жалпы мақсаттағы бағдарламалау тілі ретінде қолданылды. Ал PostScript – Тьюринг толық тіл, қағидаты бойынша кез келген міндетті орындауға болады, бірақ іс жүзінде бетті сипаттау тілі ретінде ғана қолданылады.

Қолдану

Тиісті DSL-ді жобалау және пайдалану домендік инженерияның маңызды бөлігі болып табылады, бұл қолданыстағы доменге сәйкес тілді пайдалану арқылы жүзеге асырылады – бұл қолданыстағы DSL немесе GPL-ді пайдаланудан немесе жаңа DSL-ді әзірлеуден тұрады. Тілге бағытталған бағдарламалау, проблемаларды шешу процесінің стандартты бөлігі ретінде, проблемаларды білдіруге арналған мақсатты тілдерді құруды қарастырады. Егер тіл, қолданыстағы тілге қарағанда, белгілі бір типтегі проблеманы немесе оның шешімін анықтап көрсетуге мүмкіндік берсе және мұндай проблемалар жиі қайталап пайда болса, оны қолдайтын бағдарламалық құралдармен бірге доменге арналған тілді жасау тиімді болуы мүмкін. Практикалық тұрғыдан алғанда, DSL белгілі бір проблемалық доменге, проблеманы бейнелеу әдісіне, шешімді табу әдісіне немесе доменнің басқа да ерекшеліктеріне қатысты мамандануы мүмкін.

Құрылысы мен іске асыруы

Домендік тілдер – бұл жобалау және іске асыруда өте нақты мақсаттары бар тілдер (немесе көбінесе, жарияланған синтаксис немесе грамматика). Домендік тіл визуалды схемалар жасау тілі болуы мүмкін, мысалы, Generic Eclipse Modeling System құратын тілдер, Eclipse Modeling Framework сияқты бағдарламалық абстракциялар немесе мәтіндік тілдер. Мысалы, grep командалық жол құралы мәтін жолдарындағы үлгілермен сәйкес келетін реттегіш өрнек синтаксисін пайдаланады. sed құралы реттегіш өрнектерді іздеу және алмастыру үшін синтаксисті анықтайды. Көбінесе, мұндай шағын тілдер күрделі бағдарламалау міндеттерін орындау үшін терминал ішінде біріктіріліп қолданылуы мүмкін. Домендік тілдер мен сценарийлік тілдердің арасындағы шекара шамалы тұманды, бірақ домендік тілдерде файлдық жүйеге қол жеткізу, процестерді басқару және толыққанды бағдарламалау тілдерін, сценарийлік тілдерді немесе олардың басқа да мүмкіндіктерін сипаттайтын төменгі деңгейдегі функциялар көбінесе жоқ. Көптеген домендік тілдер байт-кодқа немесе атқарылатын кодқа емес, әртүрлі медиа нысандарына компиляцияланады: GraphViz PostScript, GIF, JPEG және т.б. форматтарына экспорттайды, Csound аудио файлдарға компиляцияланады, ал POV сияқты домендік тіл графикалық файлдарға компиляцияланады.

Деректерді анықтау тілдері

SQL сияқты деректерді анықтау тілі қызықты жағдай ұсынады: оны доменге қатысты тіл деп санауға болады, себебі ол нақты бір доменге арналған (SQL жағдайында, реляциялық деректер базасына қол жеткізу және басқару), және көбінесе басқа қолданбадан шақырылады. Бірақ SQL-де көптеген сценарий тілдеріне қарағанда көбірек кілт сөздер мен функциялар бар, сондықтан ол көбінесе дербес тіл ретінде қарастырылады. Мүмкін, бұл бағдарламалауда деректер базасын өңдеудің кең таралғандығы және тілде саршен болу үшін қажетті білім деңгейімен байланысты болар. Бұл шекараны одан әрі нашарлататыны, көптеген доменге қатысты тілдерде ашық API бар, оларды орындалу ағынын тоқтатусыз немесе жеке процесті шақырмай, басқа бағдарламалау тілдерінен қолдануға болады, осылайша олар бағдарламалау кітапханалары ретінде жұмыс істей алады.

Бағдарламалау құралдары

Кейбір домендік тілдер уақыт өте келе толық мүмкіндіктермен жабдықталған бағдарламалау құралдарын қамтиды, бұл тілдің домендік екені немесе емесі деген сұрақты одан әрі күрделендіреді. Жақсы мысал – бір XML графигін екіншісіне түрлендіру үшін арнайы жасалған функционалдық XSLT тілі. Ол құрылғаннан бері (әсіресе 2.0 нұсқасында) файлдық жүйемен өзара әрекеттесу, жолдар мен күндерді өңдеу және деректерді түрлендіру сияқты әртүрлі мүмкіндіктермен кеңейтілді. Модельге негізделген инженерияда OCL (модельдерді нақтылаулармен безендіруге арналған тіл) немесе QVT (домендік түрлендіру тілі) сияқты домендік тілдердің көптеген мысалдарын кездестіруге болады. Дегенмен, UML сияқты тілдер әдетте жалпы мақсаттағы модельдеу тілдері болып табылады. Қорытындылай айтқанда, мынадай аналогия көмектеседі: өте қарапайым тіл – пышақ сияқты, оны тамақ кесуден бастап ағаш кесуге дейін мыңдаған түрлі жолмен қолдануға болады. Домендік тіл – электр дрелі сияқты: ол әртүрлі қолданыстарға ие қуатты құрал, бірақ нақты мақсаты – заттарға тесік салу. Ал жалпы мақсаттағы тіл – әртүрлі тапсырмаларды орындауға арналған әртүрлі құралдармен жабдықталған толыққанды жұмыс үстелі. Домендік тілдерді бағдарламашылар қолдануы керек, егер олар қолданыстағы құралдарына жақсырақ дрель қажет екенін түсініп, сол домендік тілдің осы қажеттілікті қанағаттандыратынын анықтаса.

Сыртқы және кіріктірілген доменге тән тілдер

Тәуелсіз интерпретатор немесе компилятор арқылы іске асырылатын DSL тілдері Сыртқы Домендік Тілдер деп аталады. Белгілі мысалдарға LaTeX немесе AWK кіреді. Енгізілген (немесе Ішкі) Домендік Тілдер деп аталатын жеке категория әдетте қабылдаушы тілде кітапхана ретінде іске асырылады және қабылдаушы тілдің синтаксисімен шектеледі, бірақ бұл қабылдаушы тілдің мүмкіндіктеріне байланысты.

Идиомалар

Бағдарламалауда идиомалар – бағдарламашылардың жиі кездесетін даму тапсырмаларын орындау үшін қолданатын тәсілдер, мысалы:

Терезе жабылу алдында деректер сақталуын қамтамасыз ету. Командалық жол параметрлері өзгерген сайын кодты өңдеу, себебі олар бағдарламаның жұмысына әсер етеді. Көп мақсатты бағдарламалау тілдері мұндай идиомаларды көбінесе қолдамайды, бірақ салалық тілдер оларды сипаттауға мүмкіндік береді, мысалы:

Скрипт деректерді автоматты түрде сақтай алады. Салалық тіл командалық жолдан берілетін деректерді параметрлеуге болады.

Мысалдар

Домендік бағдарламалау тілдерінің мысалдары: HTML, қарындашпен салу сияқты сурет салуға арналған Logo, Verilog және VHDL аппараттық сипаттау тілдері, матрицалық бағдарламалау үшін MATLAB және GNU Octave, символдық математика үшін Mathematica, Maple және Maxima, реактивті және таратылған жүйелер үшін спецификация және сипаттау тілі, электрондық кестелердегі формулалар мен макростар, реляциялық деректер базасын сұрау үшін SQL, парсерлерді құру үшін YACC грамматикасы, лексикалық анализаторларды анықтау үшін реттегіш өрнектер, диаграммалық тілдерді жасау үшін Generic Eclipse Modeling System, дыбыс және музыка синтезі үшін Csound, GraphViz және GrGen кіріс тілдері – графиктерді орналастыру және қайта жазуға арналған бағдарламалық пакеттер, Terraform және басқа Hashicorp құралдары үшін қолданылатын Hashicorp конфигурация тілі, сондай-ақ Puppet-тің де өзіндік конфигурация тілі бар.

GameMaker тілі

GameMaker Studio қолданған GML скрипт тілі – бағдарламалауды оңай үйренуге мүмкіндік беретін, жаңадан бастаған бағдарламашыларға арналған салалық тіл. Бұл тіл Delphi, C++ және BASIC тілдерінің элементтерін біріктіргенмен, толыққанды бағдарламалау тіліне тән құрылымдардың, дерек түрлерінің және басқа да мүмкіндіктердің жетіспеушілігін байқатады. Көптеген кіріктірілген функциялар оңай көшіру мақсатында шектеулі ортада жұмыс істейді. Бұл тілдің басты мақсаты – кез келген адамға тілді игеруді және ойын жасауды жеңілдету болып табылады.

Ерланг ОТП

Erlang Open Telecom Platform бастапқыда Ericsson компаниясы ішінде доменге арналған тіл ретінде пайдалану үшін жобаланған. Тілдің өзі шекті күй машиналарын, жалпы серверлерді және оқиғаларды басқарушыларды құруға арналған кітапханалар жиынтығын ұсынады, бұл инженерге қосымшаларды немесе индустриялық сынақтарда C және C++ сияқты әртүрлі салаларға арналған басқа тілдерден жоғары өнімділік көрсеткен кітапханаларды жылдам енгізуге мүмкіндік береді. Қазіргі таңда тіл ресми түрде ашық кодты және оны олардың веб-сайтынан жүктеуге болады.

FilterMeister (Қарапайым)

FilterMeister – бұл C тіліне негізделген бағдарламалау ортасы, Photoshop-қа үйлесімді кескін өңдеу сүзгі плагиндерін жасауға арналған бағдарламалау тілімен бірге; FilterMeister өзі Photoshop плагині ретінде жұмыс істейді және сценарийлерді жүктеуге және орындауға, немесе оларды тәуелсіз плагиндер ретінде құрастыруға және экспорттауға мүмкіндік береді. FilterMeister тілі C тілінің және функциялар кітапханасының маңызды бөлігін көшіргенімен, онда Photoshop плагиндерінің контекстінде қолданылатын мүмкіндіктер ғана бар, сондай-ақ осы салаға ғана қатысты бірнеше арнайы мүмкіндіктер қосылған.

MediaWiki үлгілері

MediaWiki-дің Template мүмкіндігі – кіріктірілген, доменге арналған тіл, оның басты мақсаты – бет үлгілерін жасауға және MediaWiki беттерін басқа MediaWiki беттеріне трансклюзиялауға (сілтеме арқылы қосуға) көмектесу болып табылады.

Бағдарламалық жасақтамаларды пайдалану

Бағдарламалық жасақтаманы жасаудың өнімділігі мен сапасын арттыру мақсатында домендік тілдерге зор қызығушылық танылып келеді. Домендік тіл тиімді бағдарламалық жасақтама жасау үшін қажетті құралдар жиынтығын ұсынуы мүмкін. Мұндай құралдар қазірдің өзінде маңызды бағдарламалық жүйелерді әзірлеуге енгізіліп келеді. Бағдарламалық қамтамасыз ету құнын төмендетуге арналған құралдар жиынтығы осының бір мысалы. Бұл жиынтыққа қажеттіліктерді сипаттау үшін спецификация редакторы, айнымалылардың тәуелділігін көрсетуге арналған тәуелділік графигі шолушысы, спецификациядағы дұрыс құрылған формулалардағы кемшіліктерді анықтауға арналған сәйкестік тексеруші, модель тексеруші, теореманы дәлелдеуші, сондай-ақ бағдарламаның қасиеттерін спецификациямен салыстырып тексеруге және талаптарға сәйкес инварианттарды автоматты түрде құруға арналған инвариант генераторы кіреді. Жаңа бағыт – тілге бағдарланған бағдарламалау, бұл домендік тілдерді жасау, оңтайландыру және пайдалануға негізделген біріктірілген бағдарламалық жасақтаманы әзірлеу әдістемесі.

Метакомпиляторлар

Тілге бағытталған бағдарламалауды, сондай-ақ домендік тілдердің барлық басқа түрлерін толықтыратын, компилятор құрастыру құралдарының класы – метакомпиляторлар. Метакомпилятор домендік тілдерге арналған парсерлер мен код генераторларын жасау үшін ғана емес, сонымен қатар метапрограммалау саласына арналған домендік метатілді құрастырады. Домендік тілдерді талдаудан өзге, метакомпиляторлар бағдарламалық жасақтаманы жасау және талдау құралдарының кең спектрін жасауға көмектеседі. Метакомпилятор әдістемесі көбінесе бағдарламаны түрлендіру жүйелерінде қолданылады. Компьютер ғылымы және компьютер индустриясында маңызды рөл атқарған метакомпиляторларға Meta II және оның мұрагері TreeMeta жатады.

Unreal Engine 4-ші нұсқадан бұрын және басқа да ойындар

Unreal және Unreal Tournament UnrealScript деп аталатын жаңа тілді таныстырды. Бұл, бәсекелес Quake-ге (Id Tech 2 ойын қозғалтқышын пайдалана отырып) қарағанда, ойынға өзгерістер енгізуді жылдамдатуға мүмкіндік берді. Id Tech қозғалтқышы стандартты C кодына негізделгендіктен, C тілін үйреніп, дұрыс қолдану қажет болды, ал UnrealScript пайдалануға ыңғайлы және тиімді болу үшін жасалған. Сол сияқты, жаңа ойындардың жасалуымен бірге, арнайы скрипт тілдері де пайда болды, мысалы, Lua тілі кеңінен қолданылады.

Саясатты автоматтандыру үшін ережелерді енгізу

Мемлекеттік және жеке секторда қолданылатын саясаттар мен бизнес ережелерін автоматтандыру үшін әртүрлі бизнес ережелері жүйелері жасалған. ILOG, Oracle Policy Automation, DTRules, Drools және тағы да басқалары түрлі салалардағы мәселелерді шешуге бағытталған DSL-дерді қолдайды. DTRules бір ереже жиынтығында бірнеше DSL пайдалануға мүмкіндік беретін интерфейсті ұсынады. Бизнес ережелері жүйелерінің мақсаты – бизнес логикасын мүмкіндігінше қарапайым және түсінікті ету. Бұл саладағы мамандар мен бағдарламашылардың бизнес логикасының бірдей түсінігімен жұмыс істеуіне және оны түсінуіне мүмкіндік береді. Көптеген ереже жүйелері бизнес логикасының басқару құрылымдарын жеңілдету (мысалы, декларативтік ережелерді немесе шешім кестелерін қолдану) және бағдарламалау синтаксисі орнына DSL-дерді пайдалану мүмкіндігін ұсынады.

Бірнеше бағдарламалау тілдеріне модельдер мен қызметтер құру

Веб-қосымшалар үшін JavaScript, құжаттама үшін HTML, жоғары өнімділік код үшін C++ сияқты нақты доменге арналған тіл үшін интерфейс сипаттама тіліне сүйене отырып, объектілерді басқару және қызметтерді жасау. Мұндай жұмыс Apache Thrift немесе Google Protocol Buffers сияқты көп тілдік фреймворктар арқылы іске асырылады.

Қалқан

Gherkin – бағдарламалық қамтамасының әрекетін тексеру үшін тест жағдайларын анықтауға арналған тіл, оның іске асылу жолын көрсетпейді. Оны техникалық білімі жоқ пайдаланушылар табиғи тіл синтаксисі мен жолға бағытталған құрылымды қолдана отырып оқиды және пайдаланады. Gherkin арқылы анықталған тесттер жалпы мақсаттағы бағдарламалау тілінде жүзеге асырылуы тиіс. Содан кейін, Gherkin бағдарламасындағы қадамдар әзірлеуші емес мамандарға қолжетімді әдіс шақыру синтаксисі ретінде жұмыс істейді.