如果我有翻译,为什么要使用Parrot(或其他VM)?

时间:2011-08-17 13:44:46

标签: python perl interpreter vm-implementation parrot

如果我已经有一个解释器,我为什么要使用像Parrot这样的VM来使用我使用的动态语言(Python,Perl,...)?我可以获得什么,在我的代码和我的机器之间使用不同的VM,以及使用单独的解释器的成本?

(我是VM问题的新手,所以答案可能很明显)

修改

What's the benefit of Parrot VM for end-users?

2 个答案:

答案 0 :(得分:5)

  

如果我已经有一个解释器,我为什么要使用像Parrot这样的VM来使用我使用的动态语言(Python,Perl,...)?

首先,如果你正在开始一个项目,那么你可能还没有翻译。

然而,假设您有一名翻译并且正在考虑是否要为其添加功能或重写它以使用Parrot,那么我们想到的权衡是:

  • 一般来说,Parrot可能比有问题的解释器更好测试(更好的优化器,更好的垃圾收集器等)。
  • 一般来说,Parrot的开发人员比普通的程序员更了解跨平台问题
  • 一般来说,Parrot已经解决了你可能遇到的大多数问题
  • Parrot的设计考虑到了完全的通用性,增加了大量的复杂性;你可能不需要额外的一般性

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

答案 1 :(得分:4)

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

有两个步骤:

  1. 解析源代码,创建字节代码
  2. 运行(解释)字节代码。
  3. 这用于例如scala:没有scala-VM。 Scala只是一种新语法。 scala编译器创建java字节代码。