Domain-specifikus nyelv

Domain-specifikus nyelv ( eng.  domain-specific language , DSL  - " domain -specific language ") - egy adott alkalmazási területre specializálódott számítógépes nyelv (ellentétben egy általános célú nyelvvel , amely számos területen alkalmazható, és nem veszi figyelembe figyelembe véve az adott területek ismereteinek jellemzőit). Egy ilyen nyelv felépítése és/vagy adatszerkezete tükrözi a segítségével megoldott feladatok sajátosságait [1] . Ez a nyelvorientált programozás kulcsfogalma .

Szigorúan véve a programozási nyelvek felosztása általános célú és tartományspecifikus nyelvekre nagyon önkényes, különösen, ha figyelembe vesszük, hogy formálisan bármely protokoll vagy fájlformátum egy . Számos általános célú nyelvet használnak tartományspecifikus nyelvként bizonyos feladatokhoz, és fordítva, tartományspecifikus nyelveket általános célú nyelvként használnak. Tehát az ML nyelvet , amely az általános célú nyelvek egész családját hozta létre (beleértve a Haskellt is), eredetileg DSL-ként fejlesztették ki az LCF tételbizonyító rendszerhez . Az osztályozás feltételességét mutató példa a BNF nyelv (és a belőle származó fordító Lex / Yacc ): ez egyrészt szemléletes példája a metanyelvnek , másrészt egy konkrét feladatra készült.

Terminológia

Az egy adott alkalmazásban használt legegyszerűbb tartományspecifikus nyelveket gyakran "mininyelveknek" nevezik [2] .

Martin Ward [ 3] "Language Oriented Programming" [4] című munkájában (amelyet a LOP fejlesztésének kiindulópontjának tartanak ) használta a " problémaorientált " és a " tartományorientált " kifejezéseket, de az angol  nyelvű tudományos közösségben a „ domain-specifikus ” kifejezést, ráadásul ez „ domain-specifikus nyelv ”, és nem „ tartomány-specifikus programozási nyelv ”. A programozásról szóló orosz szakirodalomban vannak „ tartomány-specifikus ”, „ problémaorientált ”, „ tartomány-orientált ” lehetőségek.

Fowler [5] és Dmitriev [6] a DSL fogalmát " lecsupaszított programozási nyelvként (többnyire Turing hiányos ) " határozza meg.

Példák

A nyelvorientált programozás vezető kutatói (Martin Ward, Paul Hudak , Walid Taha és mások) a következő példákat idézik a tartomány-specifikus nyelvekre, mint klasszikusokra [4] [7] [8] :

Walid Tahi szerint a LOP szempontjából a Microsoft Excel talán a legszélesebb körben használt programozási nyelv a világon [8] .

További példák a tartományspecifikus nyelvekre az adatbázis-kezelő nyelvek (az SQL mellett itt például a FoxPro nyelv is nevezhető ), az operációs rendszer parancsnyelvei (interaktív parancshéjnyelvek, elsősorban Unix Shell , köteg). munkanyelvek, például JCL , stb.) [9] , Turing hiányos adatstrukturáló nyelvek ( XML , .ini , .conf), wiki jelölőnyelvek , modellező nyelvek ( UML , GPSS ), Erlang multihoz -megszakítás nélkül működő felhasználói szerverek.

A vállalati erőforrás-menedzsment rendszerbe programozási nyelvek vannak beépítve (ABAP nyelv SAP / R3-ban, Galaktika, Parus, 1C, Info-Accountant rendszerek nyelvei) , és kiegészítették őket szervezet-specifikus modulokkal. A beágyazott nyelv használata leegyszerűsíti a konkrét feladatok programozását, mivel a nyelv kezdetben a tárgykör fogalmait tartalmazza. Néhány[ mi? ] a földrajzi információs rendszerek és a CAD is rendelkezik beépített programozási nyelvekkel.

Egyéb példák:

Beágyazott nyelvek

A számítógépes nyelveket időnként függő módon, azaz egy lefordított nyelven „belül” valósítják meg, amely nélkül ezek a nyelvek nemcsak hogy nem hajthatók végre, de gyakran nem alkotnak koherens szimbólumrendszert, és nem rendelkeznek Turing -rendszerrel. teljesség . Az ilyen nyelveket " beágyazott tartományspecifikus nyelveknek " ( eng.  beágyazott DSL , EDSL ; néha DSEL ) vagy egyszerűen " beágyazott nyelveknek " ( beágyazott nyelv ) [7] [10] , valamint "a nyelveken implementált nyelveknek" nevezik . tetején vagy ezen a nyelven alapul ".

