Du hast deinen AdBlocker an?

Es wäre ein Traum, wenn du ihn für t3n.de deaktivierst. Wir zeigen dir gerne, wie das geht. Und natürlich erklären wir dir auch, warum uns das so wichtig ist. Digitales High-five, deine t3n-Redaktion

t3n 10

Entwickeln domänenspezifischer Sprachen mit Ruby: Auf dem Weg zur nächsten Programmiersprache

    Entwickeln domänenspezifischer Sprachen mit Ruby: Auf dem Weg zur nächsten Programmiersprache

Der folgende Artikel soll einen Einblick in die Entwicklung von domänenspezifischen Sprachen mit Ruby geben und dabei die wichtigsten Mittel des Sprachdesigns erläutern. Anhand eines Beispiels wird gezeigt, wie die notwendige Grammatik, der Lexer und der Parser definiert werden.

Im Laufe der Jahre hat die Popularität von Ruby stetig zugenommen, die Anzahl verfügbarer Anwendungen steigt mit jedem Tag. Doch hat dies nicht nur Vorteile für den Entwickler – so muss er immer komplexere Programmierschnittstellen (API) verstehen und beherrschen, um ein gewünschtes Problem lösen zu können. Trotz der Flexibilität von Ruby, die hoch geschätzt wird, gibt es immer wieder Sachverhalte, die man anders ausdrücken möchte beziehungsweise der eben noch geschriebene Programmcode fühlt sich einfach nicht gut an. In diesem Fall hat man wahrscheinlich Code geschrieben, der einen bestimmten Zustand mit einer bestimmten Semantik beschreibt und versucht, ein bestimmtes Problem innerhalb dieses eingeschränkten Kreises – der Domäne – zu lösen. Im nun folgenden Refactoring-Schritt würde man die API solange anpassen, bis diese sich gut in das Programmiermodell einbettet. Mit der Optimierung des geschriebenen Codes wurde schon der erste Schritt zu einer domänenspezifischen Sprache (DSL) getan, auch wenn man es auf den ersten Blick nicht glauben mag.

Doch bevor nun näher auf die eigentliche Sprache eingegangen wird, soll zuerst kurz definiert werden, was eine domänenspezifische Sprache überhaupt ist: Sie beschreibt ein Programmiermodell, das auf eine bestimmte Situation beschränkt ist und Verallgemeinerungen bewusst außen vor lässt, um sich voll und ganz dem eigentlichen Problem zu widmen. Dabei wird bei der DSL zwischen zwei verschiedenen Arten – interne und externe DSL – unterschieden. Die interne DSL probiert, den gewünschten Sachverhalt ganz mit den Mitteln der Wirtssprache auszudrücken. Ein Beispiel für ein solches Paradigma ist das bekannte Framework ActiveRecord aus Ruby on Rails. Hier werden durch geschickten Umgang mit den sprachlichen Mitteln von Ruby die Modelle mit deklarativen Mitteln definiert, die im Prinzip nicht zu der typischen imperativen Syntax passen. Eine externe DSL erkennt man daran, dass diese von einem Parser analysiert und dann von einem Interpreter verarbeitet wird – ein typisches Beispiel ist ein Bash-Skript unter Linux/Unix. Die Bash ist auf eine ganz bestimmte Domäne eingeschränkt, die möglichen Operationen der Sprache sind speziell auf den Umgang mit Dateien und Verzeichnissen optimiert.

Bitte beachte unsere Community-Richtlinien

Schreib den ersten Kommentar!

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden