Контекст
В качестве университетского проекта мы хотим изменить pharo vm для использования таблицы объектов и посмотреть, что произойдет.
Мы используем клон pharo-vm из 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, поэтому нам не нужно компилировать и видеть, что это не сработало.
Что-то вроде:
StackInterpreter test: '1 inc'
И тогда я могу отлаживать, если примитив неверен или возникает ошибка. Конечно, нужно сделать гораздо больше, но как я могу этого добиться?
Что мы пробовали
категория
VMMaker-InterpreterSimulation
классStackInterpreterSimulator
. Пробуем код в комментарияхDoIt ^ (StackInterpreterSimulator new openOn: Smalltalk imageName) test
ошибки:
displayForm := 'Display has not yet been installed' asDisplayText form.
ByteString не понимает
asDisplayText
(CogVMSimulator new openOn: Smalltalk imageName) test (InterpreterSimulator new openOn: Smalltalk imageName) test
ошибка:
PrimitiveFailed: primitive #basicNew: in Array class failed
Я также нашел этот снимок экрана, но он только отлаживает виртуальную машину извне с помощью gbd: http://vimeo.com/22485382#< /а>
Наш проект размещен здесь: http://smalltalkhub.com/#!/~kirstin/PharoObjectTable а>
Текущий статус
Мы начали реализацию таблицы объектов. Поиск атрибутов может проходить через таблицу объектов. Полная поддержка таблицы объектов и отсутствие использования прямых указателей очень сложны, поскольку указатели ожидаются везде. Поэтому мы используем указатели в таблице объектов, чтобы определить, когда поиск должен проходить через OT. Мы также нашли все примитивы создания объектов и добавили новые объекты в таблицу.