Domænespecifikt sprog

Domænespecifikt sprog ( eng.  domænespecifikt sprog , DSL  - " domænespecifikt sprog ") - et computersprog, der er specialiseret til et specifikt applikationsområde (i modsætning til et almindeligt sprog, der gælder for en lang række områder og ikke tager tage hensyn til karakteristika ved specifikke områder viden). Konstruktionen af ​​et sådant sprog og/eller dets datastruktur afspejler de specifikke opgaver, der er løst med dets hjælp [1] . Det er et nøglebegreb for sprogorienteret programmering .

Strengt taget er opdelingen af ​​programmeringssprog i generelle sprog og domænespecifikke sprog meget vilkårlig, især når man tænker på, at enhver protokol eller filformat formelt er en . Der er mange almene sprog, der bruges som domænespecifikke sprog til visse opgaver, og omvendt, domænespecifikke sprog, der bruges som generelle sprog. Således blev ML-sproget , som fødte en hel familie af almene sprog (inklusive Haskell ), oprindeligt udviklet som en DSL for LCF - sætningsbevissystemet . Et eksempel, der viser klassificeringens betingelser, er BNF -sproget (og compileren fra det Lex / Yacc ): på den ene side er dette et levende eksempel på et metasprog , på den anden side er det designet til en specifik opgave.

Terminologi

De enkleste domænespecifikke sprog, der bruges i en bestemt applikation, omtales ofte som "minisprog" [2] .

Martin Ward [ 3] brugte i sit arbejde "Language Oriented Programming" [4] (som betragtes som udgangspunktet for udviklingen af ​​LOP ), udtrykkene " problemorienteret " og " domæneorienteret ", men i det engelsktalende  videnskabelige fællesskab udtrykket " domænespecifikt ", desuden er det " domænespecifikt sprog ", og ikke " domænespecifikt programmeringssprog ". I den russiske litteratur om programmering er der muligheder " domænespecifik ", " problemorienteret ", " domæneorienteret ".

Fowler [5] og Dmitriev [6] definerer konceptet DSL som " et afklebet programmeringssprog (for det meste Turing ufuldstændigt ) ".

Eksempler

Førende forskere inden for sprogorienteret programmering (Martin Ward, Paul Hudak , Walid Taha og andre) nævner følgende eksempler på domænespecifikke sprog som klassiske [4] [7] [8] :

Ifølge Walid Tahi er Microsoft Excel fra LOPs synspunkt måske det mest udbredte programmeringssprog i verden [8] .

Andre eksempler på domænespecifikke sprog er databasestyringssprog (udover SQL her kan f.eks. FoxPro -sproget kaldes ), styresystems kommandosprog (interaktive kommandoskalsprog, primært Unix Shell , batch) jobsprog som JCL , etc. .) [9] , Turing ufuldstændige datastruktureringssprog ( XML , .ini , .conf), wiki markupsprog , modelleringssprog ( UML , GPSS ), Erlang for multi -brugerservere, der fungerer i uafbrudt tilstand.

Der er programmeringssprog indbygget i virksomhedens ressourcestyringssystem (ABAP-sprog i SAP / R3, sprogene fra Galaktika, Parus, 1C, Info-Accountant-systemer) og brugt til at supplere dem med organisationsspecifikke moduler. Brugen af ​​et indlejret sprog forenkler programmeringen af ​​specifikke opgaver, da sproget i første omgang indeholder fagområdets begreber. Nogle[ hvad? ] geografiske informationssystemer og CAD har også indbyggede programmeringssprog.

Andre eksempler:

Indlejrede sprog

Til tider implementeres computersprog på en afhængig måde, det vil sige "inde i" et oversat sprog, uden hvilket disse sprog ikke kun ikke kan udføres, men ofte ikke danner et sammenhængende symbolsystem og ikke har Turing fuldstændighed . Sådanne sprog kaldes " indlejrede domænespecifikke sprog " ( eng.  embedded DSL , EDSL ; nogle gange DSEL ) eller blot " indlejrede sprog " ( indlejrede sprog ) [7] [10] samt "sprog implementeret på øverst på eller baseret på dette sprog".

