Mitte der 1950er Jahre waren Computer bereits hervorragend im numerischen Rechnen. John McCarthy wollte ihnen eine andere Aufgabe geben: Ideen als Symbole darstellen, Schlussfolgerungen konstruieren und Ausdrücke verarbeiten, deren Größe nicht im Voraus bekannt war.
Aus diesem Ziel entstand Lisp. Statt ein Programm nur als feste Befehlsfolge zu behandeln, stellt Lisp Code mit denselben Strukturen dar wie Daten. Ein Programm kann dadurch Ausdrücke untersuchen, verändern und neue erzeugen. Diese Eigenschaft beeinflusste funktionale Programmierung, interaktive Systeme und viele spätere Sprachen.
McCarthy verband dies mit einer zweiten Vision: Timesharing, bei dem mehrere Menschen gleichzeitig interaktiv mit einem Computer arbeiten. Lisp und Timesharing sollten den Rechner vom Stapelverarbeiter zum experimentellen Partner machen.
Denken statt nur Zahlen darstellen
John McCarthy wurde 1927 in Boston geboren und wuchs hauptsächlich in Los Angeles auf. Er studierte Mathematik am California Institute of Technology und promovierte 1951 in Princeton.
Hochsprachen wie FORTRAN waren vor allem für Zahlen geschaffen. McCarthy interessierte sich dagegen für Wörter, logische Regeln, Beweise und Ausdrucksbäume. 1955 beteiligte er sich am Vorschlag für das Dartmouth-Sommerprojekt und verwendete dort den Ausdruck artificial intelligence für ein neues Forschungsgebiet.
Um diese Ideen zu untersuchen, brauchte er eine Sprache, die Symbole so direkt behandelte wie FORTRAN Zahlen.
Warum Listen zum Kern von Lisp wurden
Ein Gedankenausdruck lässt sich als Ausdruck aus weiteren Ausdrücken darstellen. Lisp – der Name stammt von list processing – macht deshalb die Liste zur grundlegenden Struktur. Eine Liste kann Zahlen, Namen oder weitere Listen enthalten.
Diese Struktur begünstigt Rekursion: Eine Funktion verarbeitet einen Teil und ruft sich für den Rest erneut auf, bis ein einfacher Fall erreicht ist. Lisp erfand Rekursion nicht, machte sie aber zu einer natürlichen Art, verschachtelte Strukturen zu bearbeiten.
McCarthys Artikel von 1960, Recursive Functions of Symbolic Expressions and Their Computation by Machine, beschrieb Lisp als kleines Regelsystem, das allgemeine Berechnungen ausdrücken konnte.
Die vielen Klammern von Lisp wirken zunächst ungewöhnlich. Ihre Regelmäßigkeit schafft jedoch eine entscheidende Eigenschaft: Ein Codeausdruck ist selbst eine Liste. Code und Daten besitzen damit eine gemeinsame Repräsentation.
Diese Homoikonizität erlaubt es Programmen, Code als Daten zu empfangen, zu analysieren und umzuschreiben. Lisp-Makros nutzen das, um die Sprache für neue Anwendungsgebiete zu erweitern.
McCarthy hatte zunächst eine konventionellere M-Expression-Notation vorgesehen. Als Steve Russell erkannte, dass McCarthys beschriebene Evaluierungsfunktion direkt programmiert werden konnte, wurden die geklammerten S-Expressions selbst zur ausführbaren Syntax.
Dynamischen Speicher automatisch verwalten
Lisp-Listen entstehen und verschwinden während der Ausführung. Manuelle Freigabe jeder Struktur hätte Programme kompliziert und fehleranfällig gemacht. Deshalb führte Lisp Garbage Collection ein: Das System ermittelt, welche Objekte noch erreichbar sind, und gewinnt den Speicher der übrigen zurück.
Automatische Speicherverwaltung kostet Rechenzeit, reduziert aber viele Fehler und erleichtert dynamische Datenstrukturen. Java, JavaScript, Python, Go und zahlreiche andere Sprachen verwenden heute Varianten dieses Prinzips.
Eine Sprache als Gemeinschaftsarbeit
McCarthy definierte die zentralen Konzepte, aber Lisp wurde durch viele Forscher praktisch nutzbar. Steve Russell programmierte den ersten Evaluator, Daniel Edwards arbeitete an der Speicherbereinigung, Timothy Hart und Michael Levin an einem frühen Compiler.
Lisp wurde schnell zu einer Familie: Lisp 1.5, Maclisp, Interlisp, Scheme, Common Lisp, Emacs Lisp und Clojure verfolgen unterschiedliche Ziele. Diese Vielfalt zeigt zugleich Stärke und Fragmentierung einer Sprache, deren Kern leicht erweitert werden kann.
Timesharing verändert die Beziehung zur Maschine
Computer der 1950er Jahre arbeiteten häufig im Batchbetrieb. Benutzer reichten Karten oder Bänder ein und warteten auf Ergebnisse. McCarthy setzte sich für allgemeines Timesharing ein: Der Computer wechselt schnell zwischen Benutzern, sodass jeder interaktiv arbeiten kann.
Das passte besonders gut zu Lisp. Ein Interpreter kann einen Ausdruck lesen, auswerten und das Ergebnis anzeigen – die später als REPL bekannte Arbeitsweise. Programmieren wird dadurch zu einem fortlaufenden Experiment.
McCarthy förderte diese Vision am MIT und später am Stanford Artificial Intelligence Laboratory. Sprache, Terminals, Netzwerke und Forschung entwickelten sich dort gemeinsam.
Was Lisp modernen Sprachen hinterlassen hat
Lisp ist heute nicht mehr die einzige Sprache der KI-Forschung, doch viele seiner Ideen sind allgegenwärtig: Funktionen als Werte, Closures, Rekursion, automatische Speicherverwaltung, Makros und interaktive Umgebungen.
John Backus verteidigte später ebenfalls funktionale Komposition. Guido van Rossum integrierte funktionale Werkzeuge in Python. Brendan Eich griff bei JavaScript auf Ideen aus Scheme zurück, obwohl dessen äußere Syntax eher an C erinnert.
McCarthy starb 2011. Sein Vermächtnis liegt nicht in der Behauptung, Maschinen hätten allgemeine Intelligenz erreicht, sondern in der präziseren Leistung, symbolische Ausdrücke so darstellbar zu machen, dass Programme, Regeln und Code mit denselben Mechanismen verarbeitet werden können.
Zeitleiste
- 1927: Geburt in Boston.
- 1951: Mathematik-Promotion in Princeton.
- 1955: Dartmouth-Vorschlag und Verwendung des Ausdrucks „artificial intelligence“.
- 1956: Dartmouth-Workshop.
- 1958: erste Lisp-Formulierungen am MIT.
- 1959: Veröffentlichung eines Vorschlags für allgemeines Timesharing.
- 1960: Veröffentlichung des grundlegenden Lisp-Artikels.
- 1962: Wechsel nach Stanford.
- 1965: Gründung des Stanford Artificial Intelligence Laboratory mit Lester Earnest.
- 1971: Turing Award.
- 2011: Tod im Alter von 84 Jahren.
Häufig gestellte Fragen
Hat John McCarthy den ersten Lisp allein programmiert?
Nein. Er definierte Prinzipien und Beschreibung; Steve Russell implementierte den ersten Evaluator, weitere Forscher Speicherverwaltung und Compiler.
Warum verwendet Lisp so viele Klammern?
Sie machen die verschachtelte Struktur explizit und geben Code und Daten eine einheitliche, leicht analysierbare Darstellung.
Ist Lisp die erste funktionale Sprache?
Es gehört zu den frühesten Sprachen, die Funktionen und Rekursion ins Zentrum stellen, doch funktionale Programmierung entstand aus mehreren mathematischen und sprachlichen Traditionen.
Welche Beziehung besteht zwischen Lisp und KI?
Lisp wurde für symbolische Strukturen und Regeln entworfen und war jahrzehntelang eine zentrale Sprache der KI-Forschung.
Wird Lisp noch verwendet?
Ja, in verschiedenen Dialekten wie Common Lisp, Scheme, Emacs Lisp und Clojure sowie als wichtiger Einfluss auf moderne Sprachen.