contestodebug interprete in VM quando si cambia primitive vm
Come un progetto universitario che vogliamo cambiare la vm del Pharo di utilizzare un oggetto-tavolo e vedere cosa succede.
Utilizziamo un pharo-vm clone from github e VMMaker. Costruire la VM funziona bene.
Per iniziare abbiamo aggiunto un primitivo che restituisce un intero incrementato:
InterpreterPrimitives>>primitiveIntegerIncrement
"increments an integer"
self pushInteger: self popInteger + 1 .
e modificato di conseguenza StackInterpreter class>>initializePrimitiveTable
MaxPrimitiveIndex := 576.
"... and so on ..."
(575 primitiveFail)
(576 primitiveIntegerIncrement))
e funziona.
Problema
Quando facciamo modifiche al VM che vogliamo testare-run già nel SmalltalkImage quindi non abbiamo bisogno di compilare e vedere che non ha funzionato.
Qualcosa di simile:
StackInterpreter test: '1 inc'
E poi posso mettere a punto se il primitivo è sbagliato o si verifica un errore. Ovviamente bisogna fare molto di più, ma come posso ottenerlo?
quello che abbiamo provato
categoria
VMMaker-InterpreterSimulation
classeStackInterpreterSimulator
. Cercando il codice nei commentiDoIt ^(StackInterpreterSimulator new openOn: Smalltalk imageName) test
errori:
displayForm := 'Display has not yet been installed' asDisplayText form.
il ByteString non capisce
asDisplayText
(CogVMSimulator new openOn: Smalltalk imageName) test (InterpreterSimulator new openOn: Smalltalk imageName) test
errore:
PrimitiveFailed: primitive #basicNew: in Array class failed
Ho trovato anche questo cast schermo, ma esegue il debug solo il VM dall'esterno usando GBD: http://vimeo.com/22485382#
Il nostro progetto è ospitato qui: http://smalltalkhub.com/#!/~kirstin/PharoObjectTable
Stato corrente
Abbiamo iniziato ad attuare una tabella di oggetti . La ricerca degli attributi può passare attraverso la tabella degli oggetti. Il supporto completo della tabella degli oggetti e l'uso di punti diretti non sono molto complessi in quanto i puntatori sono attesi ovunque. Quindi usiamo i puntatori nella tabella degli oggetti per identificare quando una ricerca deve passare attraverso l'OT. Abbiamo anche trovato tutte le primitive di creazione di oggetti e aggiunto nuovi oggetti alla tabella.
Solo per riferimento, si potrebbe voler guardare il RoarVM, normalmente ha una tabella oggetti ma c'è anche una variante senza: https://github.com/smarr/RoarVM/tree/features/without-object- tabella Rispetto al CogVM, non ha un compilatore JIT, ed è piuttosto lento in generale. Tuttavia, potrebbe comunque fornire alcune informazioni su come affrontare le cose. – smarr