Mein gestriger Eintrag beschäftigte sich mit verschiedenen Versuchen, ein Lisp zu finden, das sich für systemnahe Entwicklung eignet und endete mit dem Schluß, daß die einzige Lösung ein extrem dünner syntaktischer Layer über C zu sein scheint, wie SC einer ist.

Nachdem ich mit diesem Ergebnis immer noch ein wenig unzufrieden war, startete ich noch einen weiteren, letzten Versuch, etwas anderes zu finden. Und wer hätte es gedacht? Die richtigen Suchbegriffe brachten mich tatsächlich zu einem höchst interessanten Lisp-Dialekt für Systementwicklung: Pre-Scheme.

Pre-Scheme wird verwendet, um die virtuelle Maschine von Scheme48 zu entwickeln. Ein Pre-Scheme-Compiler befindet sich entsprechend in der Distribution von Scheme48.

Der Unterschied zwischen Pre-Scheme und SC ist, daß Pre-Scheme versucht, möglichst viele Features von Scheme zu erhalten, ohne die direkte Übersetzung in C-Code zu gefährden. So bietet Pre-Scheme immer noch anonyme Funktionen, (lokale) Endrekursion und die Standard-Scheme-Datenstrukturen. Dafür ist die Sprache statisch typisiert (mit Hindley-Milner-Typinferenz) und verwaltet Speicher nicht selbständig. Daß außerdem Continuations nicht unterstützt werden, versteht sich von selbst. Die Performance von kompiliertem Pre-Scheme-Code ist laut dem zugehörigen Paper sehr nah an dem von händisch geschriebenen C-Code, und die Kompilierstrategie scheint bis ins Detail ausgesprochen durchdacht zu sein.

An sich sieht Pre-Scheme bereits sehr überzeugend aus. Interessant ist jedoch auch, daß in den Kommentaren zu einem der beiden damit zusammenhängenden Reddit-Einträge (der andere ist der ältere) auf einige verwandte Projekte verwiesen wird, nämlich Schlep (ein weiteres abgespecktes Scheme), ThinLisp (ein abgespecktes Common Lisp), CLiCC (Common Lisp, ähnlich ThinLisp) und BitC (ein ML-inspirierter Ansatz).

Sieht so aus, als gälte es, doch noch einiges auszuprobieren.