Doménspecifikus nyelv

A doménspecifikus nyelv (DSL) egy adott alkalmazástartományra szakosodott számítógépes nyelv. Ez ellentétben áll az általános célú nyelvvel (GPL), amely széles körben alkalmazható az összes területen. A DSL-ek széles skálája létezik, a széles körben használt nyelvektől kezdve az általános területeken használt nyelvekig, mint például a HTML a weboldalakhoz, egészen a csak egy vagy néhány szoftver által használt nyelvekig, mint például a MUSH soft code. Magukban foglalják a doménspecifikus jelölőnyelveket, a doménspecifikus modellező nyelveket (általánosabban a specifikációs nyelveket) és a doménspecifikus programozási nyelveket. Speciális célú számítógépes nyelvek mindig is léteztek a számítógépes korszakban, de a „doménspecifikus nyelv” kifejezés a doménspecifikus modellezés térhódítása miatt vált népszerűbbé. Az egyszerűbb DSL-eket, különösen az egyetlen alkalmazás által használtakat, néha informálisan mininyelveknek nevezik.

Az általános célú nyelvek és a doménspecifikus nyelvek közötti határvonal nem mindig éles, mivel egy nyelv rendelkezhet egy adott doménre specializált jellemzőkkel, de szélesebb körben is alkalmazható, vagy fordítva, elvileg széles körben alkalmazható, de a gyakorlatban elsősorban egy adott doménen használják. Például a Perl-t eredetileg szövegfeldolgozó és ragasztó nyelvként fejlesztették ki, ugyanarra a területre, mint az AWK-t és a shell szkripteket, de később főként általános célú programozási nyelvként használták. Ezzel szemben a PostScript egy Turing-teljes nyelv, és elvileg bármilyen feladatra használható, de a gyakorlatban szűk körben oldalleíró nyelvként használják.

Használata

A megfelelő DSL-ek megtervezése és használata a domain engineering kulcsfontosságú része, az adott területnek megfelelő nyelv használatával - ez lehet egy meglévő DSL vagy GPL használata, vagy egy új DSL kifejlesztése. A nyelvközpontú programozás a problémák kifejezésére szolgáló speciális célú nyelvek létrehozását a problémamegoldási folyamat standard részének tekinti. Egy doménspecifikus nyelv létrehozása (az azt támogató szoftverrel együtt) egy meglévő nyelv újrafelhasználása helyett akkor lehet kifizetődő, ha a nyelv lehetővé teszi egy adott típusú probléma vagy megoldás egyértelműbb kifejezését, mint azt egy meglévő nyelv lehetővé tenné, és a kérdéses problématípus kellően gyakran fordul elő. Pragmatikusan egy DSL specializálódhat egy adott problématerületre, egy adott probléma reprezentációs technikára, egy adott megoldási technikára vagy a terület egyéb aspektusaira.

Áttekintés

A doménspecifikus nyelvek kifejezetten egy adott domén problémáinak megoldására készülnek, és nem arra szolgálnak, hogy azon kívül is képesek legyenek problémákat megoldani (bár ez technikailag lehetséges). Ezzel szemben az általános célú nyelvek számos terület problémáinak megoldására készülnek. A tartomány lehet egy üzleti terület is. Néhány példa az üzleti területekre:

  • életbiztosítási kötvények (egy nagy biztosítótársaság belső fejlesztése)
  • harci szimuláció
  • bérszámítás
  • számlázás

A doménspecifikus nyelv valahol egy apró programozási nyelv és egy szkriptnyelv között helyezkedik el, és gyakran egy programkönyvtárhoz hasonlóan használják. E fogalmak közötti határok meglehetősen elmosódottak, hasonlóan a szkriptnyelvek és az általános célú nyelvek közötti határvonalhoz.

Tervezésben és kivitelezésben

A doménspecifikus nyelvek olyan nyelvek (vagy gyakran deklarált szintaxisok vagy nyelvtanok), amelyek tervezése és megvalósítása nagyon specifikus célokat szolgál. A tartományspecifikus nyelv lehet vizuális diagramkészítő nyelv, mint például a Generic Eclipse Modeling System által létrehozott nyelvek, programozási absztrakciók, mint például az Eclipse Modeling Framework, vagy szöveges nyelvek. Például a grep parancssori segédprogramnak van egy reguláris kifejezés szintaxisa, amely a szövegsorokban található mintákra illeszkedik. A sed segédprogram meghatározza a reguláris kifejezések illesztésére és helyettesítésére szolgáló szintaxist. Gyakran ezek az apró nyelvek együttesen használhatók egy shellen belül összetettebb programozási feladatok elvégzésére.

