2014-02-20 59 views
0

我對使基於堆棧的解釋器解釋動態語言感興趣。我明白字節碼和堆棧是如何工作的,但我正在努力實現諸如執行框架和對象之類的東西。實現基於堆棧的解釋器

我知道(糾正我,如果我錯了)的執行框架將有

  • 堆棧指針
  • 程序計數器
  • 局部變量表
  • 等。

和一個物體會沿着線條

  • 類/超(Ruby中相當於是 「克拉斯」)
  • 變量表
  • 方法表
  • 等。

,但我需要幫助實現此。

感謝, 丹尼爾

+2

歡迎來到StackOverflow!處理這類事情的最好方法是給它一個刺,並針對你遇到的問題提出具體問題。最好的SO問題有代碼,你期望什麼,實際發生了什麼。你的問題太廣泛了,會有太多不同的意見在這裏很適合。 –

回答

0

對於你的第一個實驗中,我建議你實現堆棧鏈表。每個列表條目(「框架」)代表一個函數調用,所以它需要;

  • 到呼叫者幀的參考,
  • 函數本身的引用,
  • 該函數內的程序計數器,並
  • 的函數變量的表。

如果你知道每個函數調用之前,那麼每個變量可以分配每一個插槽,所以每次調用該函數分配相同大小的幀的所有變量,但不同功能的幀大小會有所不同。

這個計劃被稱爲「意大利麪條堆棧」。如果要支持延續,則需要垃圾回收幀,而不是在函數調用返回時解除分配。雖然意大利麪條棧不是超高性能的路徑,但它非常靈活,可能適合你。

對於你的對象,「super」是一個指向klass對象的指針,並且方法表進入klass對象。對非klass對象沒有必要使用方法;爲了處理Ruby所謂的「單例」方法,你只爲那個實例分配一個單獨的klass對象,其超級是原始的聲明類。 Ruby在klass對象上使用標誌來指示哪些是單例類,它們是通過「擴展」添加的模塊,哪些是原始的聲明類。