Szövegnyelvek

A nyelvek hagyományos értelmezett és összeállított nyelvekre való felosztása mellett a beágyazható nyelvek számos további nyelvi megvalósítási módot is bevezetnek:

Másrészt egy beágyazható nyelv megvalósítása " fordítás nélküli megvalósításnak " tekinthető, ami azt jelenti, hogy a DSL annak a nyelvnek a szintaktikai és szemantikai részhalmaza lesz, amelybe be van ágyazva [11] .

Egy másik nyelv megvalósításához alapnyelvként használt nyelvet gyakran metanyelvnek nevezik .

Három fő oka van a beágyazott szövegnyelvek fejlesztésének:

Az első csoport nyelveinek leggyakoribb példái az objektum-orientált funkciók funkcionális [12] vagy procedurális [13] nyelveken való megvalósítása, a CLOS pedig egy klasszikus példa . Meg kell jegyezni, hogy a „nyelv” kifejezést itt nem mindig használják - néha csak „ új funkciók bevezetéséről a nyelvben ” vagy „ a nyelv kiterjesztéséről egy alrendszerrel, amelynek célja bizonyos feladatok megoldása ” beszélnek. nincs szigorú felosztás „ könyvtárak ” és „beágyazott nyelvek” között, mivel formálisan bármely API , protokoll vagy adatstruktúra nyelvnek tekinthető [14] . Így például a Lisp nyelv szerves része egy beépített, nem Turing teljes S-kifejezési nyelv .

