Reimplementacje Elisp

12

Emacs implementuje interpreter dla elisp w C, który służy jako de facto implementacja referencyjna. Czy są jakieś inne implementacje elisp w innych językach (szczególnie Javascript)? Jaki jest minimalny zestaw prymitywów niezbędnych do pełnego ponownego wdrożenia elisp? Jakie są w tym podstawowe trudności (np. Dynamiczne określanie zakresu)?

Paul Miller
źródło
Dobrym punktem wyjścia byłoby: en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours Chociaż schemat i elisp mają swoje różnice, myślę, że powyższe jest dobrym początkiem do zrozumienia podstawowych potrzebnych rzeczy.
Renan Ranelli

Odpowiedzi:

5

Guile Emacs to implementacja Emacsa, w której oryginalny interpreter Emacs Lisp został niedawno zastąpiony przez libguile. Nadal występują problemy ze współpracą (na przykład Guile i Emacs mają różne poglądy na temat ciągów znaków), ale istniejący kod Emacs Lisp może już zostać użyty (choć z zastraszającymi regresjami wydajności).

Alternatywnie istnieje nicferrier „s Ejit . W pliku README opisano trudności, takie jak niektóre elementy tworzące kontekst tylko w Emacsie oraz sposób wyboru minimalnego zestawu prymitywów przed skompilowaniem Emacsa Lisp do Javascript. Dlatego nie jest to tak naprawdę ponowna realizacja, ale może pomóc w udzieleniu odpowiedzi na ostatnie pytania.

wasamasa
źródło
Tylko uwaga: Ejit kompiluje się w JS, nie jest napisany w JS.
Malabarba
Tak, ten akapit miał być odpowiedzią na pytanie, jaki jest minimalny zestaw prymitywów, ponieważ intencją jest rozpoznanie i uproszczenie ich w jak największym stopniu przed skompilowaniem do JS. Opisano także niektóre trudności (jak bufory i ich właściwości mające mniej sensu).
wasamasa,
2
Myślę, że chcesz wskazać na samą Guile. Projekt Guile Emacs, chociaż jest znaczącym przypadkiem użycia, jest tutaj raczej dodatkiem.
phils