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

时间:2016-10-21 07:33:30

标签: emacs elisp

在emacs VM中是否有一个elisp解释器和一个字节码解释器,或者是一个解释器?

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

  • 只有s-expression(所以字节代码只是一种s-expression?)。
  • 只有字节代码(所以在评估之前会编译s表达式吗?)。
  • 他们两个(那么为什么不只是字节码?)。

我认为emacs只有一个解释器,它只能评估s-expression,字节码是一种s-expression。那么为什么解释器在评估之前不会将s-expression编译成字节码,为什么我们需要 public class MyService extends Service { private static final String TAG = "VYKAL"; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); Log.i(TAG, "onCreate()"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand()"); return START_NOT_STICKY; } @Override public void onTaskRemoved(Intent rootIntent) { super.onTaskRemoved(rootIntent); MainActivity.closeActivity(); } @Override public void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestroy()"); } @Override public void onLowMemory() { super.onLowMemory(); Log.i(TAG, "onLowMemory()"); } } 函数呢?宏的原因?

1 个答案:

答案 0 :(得分:1)

GNU emacs有两个,evaluator,适用于S表达式,byte-code compiler + interpreter

让评估器适用于简单的命令和函数,因为它避免了编译的开销。这对于交互式定义的助手来说非常方便,比如说,有些人很快就会破解一些功能来修改缓冲区的内容。

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