emacs 解释器如何评估表达式?

How does emacs interpreter evaluate an expression?

emacs VM 中有 elisp 解释器和字节码解释器,还是只有一个解释器?

如果只有一个解释器,它可以评估什么代码格式?

我认为emacs只有一个解释器,它只能计算s-expression,字节码是一种s-expression。那为什么解释器在求值前不把 s-expression 编译成字节码,为什么我们需要 byte-compile 函数呢?宏的原因?

GNU emacs 两者都有,evaluator, which works on S-expressions, and a byte-code compiler + interpreter.

拥有求值器对于简单的命令和函数来说很好,因为它避免了编译的开销。这对于交互式定义的助手来说很方便,比如说,一些快速组合在一起的函数来修改缓冲区的内容。

拥有字节码解释器很有用,因为它提高了执行速度,并且由于代码的更密集表示而降低了内存开销。这是一个问题,因为很多(如果不是大多数)emacs 都是用 lisp 实现的。