语境改变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