5

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

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

编辑

Parrot VM 对最终用户有什么好处?

4

2 回答 2

5

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

首先,如果您正在启动一个项目,那么您可能还没有解释器。

但是,假设您有一个解释器并且正在考虑是否向它添加功能或重写它以使用 Parrot,那么您想到的权衡是:

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

Personally, Parrot's optimizer (and register-based design, largely to make optimizations easier) and well tested cross platform codebase would be enough to convince me.

于 2011-08-17T16:23:39.627 回答
4

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

有两个步骤:

  1. 解析源码,创建字节码
  2. 运行(解释)字节码。

这由例如 scala 使用:没有 scala-VM。Scala 只是一种新语法。scala 编译器创建 java 字节码。

于 2011-08-17T14:01:21.117 回答