A beágyazható nyelvek második csoportja a legteljesebben a Haskell nyelvi közösségben képviselteti magát , ezért magát a Haskellt is időnként „ a denotációs szemantika DSL-jeként ” emlegetik [7] . Ilyen például az Elm és más nyelvek, amelyek a funkcionális reaktív paradigmát képviselik , valamint a Curry nyelv . Időnként a Lisp kapcsán is előfordul egy hasonló kifejezés : " A Lisp nem egy nyelv, hanem egy keret a nyelvek fejlesztéséhez ." A Lisp tetején implementált nyelv például a Qi [ . A CamlpX fordítómodulon keresztül sok beágyazható mini-nyelv van megvalósítva az OCaml nyelven. A Rebol nyelvet programozásra is tervezték, beágyazható mini-nyelvek erőteljes implementációjával. A Lisp Scheme dialektusa a nem Turing teljes SXML nyelvet valósítja meg az S-kifejezési nyelv segítségével, amely beágyazható módon valósítja meg az XML protokollt .

Egy beágyazható nyelvnek lehet önellátó Turing-teljes szemantikája, de ennek ellenére a független implementáció helyett használja újra az alapnyelv komponenseit (a harmadik csoport, az első kettő keveréke). Meglepő példa erre a Schelog [15] nyelv, amely a Prolog szemantikáját a Lisp dialect Scheme -en belül valósítja meg folytatásokon keresztül , és a Prolog-ot "önálló" nyelvből beágyazható nyelvvé alakítja. A hagyományos oktatási vagy „sport” feladat számos funkcionális nyelv esetében egy másik nyelv megvalósítása a vizsgált nyelv mellett, leggyakrabban az elsőrendű predikátumlogika nyelve [16] .

A metanyelvekkel összefüggésben az önálló nyelveket néha "első osztályú nyelveknek" nevezik (hasonlóan a nyelvek első osztályú entitásaihoz ), a beágyazott nyelveket pedig néha "objektumnyelveknek".

Az esetek túlnyomó többségében a beágyazott nyelveknek csak egy támogatott megvalósítása van, és a kódok gépi megjelenítésének különbségei csak a használt alapnyelvi fordítótól függenek. Vannak azonban kivételek – például a Concurrent ML (CML) nyelvnek, amely kiterjeszti a Standard ML -t az explicit párhuzamosság konstrukcióival , két alapvetően eltérő megvalósítása van.

Vizuális nyelvek

Az egyik nyelv (alap vagy beágyazott) lehet vizuális , amelyet gyakran használnak a felhasználói programozásban ( végfelhasználói fejlesztés ) .  Az ilyen párok tipikus példái az AutoLisp  - AutoCAD és a VBA  - Microsoft Excel . Az ilyen párok egy teljes interaktív rendszert alkotnak, és a felhasználó szemszögéből lehetetlen (és nem is szükséges) megállapítani, hogy a vizuális eszközök a beépített szövegnyelv parancsait utánzó kiegészítők-e, vagy a szöveg a nyelv vezérli a vizuális eszközöket. A tényleges kapcsolatok ezekben a párokban a fejlesztőn múlik.

Az Emacs  - Emacs Lisp párban a kapcsolat határozottabb. A Lisp-et hagyományosan a metanyelvek közé sorolják , és ebben az esetben egy szövegszerkesztőt építenek rá, mint vizuális DSL-t, ami ez utóbbit változtathatóvá és bővíthetővé teszi.

Abban az esetben, ha mindkét nyelv vizuális, a beágyazott nyelveket általában más kifejezésekkel nevezik - beépülő modulok , szűrők stb., és nem használják a nyelvorientált programozás terminológiáját. Formálisan például azt mondhatjuk, hogy sok beágyazható vizuális mini-nyelv létezik az Adobe Photoshop grafikus feldolgozásának vizuális meta-nyelvéhez (lásd a Photoshop bővítményt ).

A funkcionális és logikai programozási nyelvek természetellenesnek tűnnek vizuális környezetben, mivel a funkcionális programozás és a tiszta logikai programozás tiltja a mellékhatásokat és a grafikus felület interakcióját ; fogalmi integritásukat meg kell sérteni. Pedagógiai szempontból kívánatosnak tartják a programozást konzoleszközökkel tanítani annak érdekében, hogy a hallgatók figyelme az algoritmizálás alapjaira összpontosuljon, és ne az ergonómiára, és még kevésbé az egyes IDE -k használatának procedurális készségeire [17] .

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

Egy adott feladatban egy általános célú nyelv helyett egy adott DSL használatának előnyei és hátrányai sokkal világosabbak, mint egy általános célú nyelv használatának előnyei és hátrányai egy másik helyett: a legtöbb esetben egy már kifejlesztett DSL egyes feladatokra fogalmilag nem alkalmazható, másoknál pedig vitathatatlan előnyt biztosít a legtöbb minőségi mutatóban , és egyes részfeladatok általában megoldatlanok maradnak a DSL kifejlesztéséig [4] .

Így az előnyök és hátrányok kérdését a kész DSL kezdeti hiányában helyesebb egy nyelvorientált módszertan használatának tükrében feltenni, összehasonlítva a használatból származó potenciális hasznot a fejlesztésének és karbantartásának költségeit.

Lásd még

Jegyzetek

  1. A. Ya. Friedland, L. S. Chanamirova. Informatika és számítástechnika: alapfogalmak: magyarázó szótár. - Astrel, 2003.01.01. — 270 s. — ISBN 9785170145461 .
  2. Bentley - Kis nyelvek, 1986 .
  3. Martin Ward honlapja
  4. 1 2 3 Ward - Language Oriented Programming, 1994 .
  5. Martin Fowler . Language Toolkit: New Life for Domain Languages ​​. – 2005.
  6. Szergej Dmitrijev ( JetBrains ). Nyelvorientált programozás: A következő paradigma  // = RSDN Magazine . – 2005.
  7. 1 2 3 4 Hudak – Moduláris tartományspecifikus nyelvek és eszközök, 1998 .
  8. 1 2 Taha – Domain-specifikus nyelvek, 2008 .
  9. Brett D. Hirsch. Digitális humán pedagógia: gyakorlatok, alapelvek és politika . - Nyitott Könyvkiadó, 2012. - 450 p. — ISBN 9781909254251 .
  10. Mernik, 2012 .
  11. 1 2 Czarnecki, O'Donnell, Striegnitz, Taha - DSL implementáció metaocaml-ban, haskell sablon és C++, 2004 .
  12. Bernard Berthomieu. OO programozási stílusok ML-ben . – LAAS jelentés #2000111, Center National De La Recherche Scientifique Laboratoire d'Analysis et d'Architecture des Systems, 2000.
  13. Cselló - könyvtár, amely magasabb szintű programozást vezet be a C-be
  14. Hopcroft, Motwani, Ullman - Automata elmélet, nyelvek és számítástechnika, 2001 .
  15. Schelog, 2003 .
  16. Paulson - ML for the Working Programmer, 1996 .
  17. Igor Golovin, Andrej Sztoljarov. Multi-paradigma megközelítés a programozás oktatásához és a szabad szoftver szerepéhez // Lomonoszov Moszkvai Állami Egyetem, A szabad szoftverfejlesztők II. - Obninsk városa, 2005.

Irodalom

Linkek