Die Wurzeln von Lisp
Mai 2001
(Ich habe diesen Artikel geschrieben, um mir selbst genau zu erklären, was McCarthy entdeckt hat. Man muss diese Dinge nicht kennen, um Lisp zu programmieren, aber es sollte für jeden hilfreich sein, der die Essenz von Lisp verstehen möchte – sowohl im Sinne seiner Ursprünge als auch seines semantischen Kerns. Die Tatsache, dass es einen solchen Kern hat, ist eines der Unterscheidungsmerkmale von Lisp und der Grund, warum Lisp im Gegensatz zu anderen Sprachen Dialekte hat.)
1960 veröffentlichte John McCarthy eine bemerkenswerte Arbeit, in der er für die Programmierung etwas Ähnliches tat, wie es Euklid für die Geometrie tat. Er zeigte, wie man mit einer Handvoll einfacher Operatoren und einer Notation für Funktionen eine ganze Programmiersprache aufbauen kann. Er nannte diese Sprache Lisp, für "List Processing", weil eine seiner wichtigsten Ideen darin bestand, eine einfache Datenstruktur namens Liste sowohl für Code als auch für Daten zu verwenden.
Es lohnt sich zu verstehen, was McCarthy entdeckt hat, nicht nur als Meilenstein in der Geschichte der Computer, sondern als Modell dafür, wohin sich die Programmierung in unserer Zeit entwickelt. Mir scheint, dass es bisher zwei wirklich saubere, konsistente Modelle der Programmierung gab: das C-Modell und das Lisp-Modell. Diese beiden scheinen Punkte hohen Bodens zu sein, mit sumpfigen Niederungen dazwischen. Da Computer immer leistungsfähiger geworden sind, haben sich die neu entwickelten Sprachen stetig in Richtung des Lisp-Modells bewegt. Ein beliebtes Rezept für neue Programmiersprachen in den letzten 20 Jahren war, das C-Modell des Computings zu nehmen und ihm stückweise Teile aus dem Lisp-Modell hinzuzufügen, wie Laufzeittypisierung und Garbage Collection.
In diesem Artikel werde ich versuchen, in möglichst einfachen Worten zu erklären, was McCarthy entdeckt hat. Es geht nicht nur darum, ein interessantes theoretisches Ergebnis zu lernen, das jemand vor vierzig Jahren herausgefunden hat, sondern zu zeigen, wohin sich Sprachen entwickeln. Das Ungewöhnliche an Lisp – tatsächlich die definierende Eigenschaft von Lisp – ist, dass es sich selbst schreiben kann. Um zu verstehen, was McCarthy damit meinte, werden wir seine Schritte nachvollziehen, wobei seine mathematische Notation in laufenden Common Lisp-Code übersetzt wird.