Reimplementaciones de Elisp


12

Emacs implementa un intérprete para elisp en C que sirve como implementación de referencia de facto . ¿Hay otras implementaciones de elisp en otros idiomas (particularmente Javascript)? ¿Qué es un conjunto mínimo de primitivas necesarias para reimplementar completamente elisp? ¿Cuáles son las dificultades esenciales para hacerlo (por ejemplo, alcance dinámico)?


Un buen punto de partida sería: en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours Aunque el esquema y el elisp tienen sus diferencias, creo que lo anterior es un buen comienzo para comprender las cosas fundamentales necesarias.
Renan Ranelli

Respuestas:


5

Guile Emacs es una implementación de Emacs donde el intérprete original de Emacs Lisp fue reemplazado por libguile recientemente. Todavía hay problemas de interoperación (Guile y Emacs tienen ideas diferentes sobre las cadenas, por ejemplo), pero el código existente de Emacs Lisp ya puede usarse (aunque con regresiones de rendimiento bastante intimidantes).

Alternativamente, está el Ejit de nicferrier . Su README describe las dificultades involucradas, como ciertas cosas que solo hacen contexto en Emacs y cómo se elige un conjunto mínimo de primitivas antes de compilar Emacs Lisp a Javascript. Por lo tanto, no es realmente una reimplementación, pero podría ayudar a responder sus últimas preguntas.


Solo una nota: Ejit compila a JS, no está escrito en JS.
Malabarba el

Sí, ese párrafo tenía la intención de responder a la pregunta cuál es el conjunto mínimo de primitivas, ya que la intención es reconocerlas y simplificarlas tanto como sea posible antes de compilar en JS. También se describen algunas de las dificultades (como los búferes y sus propiedades que tienen menos sentido).
wasamasa

2
Creo que quieres apuntar a Guile. El proyecto Guile Emacs, aunque es un caso de uso significativo, es más una nota al margen aquí.
Phil
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.