A doménspecifikus nyelvek és a szkriptnyelvek közötti határvonal némileg elmosódik, de a doménspecifikus nyelvek gyakran nem tartalmaznak alacsony szintű funkciókat a fájlrendszerhez való hozzáféréshez, a folyamatok közötti vezérléshez és más funkciókhoz, amelyek a teljes értékű programozási nyelveket, a szkriptnyelveket vagy más nyelveket jellemzik. Sok doménspecifikus nyelv nem bájtkóddá vagy végrehajtható kóddá, hanem különféle médiaobjektumokká fordítható: A GraphViz PostScript, GIF, JPEG stb. formátumba exportál, a Csound hangfájlokba, a sugárkövetéses tartományspecifikus nyelv, mint például a POV pedig grafikus fájlokba. Egy olyan számítógépes nyelv, mint az SQL, érdekes esetet mutat: terület-specifikus nyelvnek tekinthető, mivel egy adott területre (az SQL esetében a relációs adatbázisok elérésére és kezelésére) specializálódott, és gyakran egy másik alkalmazásból hívják, de az SQL-nek több kulcsszava és funkciója van, mint sok szkriptnyelvnek, és gyakran önálló nyelvnek tekintik, talán azért, mert a programozásban az adatbázis-manipuláció elterjedt, és a nyelv szakértőjéhez szükséges elsajátítás mértéke miatt.

Ezt a vonalat tovább homályosítja, hogy sok doménspecifikus nyelv rendelkezik nyílt API-kkal, és más programozási nyelvekből is elérhetők anélkül, hogy megszakadna a végrehajtás folyamata, vagy külön folyamat meghívása nélkül, és így programozási könyvtárként működhetnek.

Programozási eszközök

Egyes doménspecifikus nyelvek idővel teljes értékű programozási eszközökkel bővülnek, ami tovább bonyolítja a kérdést, hogy egy nyelv doménspecifikus-e vagy sem. Jó példa erre az XSLT funkcionális nyelv, amelyet kifejezetten az egyik XML-gráfnak egy másikba való átalakítására terveztek, és amelyet a kezdetek óta kibővítettek, hogy (különösen a 2.0-s verzióban) lehetővé tegye a fájlrendszerrel való interakció különböző formáit, a karakterlánc- és dátummanipulációt, valamint az adattípusok tipizálását.

A modellvezérelt tervezésben számos példa található a doménspecifikus nyelvekre, mint például az OCL, amely a modellek állításokkal való díszítésére szolgáló nyelv, vagy a QVT, amely egy doménspecifikus transzformációs nyelv. Az olyan nyelvek azonban, mint az UML, jellemzően általános célú modellező nyelvek.

Összefoglalva, egy hasonlat hasznos lehet: egy nagyon kis nyelv olyan, mint egy kés, amelyet ezerféleképpen lehet használni, az ételvágástól a fák kivágásáig. Egy doménspecifikus nyelv olyan, mint egy elektromos fúrógép: egy nagy teljesítményű eszköz, amely sokféleképpen használható, de csak egy meghatározott kontextusban, nevezetesen a dolgok kilyukasztására. Egy általános célú nyelv egy teljes munkapad, különféle eszközökkel, amelyek különféle feladatok elvégzésére szolgálnak. A doménspecifikus nyelveket olyan programozóknak kell használniuk, akik a jelenlegi munkapadjukat áttekintve rájönnek, hogy szükségük van egy jobb fúróra, és úgy találják, hogy egy adott doménspecifikus nyelv pontosan ezt nyújtja.

Doménspecifikus nyelvi témák

Külső és beágyazott doménspecifikus nyelvek

A független fordítóprogrammal vagy fordítóprogrammal megvalósított DSL-eket külső tartományspecifikus nyelveknek nevezzük. Jól ismert példák erre a LaTeX vagy az AWK. A beágyazott (vagy belső) doménspecifikus nyelvek külön kategóriája jellemzően egy gazdanyelven belül, könyvtárként valósul meg, és általában a gazdanyelv szintaxisára korlátozódik, bár ez a gazdanyelv képességeitől függ.

