![]() |
Jürgen Böhms Heimatseiten - Lisp
|
![]() |
|
Lisp - was ist das ?Um es ein wenig überspitzt zu sagen: LISP gehört zu den "ältesten Programmiersprachen der Menschheitsgeschichte", zusammen mit FORTRAN, ALGOL und dem von Zuse erdachten, aber zu seiner Zeit nie implementierten "Plankalkül". Links zur Lisp-Geschichte
Homepage von Herbert Stoyan
Lisp-Machine Museum
Lisp - Dialekte und StandardisierungWährend der Weiterentwicklung von Lisp nach seiner ersten Implementierung als Lisp 1.5 auf einer IBM 7090 entstanden unzählige Abwandlungen, denen mit immer neuen Standardisierungsversuchen gegengesteuert wurde. Einige - heute historische - Wegmarken sind MACLISP und INTERLISP sowie das "Standard LISP" von A.C.Hearn. Interessanterweise sind zwei dieser Standards, MACLISP und Standard Lisp, mit zwei ebenso berühmten Anwendungsprogrammen verbunden, nämlich Macsyma vom MIT und Reduce von Hearn an der Universität Utah. Die Geschichte ist aber auch über diese beiden Sprachstandards hinweggegangen, die noch das Schlusskapitel des oben erwähnten Buches von Stoyan bildeten. Der heutige Standard heisst Common Lisp und hat sich hauptsächlich unter dem Einfluss der Lisp-Maschinen und ihrer Sprachstandards herausgebildet. Er enthält übrigens auch Möglichkeiten zur objektorientierten Programmierung, die im CLOS und MOP verkörpert sind, und in vieler Weise die etwa in C++ gebotenen Möglichkeiten transzendieren ("Double Dispatch", "call-next-method" usw.) Wer sich mit Common Lisp vertraut machen will, sollte unbedingt folgende Bücher lesen
und die Seiten der Association of Lisp Users besuchen. Das "russische Lisp"Wer sich ein bisschen für die Geschichte der technischen Entwicklung in der UdSSR und später im Ostblock interessiert, wird feststellen, dass hier oft erstaunliche Originalität und Kreativität zu finden ist. Obwohl viele bedeutende Entwicklungen - Raketen, Nuklearwaffen, Transistoren, Computer - zuerst im Westen realisiert wurden, ist es der UdSSR stets gelungen diese Entwicklungen eigenständig nachzuvollziehen. In der hierzulande dominierenden Meinung wird dies meist einer ausgeprägten Spionagetätigkeit zugeschrieben, doch wenn man sich mit den Details beschäftigt findet man oft genug, dass in Wirklichkeit eine echte Parallelentwicklung stattfand. So gelang etwa Sacharow die von Teller und Ulam unabhängige Neuentdeckung des im Westen so genannten "Teller-Ulam-Device", das den Zugang zu Thermonuklearwaffen nahezu unbegrenzter Stärke eröffnete. Wer mit dieser Einstellung an die russische Technik herangeht, wird sich natürlich auch fragen, wie denn die Entwicklung des symbolischen Rechnens in der UdSSR verlaufen war. Im Buch von Stoyan findet man allerdings vorwiegend die Geschichte der LISP-Rezeption im Ostblock - und eine kurze Andeutung über ein System namens "REFAL". Nachdem das Internet nun schon lange einen recht interessanten "russischen Zweig" hat, habe ich einfach mal nach "REFAL" gesucht, und in der Tat gefunden, was ich suchte: ist der Einstieg in den "REFAL-Kosmos". Dort finden sich neben Implementierungen von REFAL für heute gängige Computer und Betriebssysteme auch Verweise auf aktuelle Forschungen des Erfinders von REFAL, W.F. Turtschin. Professor Turtschin beschäftigt sich heute mit der von ihm entwickelten Theorie der "Superkompilierung" die mittlerweile auch von westlichen Forschern studiert wird (siehe etwa diesen Übersichtsartikel) und die vielleicht in einigen Jahren, wenn die Hardwareleistung weiter zugenommen hat, einen ganz neuen Zugang zur Programmierung und vor allem zur Metaprogrammierung ermöglichen wird. Meine Lisp-Geschichte1980 - 1993Computeralgebra, LISP und künstliche Intelligenz interessierten mich schon zu meiner Gymnasialzeit, ich las damals fasziniert einige Fachartikel über REDUCE, MACSYMA und einige andere Computeralgebrasysteme. Ich träumte davon einen LISP Interpreter oder ein Computeralgebrasystem selbst zu schreiben, aber erst 1994 ergab sich durch Zufall ein Anlass für die Implementation eines LISP-Interpreters. In den 80er Jahren hätte eine solche Implementation für mich bedeutet, den Code in Assembler schreiben zu müssen, da ich zu dieser Zeit niemals einen Computer mit mehr als 64K zur Verfügung hatte. Allerdings war ich kein versierter Assemblerprogrammierer, und überhaupt war mein Interesse in dieser Zeit hauptsächlich auf reine Mathematik gerichtet. 1993 - 1996Erst ab 1993, als ich einen 386er PC mit 8MB zur Verfügung hatte, begann ich mich wieder für Programmierung zu interessieren. Die Werkzeuge waren nun viel besser, es gab die IDEs und objektorientierte Sprachen kamen gerade in allgemeinen Gebrauch. Ich programmierte zunächst ein für meine damaligen Verhältnisse recht umfangreiches und fortschrittliches Projekt, nämlich ein Grafikprogramm zur Darstellung von 3D-Flächen unter Windows, das ich unter dem Namen Surf (von Surface) damals auch beim Sybex-Verlag veröffentlichen konnte. Aus einem Auftrag für ein Kalkulationsmodul in einem Börsenprogramm entsprang dann die Idee, dafür einen LISP-Interpreter zu implementieren. Ich hatte gerade C++ kennengelernt und war voller Begeisterung, so dass ich beschloss das ganze mit C++ und unter Verwendung der mit C++ möglichen objektorientierten Methoden zu verwirklichen. In der Tat lief dann alles wie von selbst, und in kurzer Zeit war ein kleines Lisp-System fertig, dem ich schliesslich den Namen ProLisp gab. Ich hatte übrigens bis dahin noch nie ein LISP Programm geschrieben (von einigen Probierstücken zum Testen meines Interpreters abgesehen), empfand dies aber auch nicht als Mangel, denn ich war begeistert von den neuen Möglichkeiten in C++, und es war für mich tausendmal interessanter einen LISP-Interpreter zu schreiben, als selbst in LISP zu programmieren. Der Grund dafür ist leicht zu erklären, wenn auch vielleicht nicht für jedermann leicht nachzuvollziehen: Jeder Interpreter ist im Grunde ein autonomer Rechenautomat, einen Interpreter zu bauen ist gewissermassen, wie einer Art lebendem Wesen zum Dasein zu verhelfen - man entwickelt ein besonderes, emotionales Verhältnis zu seinem Programm, das sich so bereitwillig mit Anweisungen füttern lässt, um sie dann getreulich im selbstgebauten Räderwerk abzuarbeiten. 1996 - 2000Seit 1996 arbeitete ich dann an meiner Dissertation, in deren Verlauf auch ein grosses Maple-Programm entstand. Maple-Code sieht äusserlich nach PASCAL aus, ist aber im Kern funktional und listenorientiert - echt in LISP programmiert habe ich aber auch in dieser Zeit nicht. Ab Dezember 2000 hatte ich mich dann wieder verstärkt mit C++ beschäftigt und bin in die ausufernde Literatur über "Effective C++", "Design Patterns", "C++ Idioms", "Generic Programming", "Generative Programming" eingetaucht. Ich programmierte zu dieser Zeit eine mittelgrosse Anwendung in C++, wobei ich mich teilweise freizügig dieser neuen Techniken bediente - insbesondere die STL empfand ich als grossen Durchbruch. 2001 -Den Bogen zu LISP schlug ich dann mit der Idee zu einem "Personal Information Manager" der die Art, wie Personal-Computer bedient werden revolutionieren könnte. Ich gewann rasch den Eindruck, dass ich zur Umsetzung der angepeilten KI-Elemenente in dieser Anwendung auf LISP zurückgreifen musste. Also recherchierte ich im Internet nach "Lisp" und sehr bald dann nach "Lisp Machines", nach "Symbolics", nach "OpenGenera" usw. Kurzum - eine neue Welt hatte sich mir aufgetan, eine Welt aus deren Perspektive selbst das vorher von mir heiss geliebte Linux/Unix nur "power tools for power fools" zu bieten hatte. |