Een domein specifieke taal (Engels: Domain-Specific Language, DSL) is een programmeertaal die is ontworpen voor een specifiek toepassingsdomein, in tegenstelling tot een algemene programmeertaal (General-Purpose Language, GPL) zoals C, Java of Python. DSL’s bieden concepten en constructies die direct aansluiten bij het probleemgebied waarvoor ze bedoeld zijn, waardoor ze vaak expressiever, leesbaarder en productiever zijn binnen dat domein.
Geschiedenis Het concept van domein specifieke talen bestaat al sinds de jaren 1960:
1960s–1970s: vroege DSL’s zoals SQL-achtige querytalen en hardwarebeschrijvingstalen 1980s: opkomst van talen als AWK, make, en MATLAB 1990s: formalisering van het begrip DSL in software-engineeringliteratuur 2000s: groei door model-gedreven ontwikkeling (Model-Driven Engineering) 2010s–heden: sterke toename door DevOps, cloud, data-analyse en embedded DSL’s
De term Domain-Specific Language werd breed bekend door publicaties van Martin Fowler en anderen in de software-architectuurwereld.
Beschrijving Doel Het belangrijkste doel van een domein specifieke taal is:
het vereenvoudigen van taken binnen een specifiek domein, het verkleinen van de kloof tussen domeinexperts en programmeurs, het verminderen van fouten door domeinregels expliciet vast te leggen, het verhogen van productiviteit en onderhoudbaarheid.
Een DSL maakt het mogelijk om oplossingen te beschrijven in termen die domeinexperts herkennen, in plaats van lage-niveau programmeerconcepten.
Kenmerken DSL’s hebben een aantal voordelen, maar ook enkele nadelen. De voordelen zijn hoge expressiviteit binnen het domein, dikwijls kortere en duidelijkere code met minder domeinfouten en een betere communicatie met stakeholders. De nadelen zijn echter de beperkte toepasbaar buiten het domein, de ontwikkeling en onderhoud van de DSL kost tijd en de talen zijn soms minder performant of flexibel en hebben een extra leercurve voor de aangepaste tooling.
Types Er zijn twee types, met name:
Interne DSL (Embedded DSL): Een DSL die is ingebed in een bestaande programmeertaal. Voorbeelden zijn LINQ in C# en RSpec in Ruby.
Externe DSL: Een zelfstandige taal met eigen syntaxis en parser. Voorbeelden van dit type zijn: SQL, HTML en CSS.
Gebruik Domein specifieke talen worden gebruikt wanneer een probleem regelmatig voorkomt binnen hetzelfde domein, als de algemene programmeertalen te complex of te omslachtig zijn, als niet-programmeurs (bijv. analisten, systeembeheerders) de taal moeten kunnen gebruiken en indien een formele beschrijving van regels, configuraties of processen nodig is.
Ze worden vaak toegepast voor configuraties, in query’s en rapportage, voor automatisering, in modellering en in embedded systemen.
Voorbeelden De TIOBE-index is een maatstaf voor de populariteit van programmeertalen, ontwikkeld en beheerd door het Nederlandse TIOBE Software BV. TaalTOIBE-indexDomeinDoelSQL8DatabasesGegevens opvragen en manipulerenHTML & CSS -Webpagina’sStructuur en presentatie pagina’sRegex -TekstverwerkingPatroonherkenningMATLAB14Numerieke en wetenschappelijke berekeningenTerraform (HCL) -Infrastructuur als codeDeclaratieve cloudconfiguratieGherkin -Software-acceptatietestsBeschrijven van gedrag in natuurlijke taal
Vergelijking met GPLs AspectDSLsGPLsGebruikSmal en domeinspecifiekVeelzijdig en breed toepasbaarAbstractieniveauHoog niveau, domeinspecifiekLager niveau, veelzijdigExpressiviteitZeer expressief binnen het domeinMogelijk meer code nodig voor andere domeinenGebruiksgemakGebruiksvriendelijk voor domeinexpertsMogelijk steilere leercurveIntegratieStrakke integratie met specifieke domeinenVeelzijdig, maar mogelijk aanpassing nodigBeperking van foutenDwingt domein specifieke beperkingen afFouten door domeinmismatchOntwikkelingstijdVerkort de ontwikkeltijd binnen het domeinMogelijk meer code en tijd nodigHerbruikbaarheidComponenten kunnen binnen hetzelfde domein worden hergebruiktAlgemene bibliotheken beschikbaarOnderhoudEenvoudiger onderhoud binnen het domeinComplexer onderhoud naarmate de codebase groeit
Literatuur
Categorie:Programmeertaal