Felhasználási minták

A doménspecifikus nyelveknek többféle használati mintája van:

  • Feldolgozás önálló eszközökkel, amelyeket közvetlen felhasználói művelettel, gyakran a parancssorból vagy egy Makefile-ból hívunk elő (pl. grep a reguláris kifejezések egyeztetéséhez, sed, lex, yacc, a GraphViz eszközkészlet stb.).
  • olyan tartományspecifikus nyelvek, amelyeket programozási nyelvi makrorendszerek segítségével valósítanak meg, és amelyeket fordítási időben vagy valós időben konvertálnak vagy bővítenek egy általános célú fogadó nyelvvé.
  • beágyazott doménspecifikus nyelvek (eDSL), amelyeket olyan könyvtárak formájában valósítanak meg, amelyek kihasználják a befogadó általános célú nyelv vagy annak egy részhalmazának szintaxisát, miközben hozzáadnak doménspecifikus nyelvi elemeket (adattípusok, rutinok, módszerek, makrók stb.). (pl. jQuery, React, Embedded SQL, LINQ).
  • Tartományspecifikus nyelvek, amelyeket (futásidőben) általános célú nyelveken, például C vagy Perl nyelven írt programokból hívnak meg egy adott funkció elvégzésére, gyakran a művelet eredményét további feldolgozásra visszaadva a "gazdaprogramozási nyelvnek"; általában a tartományspecifikus nyelv értelmezője vagy virtuális gépe be van ágyazva a gazdaalkalmazásba (pl. formázó karakterláncok, reguláris kifejezések motorja).
  • A felhasználói alkalmazásokba beágyazott tartományspecifikus nyelvek (pl. a táblázatkezelőben lévő makrónyelvek), amelyeket 1) az alkalmazás felhasználói által írt kódok végrehajtására, 2) az alkalmazás által dinamikusan generált kódok végrehajtására vagy 3) mindkettőre használnak.

Sok doménspecifikus nyelv többféleképpen is használható. A DSL kódja a gazdanyelvbe ágyazva rendelkezhet speciális szintaxis támogatással, mint például a sed, AWK, Perl vagy JavaScript regexek, vagy átadható karakterláncokként.

Tervezési célok

A doménspecifikus nyelvi megközelítés alkalmazása a szoftverfejlesztésben kockázatokat és lehetőségeket egyaránt rejt magában. A jól megtervezett doménspecifikus nyelv képes megtalálni a megfelelő egyensúlyt ezek között.

A doménspecifikus nyelveknek fontos tervezési céljaik vannak, amelyek eltérnek az általános célú nyelvek céljaitól:

  • A tartományspecifikus nyelvek kevésbé átfogóak.
  • A tartományspecifikus nyelvek sokkal kifejezőbbek a saját tartományukban.
  • A tartományspecifikus nyelvek minimális redundanciát mutatnak.

Idiómák

A programozásban az idiómák a programozók által a gyakori fejlesztési feladatok kezelésére alkalmazott módszerek, pl.:

  • Biztosítsa az adatok mentését az ablak bezárása előtt.
  • Szerkessze a kódot, amikor a parancssori paraméterek megváltoznak, mert ezek befolyásolják a program viselkedését.

Az általános célú programozási nyelvek ritkán támogatják az ilyen idiómákat, de a doménspecifikus nyelvek képesek leírni őket, például:

  • Egy szkript automatikusan menthet adatokat.
  • Egy doménspecifikus nyelv paraméterezheti a parancssori bevitelt.

Példák

A doménspecifikus nyelvek közé tartozik például a HTML, a Logo a ceruzaszerű rajzoláshoz, a Verilog és a VHDL hardverleíró nyelvek, a MATLAB és a GNU Octave a mátrixprogramozáshoz, a Mathematica, a Maple és a Maxima a szimbolikus matematikához, a Specification and Description Language a reaktív és elosztott rendszerekhez, a táblázatkezelő formulák és makrók, az SQL a relációs adatbázis-lekérdezésekhez, a YACC nyelvtanok a parserek létrehozásához, reguláris kifejezések a lexerek megadásához, a Generic Eclipse Modeling System a diagramkészítő nyelvek létrehozásához, Csound a hang- és zeneszintézishez, valamint a GraphViz és a GrGen bemeneti nyelvei, a gráfok elrendezéséhez és gráfok újraírásához használt szoftvercsomagok, a Terraform és más Hashicorp eszközökhöz használt Hashicorp Configuration Language, a Puppetnek is van saját konfigurációs nyelve.

