如果我已经有一个解释器,我为什么要使用像Parrot这样的VM来使用我使用的动态语言(Python,Perl,...)?我可以获得什么,在我的代码和我的机器之间使用不同的VM,以及使用单独的解释器的成本?
(我是VM问题的新手,所以答案可能很明显)
修改
答案 0 :(得分:5)
如果我已经有一个解释器,我为什么要使用像Parrot这样的VM来使用我使用的动态语言(Python,Perl,...)?
首先,如果你正在开始一个项目,那么你可能还没有翻译。
然而,假设您有一名翻译并且正在考虑是否要为其添加功能或重写它以使用Parrot,那么我们想到的权衡是:
就个人而言,Parrot的优化器(以及基于寄存器的设计,主要是为了使优化更容易)和经过良好测试的跨平台代码库足以说服我。
答案 1 :(得分:4)
解析ASCII源代码很慢。如果源文件被解析一次,然后解释器使用二进制结构,则会更快。在Python中,此结构存储在.pyc
文件中以便快速重用。
有两个步骤:
这用于例如scala:没有scala-VM。 Scala只是一种新语法。 scala编译器创建java字节代码。