Tekstsprog

Ud over den traditionelle opdeling af sprog i fortolkede og kompilerede sprog, introducerer indlejrede sprog flere flere typer sprogimplementering:

På den anden side kan en implementering af et indlejret sprog ses som en " oversættelsesløs implementering ", hvilket antyder, at DSL vil være en syntaktisk og semantisk delmængde af det sprog, som det er indlejret i [11] .

Et sprog, der bruges som basissprog til implementering af et andet, omtales ofte som et metasprog .

Der er tre hovedårsager til at udvikle indlejrede tekstsprog:

De mest almindelige eksempler på sprog i den første gruppe er implementeringer af objektorienterede funktioner i funktionelle [12] eller proceduremæssige [13] sprog, og CLOS er et klassisk eksempel . Det skal bemærkes, at udtrykket "sprog" ikke altid bruges her - nogle gange taler de bare om " implementering af nye funktioner i sproget " eller om " udvidelse af sproget med et undersystem, der har til formål at løse bestemte opgaver ", og der er ingen streng opdeling i " biblioteker " og "indlejrede sprog" ", da formelt set enhver API , protokol eller datastruktur kan betragtes som et sprog [14] . Så for eksempel er en integreret del af Lisp-sproget et indbygget ikke-Turing komplet S-udtrykssprog .

Den anden gruppe af indlejrbare sprog er mest fuldt repræsenteret i Haskell -sprogsamfundet , og derfor omtales Haskell selv til tider som " DSL for denotationel semantik " [7] . Eksempler er Elm og andre sprog, der repræsenterer det funktionelle reaktive paradigme , samt Curry -sproget . Til tider er der også et lignende udtryk i forhold til Lisp : " Lisp er ikke et sprog, men en ramme for udvikling af sprog ." Et eksempel på et sprog implementeret oven på Lisp er Qi . En masse indlejrbare minisprog er implementeret i OCaml -sproget gennem CamlpX compilermodulet. Rebol - sproget blev også designet til programmering gennem omfattende implementering af indlejrbare minisprog. Scheme - dialekten af ​​Lisp implementerer det ikke-Turing-komplette sprog SXML ved hjælp af S-ekspressionssproget , som implementerer XML -protokollen på en indlejrbar måde.

Et indlejret sprog kan have en selvforsynende Turing-komplet semantik, men ikke desto mindre, i stedet for en uafhængig implementering , genbrug komponenter af basissproget (den tredje gruppe, en blanding af de to første). Et slående eksempel er sproget Schelog [15] , som implementerer semantikken i Prolog inde i Lisp-dialektskemaet gennem fortsættelser og gør Prolog fra et "standalone" sprog til et indlejret sprog. Den traditionelle uddannelses- eller "sports"-opgave for mange funktionelle sprog er implementeringen af ​​et andet sprog oven i det sprog, der overvejes, oftest sproget i førsteordens prædikatlogik [16] .

I forbindelse med metasprog kaldes selvstændige sprog nogle gange "førsteklasses sprog" (svarende til førsteklasses enheder i sprog), og indlejrede sprog kaldes nogle gange "objektsprog".

I langt de fleste tilfælde har indlejrede sprog kun én understøttet implementering, og forskelle i den resulterende maskinrepræsentation af koden i dem afhænger kun af den anvendte basissprogoversætter. Der er dog undtagelser - for eksempel har Concurrent ML (CML) sproget, som udvider Standard ML med konstruktioner til eksplicit parallelisme , to fundamentalt forskellige implementeringer.

Visuelle sprog

Et af sprogene (baseret eller indlejret) kan være visuelt , hvilket ofte bruges i brugerprogrammering ( slutbrugerudvikling ) .  Typiske eksempler på sådanne par er AutoLisp  - AutoCAD og VBA  - Microsoft Excel . Sådanne par danner et komplet interaktivt system, og det er umuligt (og ikke nødvendigt) at afgøre fra brugerens synspunkt, om de visuelle værktøjer er en tilføjelse, der efterligner kommandoerne i det indbyggede tekstsprog, eller om teksten sproget styrer de visuelle værktøjer. De faktiske forhold i disse par er op til udvikleren.

