【发布时间】:2009-11-27 23:54:40
【问题描述】:
Parrot 是最初为 Perl 6 设计的虚拟机。
Parrot VM 提供哪些技术能力是 Java Virtual Machine (JVM)/Hotspot VM 和 Common Language Runtime (CLR) 等竞争虚拟机所缺乏的?
【问题讨论】:
Parrot 是最初为 Perl 6 设计的虚拟机。
Parrot VM 提供哪些技术能力是 Java Virtual Machine (JVM)/Hotspot VM 和 Common Language Runtime (CLR) 等竞争虚拟机所缺乏的?
【问题讨论】:
以下答案写于 2009 年。另见2015 update by raiph。
为了扩展@Reed 并指出一些亮点,Parrot 的操作码远高于大多数虚拟机。例如,虽然大多数机器存储整数和浮点数,但基本寄存器是整数、数字、字符串和 Parrot Magic Cookies (PMC)。仅仅内置字符串就是 JVM 的一个进步。
更有趣的是 PMC,有点像 JVM 的对象类型,但更具可替代性。 PMC 是all the other more complicated types 的容器,您需要使用真正的语言(如数组、表、树、迭代器、I/O 等)。PMC 及其各种内置操作意味着语言编写者的工作量更少。 Parrot 不会回避实现语言的杂乱但必要的部分。
我的信息可能已经过时,但我相信操作码是可插入的,您可以发布仅包含您的语言所需操作码的 Parrot VM。它们也将是可继承的,如果您的语言希望它们的数组与普通 Parrot 数组的工作方式略有不同,您可以对其进行子类化。
最后,Parrot 不仅可以用汇编语言 (PASM) 编写,还可以用稍高级的语言 Parrot Intermediate Representation (PIR) 编写。 PIR 具有循环、子例程、本地化变量以及一些基本的数学和比较操作,这是人们期望在编程语言中具备的所有基础知识,而且不会离金属太远。
总而言之,Parrot 对希望设计一种语言并将尽可能多的实现留给其他人的语言设计师(由他们编写并为他们编写)非常友好。
【讨论】:
您可以在Parrot VM Intro 页面上阅读大部分内容。
与 JVM 或 CLR 相比,Parrot 的主要优势在于它旨在首先支持动态语言,并可能为动态类型语言提供更好的支持和性能。 JVM 和 CLR 都更倾向于支持静态类型语言,许多设计决策都表明了这一点。
【讨论】:
Parrot 是最初为 Perl 6 设计的虚拟机。
现在有两个最初为 Perl 6 设计的 VM;对MoarVM 的承诺始于 2012 年。
Parrot VM 提供了 Java 虚拟机 (JVM)/Hotspot VM 和公共语言运行时 (CLR) 等竞争虚拟机所缺乏的哪些技术能力?
在another answer on this page,当前(2015 年 4 月)Parrot 首席开发人员 Reini Urban 提供了 Parrot 与 JVM 和 CLR VM 的简要比较。
According to Reini,Parrot 相对于 MoarVM 的一个关键优势是“有效地无锁线程”。
【讨论】:
使 Parrot 与大多数 VM 不同(当然与 JVM 不同)的另一件事是,它是一个寄存器机器而不是堆栈机器。但我想人们会争论很长一段时间,这到底是优势还是劣势。
【讨论】:
我对 JVM 和 CLR 的了解不够,但是我的提示:
更新:这可能无关紧要,因为 JVM 现在是 Rakudo Perl 6 后端之一。请参阅 Rakudo Perl 6 on the JVM(Perl 6 Advent 日历 2013,第 3 天)。
【讨论】:
JVM 和 CLR 的主要优势和技术区别在于类型(类称为 PMC)和操作(方法)可以从高效的用户动态加载 -提供了 C 实现,并且内置了用于创建和扩展语言的解析器框架。
【讨论】:
这个问题已经过时了。 Rakudo Perl 6 不再以 Parrot 作为后端; MoarVM 是首选后端,JVM 后端正在开发中(通常可以工作,但许多 Perl 6 功能尚未实现或当前已损坏)。正在完成开发工作(尚未为用户准备好)以添加 Javascript 作为第三个后端。
【讨论】: