emacs 解释器如何评估表达式?
How does emacs interpreter evaluate an expression?
emacs VM 中有 elisp 解释器和字节码解释器,还是只有一个解释器?
如果只有一个解释器,它可以评估什么代码格式?
- 只有s-expression(所以字节码只是一种s-expression?)
- 只有字节码(所以 s-expression 会在求值之前编译?)。
- 两者都有(那为什么不只有字节码?)。
我认为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 实现的。
emacs VM 中有 elisp 解释器和字节码解释器,还是只有一个解释器?
如果只有一个解释器,它可以评估什么代码格式?
- 只有s-expression(所以字节码只是一种s-expression?)
- 只有字节码(所以 s-expression 会在求值之前编译?)。
- 两者都有(那为什么不只有字节码?)。
我认为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 实现的。