Nochmal PicoLisp

skip over the calendar

Also nach etwas gewühlen und geblätter und gelese: PicoLisp ist genial. Was es ist: einfach ein primitives Lisp mit einem sehr kompakten Sprachkern und einigen sehr ungewöhnlichen Design-Entscheidungen.

Ganz vorne: kein Compiler, nicht mal ein Bytecode-Compiler. Die "virtuelle Maschine" von PicoLisp ist einfach ein effizienter Lisp-Interpreter für Lisp-SEXPRs (die verketteten Listen die man so aus alten Lisp-Interpretern kennt).

Ein weiterer Punkt: nur Listen, Symbole und Zahlen als Datentypen. Keine Floatingpoints (statt dessen einfache Wege skalierte Integer zu benutzen) und Strings sind entweder Listen von Zeichen (die wiederum Symbole sind) oder einfach Symbole.

Auch eher ungewöhnlich: konstant dynamisches Binden von Symbolen, nicht lexikalisches Binden. Alte Lisp-Systeme hatten auch nur dynamisches Binden. Lexikalisches Binden macht Compiler einfacher und beseitigt einige lästige Fehlerquellen, dynamisches Binden aber ermöglicht einige sehr interessante Programmiertechniken (weshalb es in vielen Lisps fluids gibt - dynamisch gebundene Variaben - wie z.B. die globalen Parameter in Common Lisp).

Weitere Besonderheiten: von vornherein auf die Anwendungsentwicklung datenbankgestützer Programme ausgelegt. Es ist eine eigene Datenbank enthalten die alle Merkmale typischer Objekt-Relationaler Datenbanken enthält und eine eigene GUI-Bibliothek, die auf verschiedene HTML-Varianten (HTML pur, HTML mit Java und HTML mit JavaScript) absetzt.

Der Datenbank dann Prolog als Abfragesprache zu verpassen ist nur konsequent weitergedacht - generell ist die Integration von Prolog und Lisp ja nicht neu. Das ganze aber dann wieder derart kompakt hinzubekommen, ist smart.

Was mich daran so begeistert? Nunja, wer von Paul Graham seine Artikel über Arc gelesen hat - die 100-Jahre-Sprache, an der er werkelt - wird erstaunliche Parallelen sehen. Auch PicoLisp beschränkt sich auf das notwendigste, und benutzt recht kompakte Darstellungen und hat auch nur stark reduzierte Datentypen. Bei beiden ist die Idee die gleiche: zurück zur sauberen Abstraktion auf den bekannten Konzepten, nicht die Darstellung des Source durch vorweggenommene Optimierung (Datentypenauswahl) verwässern.

Das Ergebnis? Ein kompakter Lisp-Kern mit sehr interessanten Eigenschaften und einer recht einfachen Möglichkeit Webanwendungen zusammenzudengeln. Aber auch geeignet für typische Scripting-Geschichten (wenn man mal rausgefunden hat, wie man z.B. Programme integriert bekommt). Zusätzlich ein Interpreter mit überschaubarem Source (keine 14000 Zeilen C-Source!), den man leicht um die für eigene Projekte notwendige Funktionen erweitern kann. Insgesamt erinnert mich das stark an die alten TCL-Versionen, nur das hier ein richtiges Lisp unten drin steckt.

Wer selber lesen will, hier ein paar Dokumentationslinks:

Allerdings sind alle Dokumentationen nicht so ganz vollständig - immer wieder tauchen Funktionen in einem der Dokumente auf, die in der Referenz fehlen, oder es werden Funktionen benutzt, die nirgendwo erwähnt werden und deren Funktionsweise nicht ganz klar ist. Aber dazu gibts ja auch noch den kompletten (und nur spärlich) dokumentierten Sourcecode aller Library-Module. Ja, klingt etwas nach Text-Adventure, ist mir klar. Andererseits ist das Volumen an Source gut überschaubar.

tags: Lisp, Programmierung