Elisp Neuimplementierungen

12

Emacs implementiert einen Interpreter für elisp in C, der als De-facto- Referenzimplementierung dient . Gibt es andere Implementierungen von elisp in anderen Sprachen (insbesondere Javascript)? Was ist ein minimaler Satz von Primitiven, um elisp vollständig neu zu implementieren? Was sind die wesentlichen Schwierigkeiten dabei (zB dynamisches Scoping)?

Paul Miller
quelle
Ein guter Ausgangspunkt wäre: de.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours Obwohl Schema und Elisp ihre Unterschiede aufweisen, denke ich, dass dies ein guter Anfang ist, um die grundlegenden Dinge zu verstehen, die benötigt werden.
Renan Ranelli

Antworten:

5

Guile Emacs ist eine Emacs-Implementierung, bei der der ursprüngliche Emacs-Lisp-Interpreter kürzlich durch libguile ersetzt wurde. Es gibt immer noch Interoperationsprobleme (Guile und Emacs haben zum Beispiel unterschiedliche Vorstellungen von Strings), aber der vorhandene Emacs-Lisp-Code kann bereits verwendet werden (allerdings mit ziemlich einschüchternden Performance-Einschränkungen).

Alternativ gibt es nicferrier ‚s Ejit . In der README-Datei werden die damit verbundenen Schwierigkeiten beschrieben, z. B. bestimmte Dinge, die nur in Emacs einen Kontext ergeben, und wie eine minimale Menge von Grundelementen ausgewählt wird, bevor Emacs Lisp in Javascript kompiliert wird. Es handelt sich also nicht wirklich um eine Neuimplementierung, kann aber bei der Beantwortung Ihrer letzten Fragen hilfreich sein.

Wasamasa
quelle
Nur eine Anmerkung: Ejit wird in JS kompiliert, es ist nicht in JS geschrieben.
Malabarba
Ja, dieser Absatz war als Antwort auf die Frage gedacht, was die minimale Menge von Primitiven ist, da die Absicht ist, diese so weit wie möglich zu erkennen und zu vereinfachen, bevor zu JS kompiliert wird. Einige der Schwierigkeiten (wie Puffer und ihre Eigenschaften, die weniger sinnvoll sind) werden ebenfalls beschrieben.
Wasamasa
2
Ich denke, du willst auf Guile selbst zeigen. Das Guile-Emacs-Projekt ist zwar ein wichtiger Anwendungsfall, aber hier eher eine Randnotiz.
Phils