OOP设计模式中解释器和虚拟机之间的确切区别是什么,特别是在游戏编程环境中?
http://www.oodesign.com/interpreter-pattern.html将解释器模式标识为某种映射:
将域映射到语言,将语言映射到语法,将语法映射到层次化的面向对象设计
另一方面虚拟机应该......究竟是什么?
我认为这必须是某种对象集合才能进行图灵完备计算。除了获得硬件互操作性的最小公分母(最好的例子是Java平台)之外,它有什么用途?
您是否可以想象VM的用例而不是将应用程序移植到另一个平台(以及用于游戏)? VM是否假设有明确的抽象语言并且口译员指挥它?
答案 0 :(得分:0)
两种不同的抽象 因此,在.Net术语中,两种不同的源语言可以解释为相同的结果,只需要解释一次就可以获得额外的奖励。
VM就像你说的那样从“物理”环境中抽象出来,作为奖励,你可以专门为它们进行优化。
两者的一个用途是游戏引擎。说一个基本的文字冒险。
所以你可以用法语和英语描述一个房间,两者都会产生相同的对象和事件。
使用VM,您可以在Winforms或ActionScript
中执行该描述答案 1 :(得分:0)
大多数语言中的VM都以运行时库的形式存在;如果删除了解析器/编译器部分,它在任何解释器中都存在 in potentio 。但它确实没有真正成为真正的虚拟机,直到它被正确指定,通常以字节码的语法形式。
如果您阅读有关版本4的Perl内部结构,然后阅读有关Parrot或JVM字节代码的内容,则差别应该是显而易见的。运行时支持和语言/编译器之间的接口更加清晰。虚拟机是一个软件引擎,可以使用工程工具进行优化。
在更高级别的设计中,语言实现中虚拟机的存在使得能够更清楚地指定语言的允许语义。至少对数组执行边界检查。 :)