我對使基於堆棧的解釋器解釋動態語言感興趣。我明白字節碼和堆棧是如何工作的,但我正在努力實現諸如執行框架和對象之類的東西。實現基於堆棧的解釋器
我知道(糾正我,如果我錯了)的執行框架將有
- 堆棧指針
- 程序計數器
- 局部變量表
- 棧
- 等。
和一個物體會沿着線條
- 類/超(Ruby中相當於是 「克拉斯」)
- 變量表
- 方法表
- 等。
,但我需要幫助實現此。
感謝, 丹尼爾
我對使基於堆棧的解釋器解釋動態語言感興趣。我明白字節碼和堆棧是如何工作的,但我正在努力實現諸如執行框架和對象之類的東西。實現基於堆棧的解釋器
我知道(糾正我,如果我錯了)的執行框架將有
和一個物體會沿着線條
,但我需要幫助實現此。
感謝, 丹尼爾
對於你的第一個實驗中,我建議你實現堆棧鏈表。每個列表條目(「框架」)代表一個函數調用,所以它需要;
如果你知道每個函數調用之前,那麼每個變量可以分配每一個插槽,所以每次調用該函數分配相同大小的幀的所有變量,但不同功能的幀大小會有所不同。
這個計劃被稱爲「意大利麪條堆棧」。如果要支持延續,則需要垃圾回收幀,而不是在函數調用返回時解除分配。雖然意大利麪條棧不是超高性能的路徑,但它非常靈活,可能適合你。
對於你的對象,「super」是一個指向klass對象的指針,並且方法表進入klass對象。對非klass對象沒有必要使用方法;爲了處理Ruby所謂的「單例」方法,你只爲那個實例分配一個單獨的klass對象,其超級是原始的聲明類。 Ruby在klass對象上使用標誌來指示哪些是單例類,它們是通過「擴展」添加的模塊,哪些是原始的聲明類。
歡迎來到StackOverflow!處理這類事情的最好方法是給它一個刺,並針對你遇到的問題提出具體問題。最好的SO問題有代碼,你期望什麼,實際發生了什麼。你的問題太廣泛了,會有太多不同的意見在這裏很適合。 –