解释器与虚拟机的区别

3
在面向对象设计模式中,Interpreter和Virtual Machine有什么确切的区别,特别是在游戏编程方面?http://www.oodesign.com/interpreter-pattern.html将解释器模式标识为某种映射:将领域映射到语言,将语言映射到语法,将语法映射到分层面向对象设计。另一方面,虚拟机是什么...确切地说是什么?我认为这必须是一些对象的集合,用于进行图灵完备计算。除了获得硬件互操作性的最小公分母(最好的例子是Java平台)之外,它还有什么用途?您能想象VM的用例而不是将应用程序移植到另一个平台(以及游戏)的目的吗?VM是否假定存在显式抽象语言和解释器来控制它?
2个回答

0
大多数编程语言都存在一种类似虚拟机的东西,以运行库的形式存在,并且如果解释器中去除了解析器/编译器部分,它也可以被潜在地实现。但它只有在正确规范化,通常是以字节码语法的形式,才真正成为一个真正的虚拟机。
如果你了解 Perl 版本 4 的内部结构,然后再了解一些 Parrot 或 JVM 字节码相关知识,你会发现它们之间的差异。运行时支持与语言/编译器之间的接口更加清晰明确。虚拟机是一种软件引擎,可以通过工程工具进行优化。
从较高级别的设计角度来看,在语言实现中存在虚拟机可以更清晰地规定语言的可允许语义,至少可以强制执行数组的边界检查。 :)

0

两种不同的抽象

因此,在 .Net 术语中,两种不同的源语言可以解释为相同的结果,并且只需要解释一次,这是额外的好处。

正如您所说,VM将您从“物理”环境中抽象出来,并作为奖励允许您专门为它们进行优化。

两者的一个用途是游戏引擎。比如一个基本的文本冒险游戏。

因此,您可以用法语和英语描述一个房间,两者都会得到相同的对象和事件。

使用VM,您可以在Winforms或ActionScript中执行该描述的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接