如果我已有解释器,为什么还要使用Parrot(或其他虚拟机)?

5 投票
2 回答
995 浏览
提问于 2025-04-16 23:47

我已经有了解释器了,为什么还要使用像Parrot这样的虚拟机来运行我用的动态语言(比如Python、Perl等)呢?这样做有什么好处?毕竟这样会让我的代码和机器之间多了一个虚拟机,还要用一个单独的解释器,这样的成本值得吗?

(我对虚拟机这个问题还很陌生,所以可能答案很明显)

编辑

Parrot虚拟机对最终用户有什么好处?

2 个回答

4

解析ASCII源代码的速度很慢。如果源文件只解析一次,然后解释器使用一种二进制结构,这样会更快。在Python中,这种结构会存储在.pyc文件中,以便快速重复使用。

这个过程分为两个步骤:

  1. 解析源代码,生成字节码
  2. 运行(解释)字节码。

比如说Scala就是这样:Scala没有自己的虚拟机。Scala只是一种新的语法。Scala编译器会生成Java字节码。

5

如果我已经有了解释器,为什么还要使用像Parrot这样的虚拟机来运行我用的动态语言(比如Python、Perl等)呢?

首先,如果你刚开始一个项目,可能你根本就没有解释器。

不过,假设你已经有了解释器,并且在考虑要不要在它上面增加功能,或者重写它来使用Parrot,那么可以考虑以下几点:

  • 一般来说,Parrot的测试可能比你现有的解释器要好(比如优化器更好,垃圾回收器更好等等)。
  • 通常,Parrot的开发者对跨平台的问题了解得比普通程序员要多。
  • 一般来说,Parrot已经解决了你可能会遇到的大多数问题。
  • Parrot的设计是为了通用性,这让它变得复杂;但你可能并不需要那么多的通用性。

就我个人而言,Parrot的优化器(以及基于寄存器的设计,主要是为了让优化更简单)和经过良好测试的跨平台代码库,足以让我信服。

撰写回答