Sprach-Design und Compilerbau für Multiparadigmen-Sprachen

Programmiersprachen werden oft an Hand von Programmierparadigmen klassifiziert, beispielsweise in imperative, funktionale, logische, constraint-basierte, objektorientierte und aspektorientierte Sprachen. Dabei charakterisiert ein Paradigma Stil, Konzepte und Methoden einer Sprache zur Beschreibung von Zuständen und Abläufen und zur Lösung von Problemen. Auf diese Weise unterstützen verschiedene Paradigmen die Programmierung von Applikationen unterschiedlicher Anwendungsgebiete. Zum Beispiel erlauben objektorientierte Sprachen dem Programmierer sein Programm als Kollektion interagierender Objekte zu betrachten, Datenbank-Programmiersprachen ermöglichen die Verwaltung und strukturierte Handhabung großer Datenmengen und logische sowie constraint-basierte Programmiersprachen eignen sich besonders, um Such- und Optimierungsprobleme zu beschreiben.

Da reale Anwendungen oft Aspekte verschiedener solcher Bereiche in sich vereinen, ist eine Kombination von Konzepten verschiedener Paradigmen in Multiparadigmen- Programmiersprachen vorteilhaft und erwünscht. Beispiele multiparadigmatischer Sprachen sind Ada zur verteilten, nebenläufigen, imperativen und objektorientierten Programmierung, Common Lisp in Verbindung mit dem Common Lisp Object System zur funktionalen, imperativen und objektorientierten Programmierung, zahlreiche Constraint-Bibliotheken, wie z.B. Choco und Gecode, zur Integration von Constraints in Sprachen anderer Paradigmen und auch die Microsoft-Softwareplattform .NET zur Integration von Anwendungen, die in verschiedenen Programmiersprachen geschrieben wurden.

Im Bereich der Multiparadigmen-Programmierung beschäftigen wir uns mit der Integration von Constraints in deklarative und imperative Sprachen (Multiparadigm Constraint Programming), sowohl in der Theorie als auch mit dem Ziel der Implementierung von Sprachen und entsprechenden Übersetzungswerkzeugen. Beispiele für solche Sprachen sind

  • die funktionallogische Sprache Brooks, die die Integration von verschiedenen Narrowing-Strategien erlaubt,
  • die constraint-imperative Sprache Turtle und die C++-Bibliothek Turtle++ zur constraint-imperativen Programmierung sowie
  • die Sprache CCFL.