"Ein Programm muss funktionieren“

code

Coden: Wer Programmierungen in C-Sprachen ändern will, dem vereinfacht Coccinelle die Arbeit. Foto: Joshua Aragon/Unsplash

Programme sollten für die Benutzer nützlich sein: Deshalb beschäftigt sich die Informatikerin Dr. Julia Lawall seit 2011 am Institut national de recherche en science et technologies du numeriques (Inria) mit Programmiersprachen und Systemcode. Die Wissenschaftlerin promovierte an der Indiana University, lehrte an der Universität Kopenhagen und stellt als Verantwortliche die Referent:innen und Vorträge zahlreicher Konferenzen zusammen. Zurzeit plant sie die USENIX ATC in Boston, eine Konferenz über moderne Betriebssysteme, die 2023 stattfinden wird. Lawall verbrachte gerade eine Arbeitswoche am Leibniz-Rechenzentrum (LRZ), um mit LRZ-Forscher Michele Martone gemeinsame Projekte anzustoßen. In einem Vortrag stellte sie aktuelle Themen rund um Coccinelle vor, einer Programmiersprache, die Änderungen in C-Codes vereinfacht und damit auch deren Optimierung. Im Interview spricht sie über ihre Arbeit und ihre Interessen.

Eine Woche am LRZ, was hatten Sie hier vor? Dr. Julia Lawall: Zusammen mit Michele Martone habe ich versucht, Coccinelle zu erweitern. Generell ist Coccinelle ein Werkzeug zum Umschreiben von C-Code, das besonders bei der Wartung des Linux-Kernels eingesetzt wird. Wir haben es bereits auf einer HPC-Codebasis eingesetzt, aber wir würden es gerne auf C++ ausweiten, damit es in der HPC-Community noch besser genutzt werden kann. In dieser Woche am LRZ arbeiteten wir an technischen Fragen und Arbeitsabläufen, bereiteten einen Antrag vor und planten gemeinsame Forschungsprojekte, die Coccinelle einbeziehen.

In Ihrem Vortrag am LRZ haben Sie über Coccinelle gesprochen, was ist das Interessante an diesem Tool? Lawall: Coccinelle ist eine Programmiersprache, mit der man die Änderungen an eigenen Codes oder Algorithmen beschreiben kann. Während des Programmierens trifft man ja oft einige schlechte Designentscheidungen und möchte sie später ändern. Die Änderung einer einzigen Entwurfsentscheidung kann aber viele sich wiederholende Änderungen in der gesamten Codebasis erfordern. Das Ziel von Coccinelle ist es, solche systematischen Änderungen in großem Umfang zu automatisieren. Wenn Sie zum Beispiel Ihre Datenstrukturen doch anders organisieren wollen, müssten Sie alle Stellen im Code aktualisieren, die darauf zurückgreifen. Wir versuchen, dies in Coccinelle zu automatisieren, indem wir es ermöglichen, Änderungen auf eine sehr benutzerfreundliche Weise zu spezifizieren. Anwender:innen sollten in der Lage sein, Muster zu schreiben und zu entscheiden, was sie entfernen oder hinzufügen wollen.

Normalerweise arbeiten Sie bei Inria in Paris, was sind Ihre Aufgaben dort? Lawall: Ich leite eine Forschungsgruppe, die sich mit Systemcode beschäftigt. Die Gruppe ist recht klein, wir bestehen im Wesentlichen aus zwei Forschenden und Studierenden, die an allen Aspekten von Systemcode interessiert sind, etwa an der Verbesserung der Wartbarkeit oder der Leistung, hauptsächlich im Linux-Kernel. Und wir erforschen Prozesse der formalen Verifikation.

Programmiersprachen sind Ihr Hauptinteresse, welche Sprachen sind für Ihre Arbeit interessant? Lawall: Meine Arbeit zielt im Moment auf die Sprache C, weil wir den Linux-Kernel erkunden und optimieren wollen, der in C geschrieben ist. Wenn ich entwickle, benutze ich OCaml, eine funktionale Sprache, die sich gut für das Schreiben von Compilern oder – allgemeiner ausgedrückt – für Werkzeuge eignet, die einmal andere Programme verarbeiten. Wer an der Zuverlässigkeit von Code interessiert ist, setzt indes auf Rust. Hoffentlich kann ich mich bald intensiver damit beschäftige.

