2012-03-25 45 views
3

我的确了解这两种设计背后的技术概念,但通常使字节码解释器的速度更快?有没有好书,有人可以指点我?什么使字节码解释器比一个ast-walking解释器更快?

+1

一个原因可能是因为走一条AST使用了很多递归函数调用,而这些调用可能有点贵,而字节码解释器通常只是一个循环和某种跳转表。 – 2012-03-26 05:58:30

回答

5

最明显的原因是AST通常仍然过高,而字节码语义对于执行可能是微不足道的。 AST行走解释器中最慢的事情通常是上下文查找:所有变量,参数等都由它们的名称引用,而在字节码中,它们通常会被剥离并且将使用注册号或堆栈操作。当然,字节码可以被认为是AST行走的一种特殊情况 - 带有扁平的,简单的“AST”,并且可能是优化的“walker”(例如,使用线程代码转换)。在特定的AST和高度专业化的字节码之间有许多可能的状态 - 例如,为了解释功能语言,可以保持AST结构,但用De Bruijn索引替换变量名称。