Reimplementações Elisp


12

O Emacs implementa um intérprete para elisp em C, que serve como a implementação de referência de fato . Existem outras implementações do elisp em outros idiomas (principalmente Javascript)? O que é um conjunto mínimo de primitivas necessárias para reimplementar completamente o elisp? Quais são as dificuldades essenciais para fazê-lo (por exemplo, escopo dinâmico)?


Um bom ponto de partida seria: en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours Embora esquema e elisp tenham suas diferenças, acho que o exposto acima é um bom começo para entender as coisas fundamentais necessárias.
Renan Ranelli

Respostas:


5

Guile Emacs é uma implementação do Emacs onde o intérprete Emacs Lisp original foi substituído por libguile recentemente. Ainda existem problemas de interoperação (o Guile e o Emacs têm idéias diferentes sobre strings, por exemplo), mas o código Emacs Lisp existente já pode ser usado (embora com regressões de desempenho bastante intimidadoras).

Como alternativa, existe o Ejit do nicferrier . Seu README descreve as dificuldades envolvidas, como certas coisas que apenas contextualizam no Emacs e como um conjunto mínimo de primitivas é escolhido antes da compilação do Emacs Lisp para Javascript. Portanto, não é realmente uma reimplementação, mas pode ajudar a responder às suas últimas perguntas.


Apenas uma observação: o Ejit é compilado em JS, não está escrito em JS.
Malabarba

Sim, esse parágrafo foi planejado como resposta à pergunta sobre qual é o conjunto mínimo de primitivas, pois a intenção é reconhecer e simplificá-las o máximo possível antes de compilar no JS. Algumas das dificuldades (como buffers e suas propriedades que fazem menos sentido) também são descritas.
Wasamasa

2
Eu acho que você quer estar apontando para o próprio Guile. O projeto Guile Emacs, embora seja um caso de uso significativo, é mais uma observação secundária aqui.
phils
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.