Forschung in der Arbeitsgruppe für Programmiersprachen und Übersetzerkonstruktion

Der Fokus unserer Forschung liegt in der Entwicklung, Implementierung und Anwendung von Programmiersprachen, welche die zuverlässige Realisierung komplexer Softwaresysteme unterstützen. Motiviert ist dies durch die Tatsache, dass Programmierfehler zu Systemfehlern führen können, die sehr große Kosten verursachen (z.B. Absturz der Ariane 5, kurzfristige Sicherheitupdates auf Millionen von Webservern). Viele dieser Programmierfehler können durch geeignete Programmiersprachen vermieden werden. Zum Beispiel nannte der Turing-Preisträger Tony Hoare die Einführung von Nullzeigern, die er 1965 vorgeschlagen hat und noch in vielen Programmiersprachen zu finden sind, auf Grund der dadurch verursachten Softwarefehler und deren Kosten als seinen "billion dollar mistake".

Aus diesen Gründen entwickeln wir Programmiersprachen und Programmierkonzepte, mit denen Fehler ausgeschlossen oder schon zur Übersetzungszeit entdeckt werden können. Zu diesem Zweck untersuchen wir nicht nur die grundlegenden Prinzipien von Programmiersprachen, sondern fassen auch Programme als Daten oder Objekte auf, welche generiert, analysiert und verifiziert werden, um zukünftig zuverlässigere Softwaresysteme zu entwickeln.

Kontakt

Prof. Dr. Michael Hanus

Christian-Albrechts-Platz 4

D-24118 Kiel

Raum: 706 (CAP 4)

Forschungsschwerpunkte

Programmiersprachen

In diesem Forschungsbereich untersuchen wir den Entwurf und die Implementierung moderner Programmiersprachen, welche insbesondere darauf abzielen, eine hohe Programmiersicherheit und Programmierproduktivität zu erzielen. Entsprechend stehen hier hohe Programmiersprachen mit einem deklarativen Programmiermodell und mächtigen Typsystemen im Fokus. Ebenso werden semantische Beschreibungen und verschiedene Techniken des Übersetzerbaus eingesetzt, um Programme effizient und zuverlässig zu übersetzen.

Programmierumgebungen

Die Integration der Ergebnisse der verschiedenen Forschungsbereiche erfolgt in entsprechenden Programmierumgebungen. Hierzu werden einerseits existierende Umgebungen angepasst, wie z.B. Language Server für Visual Code u.ä., als auch neue spezielle Werkzeuge und Umgebungen entwickelt, wie generische, modulare Programmanalysesysteme oder auch Codebrowser und Codevisualisierer.

Programmanalyse und Programmverifikation

In diesem Forschungsbereich werden Programme als Objekte interpretiert, welche analysiert und verifiziert werden. Hierzu setzen wir Techniken der Datenflussanalyse und abstrakten Interpretation ein, um Programme nicht nur zu optimieren, sondern auch die Verifikation zu unterstützen. Zur Programmverifikation verschiedener Programmaspekte nutzen wir sowohl automatische Beweissysteme (SMT) als auch interaktive Beweisassistenten wie Coq oder Agda.

Anwendungen

Zum Testen der entwickelten Konzepte erarbeiten wir auch Anwendungen, in denen diese Konzepte genutzt werden. Hierzu erforschen und entwickeln wir grundlegende Infrastrukturen zur Unterstützung von Anwendungsentwicklungen, wie z.B. Bibliotheken mit geeigneten Schnittstellen (APIs), Paketverwaltungssysteme und auch Programmgeneratoren für spezielle Anwendungsbereiche, z.B. die Generierung von Webanwendungen aus Datenbankmodellen basierend auf Entity-Relation-Spezifikationen. Eine konkrete Anwendung der entwickelten Techniken ist die Moduldatenbank des Instituts für Informatik, welche bei Akkreditierungen der Informatikstudiengänge als Vorbild für die CAU empfohlen wurde.