Zum Hauptinhalt springen

DSL (Domänenspezifische Sprache)

Eine DSL (Domänenspezifische Sprache, englisch: Domain-Specific Language**)** ist eine Programmier- oder Modellierungssprache, die auf ein klar abgegrenztes Fachgebiet zugeschnitten ist. Statt universell einsetzbar zu sein wie Java oder C, bildet sie Konzepte, Regeln und Vokabular genau einer Domäne ab — etwa Versicherungstarife, Steuergeräte-Konfigurationen oder Zustandsautomaten.

Abgrenzung: DSL vs. General-Purpose Language

Allzwecksprachen (General-Purpose Languages, GPLs) wie Java, C oder Python sind darauf ausgelegt, beliebige Probleme zu lösen — sie machen keine Annahmen über die Domäne. Eine DSL geht den umgekehrten Weg: Sie verzichtet bewusst auf Universalität und bietet dafür eine höhere Abstraktion und eine Notation, die sich für Fachexperten natürlich anfühlt. Zwei allgemein bekannte DSLs sind SQL (zugeschnitten auf Abfragen relationaler Datenbanken) und HTML (zugeschnitten auf die Strukturierung von Web-Dokumenten): Beide sind in ihrer Domäne mächtig, außerhalb davon aber unbrauchbar — und genau das ist der Punkt.

Interne und externe DSLs

  • Interne (eingebettete) DSLs werden innerhalb einer Wirtssprache umgesetzt, etwa als Fluent API in Kotlin oder Ruby. Sie sind schnell gebaut, bleiben aber an Syntax und Werkzeuge der Wirtssprache gebunden.
  • Externe DSLs haben eine eigene Syntax und eigene Werkzeuge: Editor mit Code-Completion, Validierung beim Tippen, Codegenerator oder Interpreter. Sie werden typischerweise mit einer Language Workbench wie Xtext oder JetBrains MPS entwickelt.

Ein Mini-Beispiel

Eine (vereinfachte) externe DSL für Versicherungstarife könnte so aussehen:

tarif Hausrat2026 {
  basisbeitrag       89,00 EUR
  zuschlag fahrrad   12,5 %
  gilt-ab            01.01.2026
}

Fachexperten können solche Spezifikationen lesen und selbst schreiben — ohne Java-Kenntnisse. Ein Codegenerator übersetzt sie automatisch in ausführbaren Code, und die Sprache selbst verhindert fehlerhafte Eingaben: Ein Tarif ohne Gültigkeitsdatum wird schon im Editor als Fehler markiert, nicht erst im Test. Nach diesem Prinzip generiert etwa die Zurich Gruppe versicherungsmathematische Funktionen direkt aus einer DSL.

Nutzen im Software- und Systems Engineering

DSLs definieren nicht nur ein Vokabular — sie kodieren die Methodik selbst. Welche Konzepte existieren, welche Beziehungen erlaubt sind, welche Constraints gelten: Das ist Domänenwissen, das sonst in Köpfen oder Handbüchern steckt, gegossen in ausführbare Sprachkonstrukte. Daraus ergeben sich die zentralen Vorteile:

  • Fachexperten arbeiten im eigenen Vokabular — die Distanz zwischen Fachlichkeit und Implementierung schrumpft.
  • Validierung beim Tippen — methodische Regeln werden strukturell erzwungen statt dokumentiert.
  • Konsistente Codegenerierung — aus einem Modell entstehen automatisiert Code, Konfiguration oder Dokumentation.
  • Wissen bleibt im Unternehmen — im Metamodell kodiert statt nur in den Köpfen einzelner Experten.

DSLs in der Praxis: Die Sprache ist nur der Anfang

Ob sich eine DSL lohnt, entscheidet sich vor der ersten Zeile Grammatik: in der Analyse, wie die Experten einer Domäne tatsächlich arbeiten und welche Konzepte ihre Methodik ausmachen. Nicht jede Domäne braucht eine eigene Sprache — manchmal ist eine Standardnotation wie UML mit einem projektspezifischen Profil die präzisere und günstigere Lösung. Und eine DSL ohne gute Werkzeugunterstützung (Editor, Validierung, Generator) wird von Fachexperten schlicht nicht angenommen. Entscheidend ist daher weniger die Sprache selbst als das Zusammenspiel aus Sprachdesign, Tooling und Integration in die bestehende Toolchain.

Häufige Fragen

Was ist der Unterschied zwischen einer DSL und einer General-Purpose Language?
Eine General-Purpose Language (GPL) wie Java, C oder Python ist universell einsetzbar und macht keine Annahmen über das Anwendungsgebiet. Eine DSL ist bewusst eingeschränkt: Sie kennt nur die Konzepte einer bestimmten Domäne, bietet dafür aber eine höhere Abstraktion, kompaktere Notation und domänenspezifische Validierung.
Was unterscheidet interne und externe DSLs?
Eine interne DSL wird innerhalb einer Wirtssprache umgesetzt, etwa als Fluent API in Kotlin oder Ruby — sie nutzt deren Syntax und Werkzeuge mit. Eine externe DSL hat eine eigene Syntax und braucht eigene Werkzeuge (Parser oder Projektionseditor, Validierung, Generator), die typischerweise mit einer Language Workbench wie Xtext oder JetBrains MPS gebaut werden.
Wann lohnt sich eine eigene DSL?
Wenn eine Domäne klar abgegrenzt ist, viele Personen mit unterschiedlichem technischen Hintergrund an derselben Art von Spezifikation arbeiten oder ganze Fehlerklassen durch die Sprachstruktur ausgeschlossen werden sollen. Ist die Domäne noch instabil oder reicht eine Standardnotation wie UML mit Profilen aus, ist eine eigene Sprache meist nicht der richtige Weg.

Verwandte Begriffe

Fachlich geprüft von Andreas Mülder, Principal Software Engineer am 20. Juli 2026