Woher kommt Ihr Interesse an Programmiersprachen? Lawall: Generell interessiere ich mich für Sprachen und Funktionsweisen von Hard- und Software. Ein Programm muss funktionieren, dafür entwickelt man Code in einer Programmiersprache. Der Compiler muss anschließend herausfinden, wie dieser funktioniert oder muss – bei einer praktischen Anwendung – eine Art von Low-Level-Code erzeugen. So läuft der Code auf dem Betriebssystem, und das ganze System interagiert wiederum mit der Hardware. Diese Art von Prozesskette interessiert mich sehr, oder genauer gesagt, diese Fragen: Wie programmieren wir eigentlich, wie könnten wir das besser tun und wie schaffen wir einen effizienteren Code?

An welchen Projekten arbeiten Sie in diesem Bereich? Lawall: Aktuell beschäftige ich mich mit der Überprüfung von Quellcode von Systemsoftware, also die Frage, ob dieser korrekt ist. Die Prüfung wirft Fragen auf: Was bedeutet "korrekt", was will man wirklich beweisen? Den Code, seine Funktionen, den Arbeitsablauf? Und welche Eigenschaften sollen geprüft werden? Und können wir diese Eigenschaften so automatisch wie möglich prüfen? Solche Fragen stehen im Mittelpunkt unserer Arbeit. Es gibt inzwischen Werkzeuge, um Prüfungen zu automatisieren, aber der Mensch muss den Maschinen dabei noch in unterschiedlichem Umfang helfen. Deshalb erkunden wir die Verwendung von Programmiersprachen sowie die Entwicklung von Code auch danach, ob sie die Überprüfung eines Codes vereinfacht.

Automatisierte Prüfungen – das klingt auch nach Künstlicher Intelligenz: Verändern KI-Methoden die Programmiersprachen? Lawall: Im Kontext von Software-Engineering wurde viel zur Verwendung verschiedener KI-inspirierter Techniken geforscht, um das Verständnis von Code zu verbessern. Um etwa Änderungen zu analysieren, die Menschen im Laufe der Zeit an einem Programm vorgenommen haben, werden mit KI-Methoden die Kommentare durchleuchtet. So lässt sich erkennen, ob damit Fehler behoben, das Programm weiterentwickelt oder eine neue Funktion ergänzt wurde. Ziel ist also, eine Software-Änderung auf einer höheren Ebene automatisch zu verstehen. Bei den Programmiersprachen selbst und deren Einsatz werden verfahren der KI noch nicht oft eingesetzt, aber vielleicht ändert sich das in Zukunft.

Glauben Sie, dass Künstliche Intelligenz neue, andere Programmiersprachen fordert? Lawall: Es gibt bereits eine neue Art von Programmiersprachen, die für die Künstliche Intelligenz nützlich sind. Das sind die sogenannten probabilistischen Programmiersprachen, denn bei KI geht es ja um Wahrscheinlichkeiten. Die gewohnte, deterministischen Programmierung zielt darauf ab, den genauen Wert von Drei plus Vier plus Fünf zu berechnen. Bei der probabilistischen Programmierung geht es darum, die Eigenschaft von Zahlen und ihrer Summe abzuschätzen. Mit welcher Wahrscheinlichkeit ist die Summe größer als eine Million – Ergebnisse dieser Art zum Beispiel. Hier tut sich gerade ein neues Arbeitsgebiet auf, die Entwicklung von Programmiersprachen, die sich zur Beschreibung von Berechnungen eignen, die man mit KI durchführen möchte. Was das eigentliche Schreiben von Code mit Hilfe von KI angeht, gibt es außerdem ein Tool von GitHub (Microsoft) namens Copilot. Es sucht im Internet nach Code-Beispielen und generiert daraus mit Hilfe von KI-Methoden einen neuen Code, der für Ihr spezifisches Problem relevant ist.

Wie sind Sie eigentlich zur Informatik gekommen und warum arbeiten Sie gerne an Programmiersprachen? Lawall: Wenn ich weiß, wie eine Programmiersprache funktioniert, kann ich besser verstehen, wie Software und Algorithmen funktionieren. In der Informatik geht es im Allgemeinen ja darum, Dinge zu automatisieren. Wer etwas automatisieren oder vereinfachen will, muss besser verstehen, wie es funktioniert. (Interview: vs)


julia

Dr. Julia Lawall, Inria