GameMaker nyelv

A GameMaker Studio által használt GML szkriptnyelv egy doménspecifikus nyelv, amely a kezdő programozókat célozza meg, hogy könnyen megtanulhassák a programozást. Bár a nyelv több nyelv, köztük a Delphi, a C++ és a BASIC keverékeként szolgál, hiányoznak belőle a struktúrák, adattípusok és egy teljes értékű programozási nyelv egyéb jellemzői. A beépített függvények közül sok a könnyű hordozhatóság érdekében sandboxolt. A nyelv elsősorban azt a célt szolgálja, hogy bárki könnyen felvehesse a nyelvet és játékot fejlesszen.

ColdFusion Markup Language

A ColdFusion kapcsolódó szkriptnyelv egy másik példa az adatvezérelt weboldalakhoz használt tartományspecifikus nyelvre. Ez a szkriptnyelv olyan nyelvek és szolgáltatások összeszövésére szolgál, mint a Java, .NET, C++, SMS, e-mail, e-mail szerverek, http, ftp, exchange, könyvtárszolgáltatások és fájlrendszerek, amelyeket a weboldalakon használnak.

A ColdFusion Markup Language (CFML) olyan címkéket tartalmaz, amelyek a ColdFusion oldalakon az adatforrásokkal való interakcióra, az adatok kezelésére és a kimenet megjelenítésére használhatók. A CFML címke szintaxis hasonlít a HTML elem szintaxisához.

Erlang OTP

Az Erlang Open Telecom Platformot eredetileg az Ericssonon belüli használatra tervezték, mint doménspecifikus nyelvet. Maga a nyelv véges állapotú gépek, általános kiszolgálók és eseménykezelők létrehozására szolgáló könyvtárak platformját kínálja, amelyek segítségével a mérnök gyorsan alkalmazásokat vagy támogató könyvtárakat telepíthet, amelyekről az iparági összehasonlító tesztek kimutatták, hogy felülmúlják más, vegyes területekre szánt nyelvek, például a C és a C++ teljesítményét. A nyelv immár hivatalosan is nyílt forráskódú, és letölthető a honlapjukról.

FilterMeister

A FilterMeister egy C-alapú programozási nyelvvel rendelkező programozási környezet, amely kifejezetten a Photoshop-kompatibilis képfeldolgozó szűrő plug-inek létrehozására szolgál; a FilterMeister maga is Photoshop plug-inként fut, és képes betölteni és végrehajtani a szkripteket, illetve önálló plug-inekként lefordítani és exportálni azokat. Bár a FilterMeister nyelv a C nyelv és függvénykönyvtár jelentős részét reprodukálja, csak azokat a funkciókat tartalmazza, amelyek a Photoshop plug-inek kontextusában használhatók, és számos, csak ezen a speciális területen hasznos funkcióval egészül ki.

MediaWiki sablonok

A MediaWiki Sablon funkciója egy beágyazott doménspecifikus nyelv, amelynek alapvető célja, hogy támogassa az oldalsablonok létrehozását és a MediaWiki oldalak más MediaWiki oldalakba való bevonását (hivatkozással történő beépítését).

Szoftverfejlesztési felhasználások

A szoftverfejlesztés termelékenységének és minőségének javítása érdekében nagy érdeklődés mutatkozik a doménspecifikus nyelvek iránt. A doménspecifikus nyelvek valószínűleg robusztus eszközkészletet biztosíthatnak a hatékony szoftverfejlesztéshez. Az ilyen eszközök kezdenek teret nyerni a kritikus szoftverrendszerek fejlesztésében.

Erre példa a szoftverköltség-csökkentési eszköztár. Az eszközkészlet egy sor segédprogram, köztük egy specifikációs szerkesztő a követelményspecifikáció létrehozásához, egy függőségi gráf böngésző a változófüggőségek megjelenítéséhez, egy konzisztenciaellenőrző a specifikáció jól formázott formuláinak hiányzó eseteinek felderítéséhez, egy modellellenőrző és egy tételpróbáló a programtulajdonságok ellenőrzéséhez a specifikációval szemben, valamint egy invariánsgenerátor, amely automatikusan invarianciákat állít össze a követelmények alapján.

