Ich habe mal wieder ein neues Hobbyprojekt.

Nachdem Objective-CL sich ja nunmehr sehen lassen und prinzipiell produktiv verwendet werden kann, habe ich mich an den nächsten Schritt gewagt: ein Lispcompiler für Étoilé bzw. GNUstep und Mac OS X, der vollständig auf der Objective-C-Runtime aufbaut und sich mit ihr integriert. Derzeitiger Projektname: Toilet Lisp.

Nun, um ehrlich zu sein, habe ich keine Ahnung von Übersetzerbau (welcher sicherlich nicht einfach ist), weshalb Toilet Lisp in der ersten Phase nur einen Interpreter enthalten wird und keinen Compiler. Ein Zwischenschritt könnte ein Compiler nach Objective-C-Code sein, der via clang oder GCC weiterkompiliert wird, und das Endziel ist ein Compiler, der LLVM-Code erzeugt.

So oder so werde ich für Toilet Lisp wahrscheinlich länger brauchen als für Objective-CL, bis ich etwas in der Praxis Nützliches produziert habe. Ob überhaupt etwas daraus wird, steht in den Sternen. Aber es ist sicher ganz lehrreich. Auch, wenn sonst niemand etwas davon haben sollte, versuche ich es deshalb trotzdem.

Vielleicht sollte ich noch eine Frage beantworten, die sich unmittelbar aufdrängt: Warum schon wieder ein neuer Lispcompiler, wenn es schon so viele gibt? Vor allem: Gibt es nicht schon Lisps auf der Objective-C-Runtime?

Die gibt es in der Tat. Sie sind aber allesamt semantische Neuerfindungen. Ich halte mich hingegen soweit wie nur irgend möglich an ANSI Common Lisp. Die Kombination einer vollständig mit Objective-C integrierten Umgebung einerseits und traditionellem Lisp andererseits existiert in dieser Form noch nicht. (Pragmatisch betrachtet, kommt Clozure CL mit der gut integrierten Objective-C-Bridge zwar an die Idee einigermaßen nahe heran, aber leider ist es sehr unportabel. Eines von Toilet Lisps Zielen ist es, unter allen Betriebssystemen mit einer Objective-C-Runtime zu laufen und kompakte, klickbare Binaries zu erzeugen.)

Die großen Ziele zusammengefaßt:

  1. Portabilität. Zur Not muß man je nach Plattform eben ohne Compiler auskommen, aber laufen soll das System überall.

  2. Codelesbarkeit. Im Zweifel auch zu Lasten der Performance.

  3. Integration mit Objective-C und Ausnutzung der Runtimefunktionen statt Neuerfindung (z.B. die Implementierung von CATCH und THROW über das bestehende Exception-System).

  4. Kompatibilität mit bestehendem ANSI-CL-Code, insbesondere Bibliotheken.

  5. Unterstützung sowohl eines lispigen, interaktiven als auch eines unixfreundlichen uninteraktiven Entwicklungsmodus, d.h. z.B. Erzeugung von Bibliotheken und Programmen mit Dingen wie make statt aus dem laufenden Lispsystem heraus. Insbesondere: keine Kernbilder (solche wären auf der Objective-C-Runtime auch gar nicht portabel zu realisieren).