ContextDebugging-Interpreter in VM, wenn vm Primitiven Projekt
Als Hochschule Ändern wir die die pharo vm verwenden, um ein Objekt-Tabelle ändern möchten, und sehen, was passiert.
Wir verwenden eine pharo-vm clone from github und VMMaker. Der Aufbau der VM funktioniert einwandfrei.
InterpreterPrimitives>>primitiveIntegerIncrement
"increments an integer"
self pushInteger: self popInteger + 1 .
und modifizierte StackInterpreter class>>initializePrimitiveTable
entsprechend
MaxPrimitiveIndex := 576.
"... and so on ..."
(575 primitiveFail)
(576 primitiveIntegerIncrement))
Und es funktioniert:
Um eine primitive wir hinzugefügt, die gibt einen Integer erhöht loszulegen.
Problem
Wenn wir an die VM machen Änderungen, die wir bereits in der SmalltalkImage zu Testlauf wollen so brauchen wir nicht zu kompilieren und sehen, daß es nicht funktioniert hat.
Etwas wie:
StackInterpreter test: '1 inc'
Und ich kann dann debuggen, wenn die primitiven falsch ist oder ein Fehler auftritt. Natürlich muss noch viel mehr getan werden, aber wie kann ich das erreichen?
Was wir versucht
Kategorie
VMMaker-InterpreterSimulation
KlasseStackInterpreterSimulator
. Der Versuch, den Code in den KommentarenDoIt ^(StackInterpreterSimulator new openOn: Smalltalk imageName) test
Fehler:
displayForm := 'Display has not yet been installed' asDisplayText form.
der ByteString nicht
asDisplayText
(CogVMSimulator new openOn: Smalltalk imageName) test (InterpreterSimulator new openOn: Smalltalk imageName) test
Fehler nicht versteht:
PrimitiveFailed: primitive #basicNew: in Array class failed
fand ich auch diesen Bildschirm Guss aber es debuggt nur die VM von außen mit gbd: http://vimeo.com/22485382#
Unser Projekt hier gehostet: http://smalltalkhub.com/#!/~kirstin/PharoObjectTable
Aktuelle Stand
wir eine Objekttabelle begonnen Umsetzung . Das Nachschlagen von Attributen kann durch die Objekttabelle gehen. Vollständige Objekttabellenunterstützung und keine Verwendung von direkten Pointes ist sehr schwierig, da Zeiger überall erwartet werden. Also verwenden wir Zeiger in die Objekttabelle, um zu identifizieren, wann eine Suche den OT durchlaufen sollte. Wir haben auch alle Grundelemente der Objekterstellung gefunden und fügen der Tabelle neue Objekte hinzu.
Nur als Referenz, möchten Sie vielleicht die RoarVM betrachten, es hat normalerweise eine Objekttabelle, aber es gibt auch eine Variante ohne: https://github.com/smarr/RoarVM/tree/features/without-object- Tabelle Im Vergleich zur CogVM hat sie keinen JIT-Compiler und ist im Allgemeinen ziemlich langsam. Es kann jedoch noch ein paar Einsichten geben, wie man etwas angeht. – smarr