如果我已有解释器,为什么还要使用Parrot(或其他虚拟机)?
我已经有了解释器了,为什么还要使用像Parrot这样的虚拟机来运行我用的动态语言(比如Python、Perl等)呢?这样做有什么好处?毕竟这样会让我的代码和机器之间多了一个虚拟机,还要用一个单独的解释器,这样的成本值得吗?
(我对虚拟机这个问题还很陌生,所以可能答案很明显)
编辑
2 个回答
4
解析ASCII源代码的速度很慢。如果源文件只解析一次,然后解释器使用一种二进制结构,这样会更快。在Python中,这种结构会存储在.pyc
文件中,以便快速重复使用。
这个过程分为两个步骤:
- 解析源代码,生成字节码
- 运行(解释)字节码。
比如说Scala就是这样:Scala没有自己的虚拟机。Scala只是一种新的语法。Scala编译器会生成Java字节码。
5
如果我已经有了解释器,为什么还要使用像Parrot这样的虚拟机来运行我用的动态语言(比如Python、Perl等)呢?
首先,如果你刚开始一个项目,可能你根本就没有解释器。
不过,假设你已经有了解释器,并且在考虑要不要在它上面增加功能,或者重写它来使用Parrot,那么可以考虑以下几点:
- 一般来说,Parrot的测试可能比你现有的解释器要好(比如优化器更好,垃圾回收器更好等等)。
- 通常,Parrot的开发者对跨平台的问题了解得比普通程序员要多。
- 一般来说,Parrot已经解决了你可能会遇到的大多数问题。
- Parrot的设计是为了通用性,这让它变得复杂;但你可能并不需要那么多的通用性。
就我个人而言,Parrot的优化器(以及基于寄存器的设计,主要是为了让优化更简单)和经过良好测试的跨平台代码库,足以让我信服。