2012-03-25 29 views
3

我的確瞭解這兩種設計背後的技術概念,但通常使字節碼解釋器的速度更快?有沒有好書,有人可以指點我?什麼使字節碼解釋器比一個ast-walking解釋器更快?

+1

一個原因可能是因爲走一條AST使用了很多遞歸函數調用,而這些調用可能有點貴,而字節碼解釋器通常只是一個循環和某種跳轉表。 – 2012-03-26 05:58:30

回答

5

最明顯的原因是AST通常仍然過高,而字節碼語義對於執行可能是微不足道的。 AST行走解釋器中最慢的事情通常是上下文查找:所有變量,參數等都由它們的名稱引用,而在字節碼中,它們通常會被剝離並且將使用註冊號或堆棧操作。當然,字節碼可以被認爲是AST行走的一種特殊情況 - 帶有扁平的,簡單的「AST」,並且可能是優化的「walker」(例如,使用線程代碼轉換)。在特定的AST和高度專業化的字節碼之間有許多可能的狀態 - 例如,爲了解釋功能語言,可以保持AST結構,但用De Bruijn索引替換變量名稱。