假设您需要实现一个玩具VM(例如Brainfuck),其中您有一个表示内存的外部数据结构(一个简单的固定数组),以及一个ComputationalUnit对象,它关注给定集合的动作操作。 除了在给定指令的情况下调用正确方法的巨型开关之外,实现最后一个简单添加指令的最有效方法是什么。 假设从文件或用户输入读取指令作为String或char(brainfuck case)或通过后悔解析。
如果答案涉及设计模式,我很乐意被重定向。 谢谢大家。
注意:我要求一个结构,Java不是问题
答案 0 :(得分:1)
通常情况下,一个巨大的开关是可行的。
您可以将指令包装到类中,让它们访问内存/寄存器并实现execute(some context)
之类的操作 - 因此添加指令将减少到添加新类。当然,您需要一种指令解析器,在这种方法中,必须根据可用指令列表以某种方式初始化解析器。
您可以使用这种方法,类似于硬件开发人员所做的那样 - 制作微码的模拟 - 将VM操作拆分为较小的操作,并在较小的交换机中处理这些操作,例如:从内存加载到堆栈的值可以分为2个操作 - 将一些数据从内存加载到临时寄存器中并将该寄存器推送到堆栈 - 每个操作都可以在以后重复使用。