Как интерпретатор emacs оценивает выражение?

#emacs #elisp

#emacs #elisp

Вопрос:

Есть ли интерпретатор elisp и интерпретатор байтового кода в emacs VM или только один интерпретатор?

Если существует только один интерпретатор, какой формат кода он может вычислять?

  • Только s-выражение (то есть байтовый код — это всего лишь разновидность s-выражения?).
  • Только байтовый код (таким образом, s-выражение будет скомпилировано перед вычислением?).
  • Оба (тогда почему не только байтовый код?).

Я думаю, что у emacs есть только один интерпретатор, он может оценивать только s-выражение, байтовый код — это разновидность s-выражения. Тогда почему интерпретатор не компилирует s-выражение в байт-код перед вычислением, зачем нам нужна byte-compile функция? Причина появления макросов?

Ответ №1:

В GNU emacs есть и вычислитель, который работает с S-выражениями, и компилятор байтового кода интерпретатор.

Наличие вычислителя удобно для простых команд и функций, поскольку это позволяет избежать накладных расходов на компиляцию. Это удобно для интерактивных помощников, скажем, для некоторых быстро взломанных функций для изменения содержимого буфера.

Наличие интерпретатора байтового кода полезно, поскольку это увеличивает скорость выполнения и снижает нагрузку на память из-за более плотного представления кода. Это вызывает беспокойство, поскольку многие (если не большинство) emacs реализованы на lisp.