上世纪80年代的许多计算机发烧友都听说过Infocom系列互动小说游戏,例如“Zork”,“The Hitchhiker's Guide to Galaxy”,“Planetfall”,“A Mind Forever Voyaging”,etc

这些游戏是在"Z-Machine"虚拟机之上实现的。该机器被实现为一块RAM,一个堆栈和一个虚拟处理器。该过程执行可以动态读取和写入RAM的指令。

我的问题是:VM RAM是动态的。什么是一种有效且合理的惯用方式来表示此RAM(更完整地讲是虚拟机的结构),以便我可以实现运行这些游戏的软件?例如,我应该使用Data.Array表示RAM和状态monad吗?

最佳答案

Haskell具有各种类型的阵列,具有不同级别的副作用控制,并且具有盒装和未盒装两种形式。装箱的数组是指向值的指针的数组,未装箱的数组是连续的内存块的数组。对于RAM,您只想将其视为一块连续的内存,因此您可能想要使用未装箱的数组类型,例如STUARray或IOUArray或StorableArray或类似的数组。

关于haskell - 在Haskell中处理可写内存-Infocom的Z-Machine VM的实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4710829/

10-16 07:07