Artikelformat

Turing Award für Barbara Liskov

Der Turing Award ist wohl die bedeutendste Auszeichnung in der Informatik. Ein guter Grund, sich mit den Errungenschaften von Frau Liskov zu beschäftigen. Ihr Team hat in den Siebzigern die Programmiersprache CLU entwicklet. In dieser Zeit war für die normalen Programmierer die heißeste Frage, ob man tatsächlich Programme ohne goto-Befehle schreiben kann.

Zentrales Thema wie für viele Fortschritte in der Informatik ist Abstraktion. CLU basierte auf abstrakten Datentypen: Datentypen, deren innere Ansicht der Programmierer nicht kennen muss,
den sie wurden zusammen mit Zugriffsoperationen definiert. Diese Vorgehensweise ist heute unter dem Stichwort objektorientiertes Programmieren allgemein üblich geworden.

Aber CLU bot auch Möglichkeiten, den Kontrolfluß zu abstrahieren. Ein Konzept, das offenbar der Zeit noch weiter voraus war. So kannte CLU das yield-Statement, welches erst in neuerer Zeit dank der Programmiersprache Ruby populär geworden ist. Es ist schon deshalb schwierig zu verstehen, weil auch das Wort “yield” keine so klare Bedeutung hat. Übersetzen kann man es mit abgeben, auswerfen, freisetzen. Während in Programmen klassische Prozeduren (oder auch Methoden) die Kontrolle exklusiv halten, und bestenfalls andere Prozeduren aufrufen, gibt yield die Kontrolle und gegebenenfalls Objekte an ein übergebenes Codestück ab. Auf diese Weise kann dann tatsächlich der Kontrollfluss abstrahiert werden.

Wie kann man sich das vorstellen? Wir schauen uns die Funktionsweise am Beispiel Ruby an:

Funktionsweise von yield in Ruby

Beim Aufruf einer Methode wird auch der in do …end definierte Codeblock der Methode zugänglich gemacht. Die Methode entscheidet dann, ob, wann, und wie oft sie den Codeblock aufruft. Weiterhin kann der yield-Befehl Parameter sozusagen auswerfen, die dann im Codeblock verfügbar sind. Umgekehrt liefert der Codeblock ein Rückgabewert, der im Methodenrumpf zur Verfügung steht.

Die Anwendungsfälle sind zahlreich. Man kann automatisch Resourcen ausbalancieren. Beispielsweise kann man so dafür sorgen, das geöffnete Dateien beim verlassen eines Blockes wieder geschlossen werden. Man kann tatsächlich Kontrollstrukturen schreiben: In Ruby ist die for-Struktur so definiert. So kann man for nicht nur für Zahlen, sondern auch für Dateizeilen, Ergebnisse von Datenbankabfragen oder XML-Strukturen nutzen. Auch das Web-Framework Ruby-On-Rails macht exzessiven Gebrauch von yield.

Soweit meine Laudatio, beim ACM finden Sie die offzielle Laudatio für den Turing Award für Barabara Liskov.

Autor: Karsten Meier

Weil ich gerne Probleme löse bin ich Informatiker geworden. Für meine Kunden berate und konzeptioniere ich und entwickle mit fast allem, was einen Prozessor hat. Sie finden mich auch auf Twitter

1 Kommentar

Hinterlassen Sie eine Antwort