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