Újabb fejlemény a nyelvközpontú programozás, egy integrált szoftverfejlesztési módszertan, amely elsősorban a doménspecifikus nyelvek létrehozásán, optimalizálásán és használatán alapul.

Metakompilerek

A nyelvközpontú programozást, valamint a doménspecifikus nyelvek minden más formáját kiegészítik a fordítóprogram-író eszközök metakompilereknek nevezett osztálya. Egy metakompiler nem csak arra hasznos, hogy a doménspecifikus nyelvekhez parsereket és kódgenerátorokat generáljon, hanem egy metakompiler maga is lefordít egy olyan doménspecifikus metanyelvet, amelyet kifejezetten a metaprogramozás területére terveztek.

A metakompilerek a doménspecifikus nyelvek elemzése mellett a szoftverfejlesztő és -elemző eszközök széles skálájának létrehozására is alkalmasak. A metakompiláló módszertan gyakran megtalálható a programtranszformációs rendszerekben.

A számítástechnikában és a számítástechnikai iparban is jelentős szerepet játszó metakompilerek közé tartozik a Meta-II és annak leszármazottja, a TreeMeta.

Unreal Engine a 4-es verzió előtt és más játékok

Az Unreal és az Unreal Tournament bemutatott egy UnrealScript nevű nyelvet. Ez lehetővé tette a módosítások gyors fejlesztését a versenytárs Quake-hez képest (amely az Id Tech 2 motort használta). Az Id Tech motor szabványos C kódot használt, ami azt jelenti, hogy a C-t meg kellett tanulni és megfelelően alkalmazni, míg az UnrealScriptet a könnyű használatra és hatékonyságra optimalizálták. Hasonlóképpen az újabb játékok fejlesztése során is bevezették a saját specifikus nyelveket, az egyik elterjedtebb példa a Lua a szkripteléshez.[forrás?]

Szabálymotorok a házirend-automatizáláshoz

A kormányzati és a magánszektorban egyaránt használt irányelvek és üzleti szabályok automatizálására különböző üzleti szabálymotorokat fejlesztettek ki. Az ILOG, az Oracle Policy Automation, a DTRules, a Drools és mások támogatást nyújtanak a különböző problématerületek támogatását célzó DSL-ekhez. A DTRules olyan messzire megy, hogy egy szabálykészleten belül több DSL használatához is definiál egy interfészt.

Az üzleti szabálymotorok célja, hogy az üzleti logika reprezentációját a lehető legemberibb olvashatóságú módon definiálják. Ez lehetővé teszi, hogy mind a szakemberek, mind a fejlesztők az üzleti logika azonos reprezentációjával dolgozzanak és értsék azt. A legtöbb Rules Engines az üzleti logika vezérlési struktúráinak egyszerűsítésére szolgáló megközelítést (például deklaratív szabályok vagy döntési táblázatok használatával), valamint a DSL-ek helyett a programozási szintaxis alternatíváit kínálja.

Statisztikai modellező nyelvek

A statisztikai modellezők olyan terület-specifikus nyelveket fejlesztettek ki, mint az R (az S nyelv implementációja), a Bugs, a Jags és a Stan. Ezek a nyelvek szintaxist biztosítanak egy Bayes-modell leírásához, és módszert generálnak a modell szimulációval történő megoldásához.

Modell és szolgáltatások generálása több programozási nyelvhez

Objektumkezelés és szolgáltatások generálása egy interfész-leíró nyelv alapján egy doménspecifikus nyelvhez, például JavaScript a webes alkalmazásokhoz, HTML a dokumentációhoz, C++ a nagy teljesítményű kódokhoz stb. Ezt olyan nyelvközi keretrendszerek végzik, mint az Apache Thrift vagy a Google Protocol Buffers.

Gherkin

A Gherkin egy olyan nyelv, amelyet a szoftverek viselkedésének ellenőrzésére szolgáló tesztesetek definiálására terveztek, anélkül, hogy meghatároznák, hogyan valósul meg a viselkedés. Célja, hogy nem műszaki felhasználók is olvashassák és használhassák, természetes nyelvi szintaxis és sororientált felépítés segítségével. A Gherkin segítségével definiált teszteket ezután egy általános programozási nyelven kell megvalósítani. Ezután a Gherkin program lépései a nem fejlesztők számára is elérhető szintaxisként szolgálnak a metódusmeghíváshoz.

