Der Arbeitsbereich Programmiersprachen nimmt am Graduiertenkolleg Embedded Microsystems teil.
Eine DSL ist eine Sprache, die auf eine
bestimmte Klasse von Problemen und Anwendungen
(domains) zugeschnitten ist. In einer DSL können
Anwendungsexperten ihre Probleme ausdrücken, ohne im
herkömmlichen Sinne zu programmieren. Durch Ausnutzung von
Wissen über die spezifische Anwendung, kann ein DSL-Compiler besseren
Kode erzeugen als Compiler für gewöhnliche
Programmiersprachen, und das mit einem Bruchteil des Programmieraufwands.
In diesem Bereich beteiligen wir uns am DFG Graduiertenkolleg "Embedded Microsystems"
Funktionale Programmiersprachen eignen sich gut als Wirtssprachen für sogenannte offene oder eingebettete DSLs, die man auch als Bibliotheken für gewöhnliche Programmiersprachen auffassen kann. Dieses Konzept verhindert nicht, dass der Experte einer Domain programmieren muss, aber die offene DSL erbt alle Abstraktionsmittel und auch die Entwicklungswerkzeuge von der Wirtssprache.
Wir verfolgen diesen Ansatz in zwei Projekten, in denen die Sprache Haskell benutzt wird. Im Projekt WASH entwerfen wir eine DSL um Web-Seiten zu erstellen und XML-Daten zu manipulieren. Im Projekt HaGen erstellen wir eine DSL zur Metaprogrammierung.
Partielle Auswertung (Programmspezialisierung) ist ein weiterer Ansatz zur Implementierung von sog. geschlossenen DSLs. Aus einem optimierten Interpreter für eine DSL kann ein partieller Auswerter auf Knopfdruck einen optimierenden Compiler für die DSL erstellen. Unser Spezialisierungssystem PGG stellt ein solches Werkzeug für die Programmiersprache Scheme zur Verfügung. Das System hat viele Anwendungen und wird kontinuierlich erweitert und verbessert. Ein aktuelles Anwendungsthema ist das sichere Kompilieren von mobilem Kode (z.B. Applets).
Das MLOPE Projekt entwickelt ein Werkzeug zur partiellen Auswertung für eine kompliziertere Sprache (Standard-ML). Weiterhin untersuchen wir die theoretischen Grundlagen der Programmerzeugung für objektorientierte Sprachen.