Reimplementazioni elisp


12

Emacs implementa un interprete per elisp in C che funge da implementazione di riferimento di fatto . Ci sono altre implementazioni di elisp in altre lingue (in particolare Javascript)? Qual è un set minimo di primitivi necessari per reimplementare completamente elisp? Quali sono le difficoltà essenziali nel farlo (ad es. Scoping dinamico)?


Un buon punto di partenza sarebbe: en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours Sebbene schema ed elisp abbiano le loro differenze, penso che quanto sopra sia un buon inizio per capire le cose fondamentali necessarie.
Renan Ranelli,

Risposte:


5

Guile Emacs è un'implementazione di Emacs in cui l'interprete Emacs Lisp originale è stato recentemente sostituito da libguile. Esistono ancora problemi di interoperabilità (Guile ed Emacs hanno idee diverse sulle stringhe per esempio), ma il codice Emacs Lisp esistente può già essere utilizzato (sebbene con regressioni delle prestazioni piuttosto intimidatorie).

In alternativa, c'è Ejit di Nicferrier . Il suo README descrive le difficoltà coinvolte, come certe cose che fanno solo contesto in Emacs e come viene scelto un insieme minimo di primitivi prima di compilare Emacs Lisp in Javascript. Non è quindi davvero una reimplementazione, ma potrebbe aiutare a rispondere a queste ultime domande.


Solo una nota: Ejit si compila in JS, non è scritto in JS.
Malabarba,

Sì, quel paragrafo era inteso come risposta alla domanda quale sia l'insieme minimo di primitivi poiché l'intenzione è quella di riconoscere e semplificare il più possibile prima di compilare in JS. Sono descritte anche alcune delle difficoltà (come, i buffer e le loro proprietà che hanno meno senso).
Wasamasa,

2
Penso che tu voglia indicare Guile stesso. Il progetto Guile Emacs, sebbene sia un caso d'uso significativo, è più una nota a margine qui.
phils,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.