Egyéb példák

A doménspecifikus nyelvek további kiemelkedő példái a következők:

Előnyök és hátrányok

Néhány előny: [1] [2]

  • A doménspecifikus nyelvek lehetővé teszik, hogy a megoldásokat a problématerület nyelvezetében és absztrakciós szintjén fejezzük ki. Az elképzelés lényege, hogy a doménszakértők maguk is megérthetik, érvényesíthetik, módosíthatják, sőt gyakran még fejleszthetik is a doménspecifikus nyelvi programokat. Ez azonban ritkán van így.
  • A doménspecifikus nyelvek lehetővé teszik a validálást a domén szintjén. Amíg a nyelvi konstrukciók biztonságosak, addig minden velük írt mondat biztonságosnak tekinthető.[forrás?]
  • A doménspecifikus nyelvek segíthetnek abban, hogy az üzleti információs rendszerek fejlesztése a hagyományos szoftverfejlesztőktől átkerüljön a doménszakértők jellemzően nagyobb csoportjába, akik (annak ellenére, hogy kevesebb műszaki ismerettel rendelkeznek) mélyebb ismeretekkel rendelkeznek a doménről.
  • A doménspecifikus nyelveket könnyebb megtanulni, tekintettel korlátozott terjedelmükre.

Néhány hátrány:

  • Egy új nyelv elsajátításának költségei és korlátozott alkalmazhatósága között
  • Egy doménspecifikus nyelv, valamint a vele való fejlesztéshez szükséges eszközök (IDE) megtervezésének, bevezetésének és karbantartásának költségei.
  • A megfelelő hatókör megtalálása, beállítása és fenntartása.
  • A doménspecifikusság és az általános célú programozási nyelvi konstrukciók közötti kompromisszumok közötti egyensúlyozás nehézsége.
  • A processzor hatékonyságának potenciális csökkenése a kézzel kódolt szoftverekhez képest.
  • A hasonló, nem szabványos, doménspecifikus nyelvek elterjedése, például az egyik biztosítótársaságnál használt DSL egy másik biztosítótársaságnál használt DSL-lel szemben.
  • A nem műszaki szakemberek számára nehézséget okozhat a DSL-programok önálló megírása vagy módosítása.
  • A DSL-nek az informatikai rendszer más összetevőivel való integrálása megnövekedett nehézségekkel jár (az általános célú nyelvvel való integráláshoz képest).
  • A DSL-szakértők alacsony száma általában növeli a munkaerőköltségeket.
  • Nehezebb kódpéldákat találni.

Eszközök a doménspecifikus nyelvek tervezéséhez

  • A JetBrains MPS egy olyan eszköz, amely doménspecifikus nyelvek tervezéséhez használható. Projektív szerkesztést használ, amely lehetővé teszi a nyelvi parserek korlátainak leküzdését és DSL-szerkesztők, például táblázatokkal és diagramokkal ellátott DSL-szerkesztők építését. Nyelvközpontú programozást valósít meg. Az MPS egyesíti magában a nyelvi definícióhoz szükséges környezetet, a nyelvi munkapadot és az ilyen nyelvek integrált fejlesztőkörnyezetét (IDE).
  • Az Xtext egy nyílt forráskódú szoftver keretrendszer programozási nyelvek és doménspecifikus nyelvek (DSL) fejlesztésére. A szabványos elemzőgenerátorokkal ellentétben az Xtext nemcsak elemzőt, hanem az absztrakt szintaxisfa osztálymodelljét is generálja. Ezen kívül egy teljes körű, testreszabható Eclipse-alapú IDE-t is biztosít.
  • A Racket egy platformokon átívelő nyelvi eszköztár, amely fordítót, JIT-fordítót, IDE-t és parancssori eszközöket tartalmaz, amelyeket úgy terveztek, hogy mind doménspecifikus nyelvek, mind teljesen új nyelvek létrehozására alkalmasak legyenek.

Jegyzetek

  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. 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

Fordítás

Ez a szócikk részben vagy egészben a Domain-specific language című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!