2016-10-21 4 views
0

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

Если есть только один интерпретатор, какой формат кода он может оценить?

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

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

ответ

1

GNU emacs имеет как evaluator, который работает на S-выражениях, так и byte-code compiler + interpreter.

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

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

+0

Хороший ответ, спасибо за помощь! – Color

Смежные вопросы