DSL (domain specific language)

Eine Domain Specific Language (DSL) ist hinsichtlich eines ganz bestimmten Anwendungsgebietes - der Anwendungsdomäne - ausgerichtet. Mit dem Hintergrund von spezifischen Sprachelementen und der Begriffswelt der Anwendungsdomäne, kann man die typischen Aufgabenstellungen aus dieser Domäne realisieren. Die Notation kann auf textueller oder grafischer Basis erfolgen.


Die domänenspezifischen Sprachen stehen im Gegensatz zu universellen Programmiersprachen wie C++, Java und Modellierungssprachen wie der Unified Modelling Language (UML) oder dem Fundamental Modelling Concepts (FMC). Durch Verwendung einer Domain Specific Language kann der Aufwand in der Spezifizierung und Implementierung von Software deutlich reduziert werden. Darüber hinaus wird das Expertenwissen des Anwendungsgebietes verständlicher ausgedrückt, die fachlichen Anforderungen besser erfüllt sowie die Fehleranfälligkeit von Software erheblich verbessert.

Die traditionelle Art der Entwicklung von Software führt über die Spezifizierung, die Implementierung und den Test einer Anwendung, wobei jeder dieser Phasen mit einer besonderen Problemstellung verbunden ist. Diesen im Kern zu begegnen, ist die grundlegende Idee von domänenspezifischen Sprachen. Dabei werden zuvor identifizierte Teile der Software nicht mehr mit universellen Programmiersprachen wie Java, C# oder C++ entwickelt, sondern es werden Sprachen verwendet, die auf eine spezifische Lösung der Problemstellung ausgerichtet sind. Der mit einer DSL-Sprache entwickelte Programmcode kann dann - unter Anwendung entsprechender Werkzeuge - ohne weiteres in den Quellcode einer universellen Programmiersprache transformiert werden. Diese decken durch ihre Ausdrucksmächtigkeit eine Vielzahl von Anwendungsmöglichkeiten ab; die domänenspezifische Sprache konzentriert sich ausschließlich auf das gestellte Teilproblem, so dass der Sprachumfang der DSL im Vergleich mit der universellen Programmiersprache deutlich reduziert ist.

Das Konzept der domänenspezifischen Sprache

Entwicklungsprozess mit einer DSL

Entwicklungsprozess mit einer DSL

Das Konzept der Domain Specific Languages unterscheidet in interne und externe DSLs:

Dabei kennzeichnet interne DSLs die direkte Nutzung der Ausdrucksmittel einer Sprache. Bei internen DSLs wird die syntaktische Überprüfung des Codes durch den Compiler oder Interpreter durchgeführt, somit brauchen sie keinen speziellen Parser. Moderne Sprachen wie Groovy oder Ruby unterstützen durch ihre flexible Syntax das Schreiben von DSLs. Aber auch die UML 2.0 mit entsprechend gekoppelter Codeerzeugung ist hier einzuordnen.

Als externe DSLs werden solche DSLs bezeichnet, die für ihre Ausführung die Umwandlung in eine andere Sprache oder einen speziellen Interpreter voraussetzen. Beispiele für externe Domain Specific Languages sind die Datenbanksprache SQL oder RegEx zur einfachen Definition von Stringmustern, was umgesetzt in einer universellen Programmiersprache erheblichen Codeaufwand produzieren würde.

Domänenspezifische Sprachen haben, unterstützt durch die wachsende Anzahl von entsprechenden Werkzeugen, einen immer höheren Stellenwert in der Softwareentwicklung.

Es gibt eine Vielzahl von unterschiedlichen Anwendungsbereichen für DSLs, beispielhaft seien genannt:

  • AUI und SWUL für die GUI-Modellierung,
  • MSC für die Spezifikation von Telekommunikationssystemen,
  • NOWRA für die Software-Konfiguration,
  • PLS-Da für Datenbankanwendungen,
  • RISLA für die Softwareentwicklung von Finanzprodukten und
  • ORM zur Beschreibung von Beziehungen zwischen Datenbanktabellen,
Ebenso gibt es von Seiten der Werkzeuge - insbesondere auch im Open-Source-Bereich - leistungsfähige Unterstützung für die Erstellung und Nutzung einer Domain Specific Language.

Auch hier einige Beispiele:

  • GEMS und EMF als DSL-Toolset für Eclipse auf der Basis von Xtext,
  • MS Visual Studio beinhaltet DSL-Tools,
  • Tangible architect ist ein DSL-Tool,
  • Microsoft Oslo für textuelle und graphische DSLs,
  • MPS von JetBrains zum Bauen und Verwendung von textuellen DSLs und
  • MetaEdit+ für graphische DSLs.
Wesentliche Vorteile von DSLs sind, dass

  • der Codeaufwand reduziert wird,
  • die Konzepte der Sprache dem Problembereich entstammen,
  • eine definierte Syntax und Semantik vorliegt,
  • DSL-Programme sehr übersichtlich und leicht verständlich sind und
  • dass die Produktivität und Wartbarkeit verbessert wird
Dem stehen aber auch Nachteile gegenüber wie

  • der hohe Aufwand an Einarbeitung in Werk-zeuge und Methoden insbesondere bei externen DSLs im Verhältnis zu einem eingeschränkten Anwendungsbereich,
  • ein zusätzliches Management des Sprachumfangs von DSLs, um diese nicht zu verwässern und
  • dass durch einen erhöhten Codeaufwand es zu weniger effizientem Code kommen kann, was im Extremfall Auswirkungen auf die Performance der Software hat.

Einsatzszenarien von domänenspezifischen Sprachen

Betrachtet man die Einsatzszenarien, ist eine Domain Specific Language generell nicht geeignet, einen kompletten Anwendungsbereich abzudecken. Hier ist es sinnvoller, in sich geschlossene Aspekte oder Teile einer Anwendung durch DSLs abzudecken. Insbesondere ist die Verwendung von DSLs für Softwareteile mit häufigen Änderungen sinnvoll. Weiterhin ist der Gesichtspunkt der Performance beim Einsatz von DSLs zu beachten.

DSLs sind auch Gegenstand aktueller Forschungsthemen - in diesem Zusammenhang wird auch von Language Engineering gesprochen. Dabei werden das Umfeld von DSLs - wie Prozesse, Methoden und Techniken zum Aufbau von Sprachen - analysiert und weiterentwickelt. Ein interessanter Ansatz dabei ist, DSL nicht mehr nur als Problemlösung für einen bestimmten Anwendungsbereich anzusehen, sondern als Spracherweiterung ein Entwicklungsparadigma wie Aspekt-orientierte (AOP), Kontext-orientierte (COP) oder Feature-orientierte (FOP) Programmierung zu implementieren. Insbesondere bietet u.a. Groovy dieses Konzept der Spracherweiterungen. Weiterhin wird an Konzepten zur Multi-Paradigmen Programmierung in Ruby gearbeitet.

Informationen zum Artikel
Deutsch: Domänenspezifische Sprache
Englisch: domain specific language - DSL
Veröffentlicht: 08.11.2013
Wörter: 804
Tags: #Web-Software
Links: Aspekt, Aufwand, C++, Code, Compiler