I et par Emacs  - Emacs Lisp er forholdet mere defineret. Lisp er traditionelt klassificeret som et metasprog , og i dette tilfælde er der bygget en teksteditor oven på det som en visuel DSL, som gør sidstnævnte foranderlig og udvidelsesbar.

I det tilfælde, hvor begge sprog er visuelle, kaldes indlejrede sprog normalt af andre termer - plug- ins , filtre osv., og bruger ikke terminologien for sprogorienteret programmering. Formelt kan vi for eksempel sige, at der er mange indlejrbare visuelle minisprog til det visuelle metasprog til grafikbehandling Adobe Photoshop (se Photoshop-plugin ).

Funktionelle og logiske programmeringssprog ser unaturlige ud i et visuelt miljø, da funktionel programmering og ren logisk programmering forbyder bivirkninger, og for GUI- interaktion ; deres konceptuelle integritet skal krænkes. Fra et pædagogisk synspunkt anses det for ønskeligt at undervise i programmering ved hjælp af konsolværktøjer for at fokusere elevernes opmærksomhed på det grundlæggende i algoritmisering, og ikke på ergonomi, og endnu mindre på proceduremæssige færdigheder ved brug af visse IDE'er [17] .

Fordele og ulemper

Fordelene og ulemperne ved at bruge et specifikt DSL i stedet for et almindeligt sprog i en bestemt opgave er meget tydeligere end fordelene og ulemperne ved at bruge et almindeligt sprog i stedet for et andet: i de fleste tilfælde viser en allerede udviklet DSL sig at være konceptuelt uanvendelig til nogle opgaver og giver en ubestridelig fordel i de fleste kvalitetsindikatorer i andre, og nogle delopgaver forbliver generelt uløste indtil udviklingen af ​​DSL [4] .

Spørgsmålet om fordele og ulemper er således mere korrekt at rejse i lyset af brugen af ​​en sprogorienteret metode i stedet for enhver anden i det oprindelige fravær af en færdiglavet DSL, idet man sammenligner den potentielle gevinst ved brugen af ​​den med omkostninger til udvikling og vedligeholdelse.

Se også

Noter

  1. A. Ya. Friedland, L. S. Chanamirova. Informatik og computerteknologi: grundlæggende termer: forklarende ordbog. - Astrel, 2003.01.01. - 270 sek. — ISBN 9785170145461 .
  2. Bentley - Little languages, 1986 .
  3. Martin Wards hjemmeside
  4. 1 2 3 Ward - Language Oriented Programming, 1994 .
  5. Martin Fowler . Language Toolkit: New Life for Domain Languages ​​. - 2005.
  6. Sergey Dmitriev ( JetBrains ). Sprogorienteret programmering: Det næste paradigme  // = RSDN Magazine . - 2005.
  7. 1 2 3 4 Hudak - Modular Domain Specific Languages ​​and Tools, 1998 .
  8. 1 2 Taha - Domain-Specific Languages, 2008 .
  9. Brett D. Hirsch. Digital humanistisk pædagogik: praksis, principper og politik . - Open Book Publishers, 2012. - 450 s. — ISBN 9781909254251 .
  10. Mernik, 2012 .
  11. 1 2 Czarnecki, O'Donnell, Striegnitz, Taha - DSL-implementering i metaocaml, template haskell og C++, 2004 .
  12. Bernard Berthomieu. OO programmeringsstile i ML . — LAAS-rapport #2000111, Centre National De La Recherche Scientifique Laboratoire d'Analyse et d'Architecture des Systèmes, 2000.
  13. Cello - bibliotek, der introducerer programmering på højere niveau til C
  14. Hopcroft, Motwani, Ullman - Theory of Automata, Languages ​​and Computing, 2001 .
  15. Schelog, 2003 .
  16. Paulson - ML for den arbejdende programmør, 1996 .
  17. Igor Golovin, Andrey Stolyarov. Multi-paradigme tilgang til undervisning i programmering og rollen som fri software // Lomonosov Moscow State University, Abstracts of the II Conference of Free Software Developers "On Protva". - Byen Obninsk, 2005.

Litteratur

Links