語境改變VM元
當我們想要改變的菲羅VM使用對象表,看看會發生什麼一個大學項目在調試時解釋在VM。
我們使用pharo-vm clone from github和VMMaker。構建虛擬機工作正常。
要開始我們增加了一個原始返回一個整數遞增:
InterpreterPrimitives>>primitiveIntegerIncrement
"increments an integer"
self pushInteger: self popInteger + 1 .
和修改StackInterpreter class>>initializePrimitiveTable
相應
MaxPrimitiveIndex := 576.
"... and so on ..."
(575 primitiveFail)
(576 primitiveIntegerIncrement))
和它的作品。
問題
當我們修改我們要試運行已經在SmalltalkImage所以我們不需要編譯,看看它是沒有工作的VM。
喜歡的東西:
StackInterpreter test: '1 inc'
然後,我可以調試原始錯誤或發生錯誤。當然需要做更多的事情,但我怎麼能做到這一點?
我們試圖
類別
VMMaker-InterpreterSimulation
類StackInterpreterSimulator
。試圖代碼中的註釋DoIt ^(StackInterpreterSimulator new openOn: Smalltalk imageName) test
錯誤:
displayForm := 'Display has not yet been installed' asDisplayText form.
的字節串不明白
asDisplayText
(CogVMSimulator new openOn: Smalltalk imageName) test (InterpreterSimulator new openOn: Smalltalk imageName) test
錯誤:
PrimitiveFailed: primitive #basicNew: in Array class failed
我也發現這個屏幕鑄但只使用外GBD調試的VM:http://vimeo.com/22485382#
我們的項目在這裏舉行:
我們開始實施對象表http://smalltalkhub.com/#!/~kirstin/PharoObjectTable
現狀。屬性的查找可以遍歷對象表。完全支持對象表並且不使用直接指針是非常棘手的,因爲指針無處不在。所以我們在對象表中使用指針來識別查找應該通過OT的時間。我們還發現了所有的對象創建原語並向表中添加了新的對象。
僅供參考,你可能想看看RoarVM,它通常有一個對象表,但也有一個變種沒有:https://github.com/smarr/RoarVM/tree/features/without-object-表與CogVM相比,它沒有JIT編譯器,總體來說它相當慢。然而,它仍然可以提供一些關於如何處理事情的見解。 – smarr