Работа с записываемой памятью в Haskell - реализация виртуальной машины Infocom Z-Machine - PullRequest
6 голосов
/ 17 января 2011

Многие люди, которые были компьютерными энтузиастами в 80-х годах, слышали о серии интерактивных игровых игр Infocom, в частности такие, как «Zork», «Руководство автостопом по галактике», «Planetfall», «A Mind Forever Voyaging» , и т. Д. .

Эти игры были реализованы на виртуальной машине "Z-Machine" . Машина реализована в виде блока оперативной памяти, стека и виртуального процессора. Процесс выполняет инструкции, которые могут динамически читать и записывать в ОЗУ.

У меня такой вопрос: оперативная память виртуальных машин динамическая. Какой эффективный и разумно идиоматичный способ представления этой ОЗУ (и более целостной структуры виртуальной машины), чтобы я мог реализовать программное обеспечение для запуска этих игр? Например, я должен использовать Data.Array для представления оперативной памяти и монады состояния?

Ответы [ 2 ]

5 голосов
/ 17 января 2011

Haskell имеет различные типы массивов с различными уровнями контроля побочных эффектов и в коробочном, и в распакованном вариантах.Массированный массив - это массив указателей на значения, нераспакованные массивы - это массивы непрерывного блока памяти.Для оперативной памяти вы просто хотите рассматривать это как блок непрерывной памяти, так что вы, вероятно, захотите использовать распакованный тип массива, такой как STUARray, IOUArray, StorableArray или аналогичный.

3 голосов
/ 17 января 2011

Я бы рассмотрел стек монадных трансформаторов с IO внизу и одним или несколькими изменяемыми векторами для представления ОЗУ.

...