鹦鹉到底是什么?
我知道Parrot是一台虚拟机,但是我觉得我并没有完全理解它背后的想法。
据我了解,这是一台处理多种语言的虚拟机。这样对吗?
使用虚拟机而不只是解释器有什么优势?
派诺特到底在做什么呢?
解决方案
Parrot是字节码解释器(可能在以后的阶段使用JIT)。想想Java及其虚拟机,只是(目前)Java更适合静态语言,而Parrot从一开始就更适合动态语言。
另请参阅科迪的出色答案!强烈推荐。
克里斯介绍了面向用户的差异,因此我将介绍另一面。
鹦鹉是基于寄存器的,而不是基于堆栈的。这意味着编译器开发人员可以更轻松地优化应为给定代码段分配寄存器的方式。另外,从理论上讲,从Parrot字节码到机器码的编译比基于堆栈的代码快,这是因为我们运行的是基于寄存器的系统,并且有很多针对它们进行优化的经验。
Parrot是专门设计用于处理多种语言(尤其是动态语言)的虚拟机。尽管涉及到一些有趣的技术,但由于它可以处理多种语言,因此它将能够跨越语言边界。例如,一旦它可以编译Ruby,Perl和Python,就应该很容易跨越这些界限,让我使用Python中的Ruby库,Python中的Perl库,以及我喜欢的任何组合。
鹦鹉始于Perl世界,从事此工作的许多人都是经验丰富的Perl人。 Parrot并未使用当前的Perl解释器来显示其年龄,而是允许Perl具有诸如可分发的预编译模块(其他人已经使用了很长时间)和更智能的垃圾收集器等功能。
其他人给出了很好的答案,所以对我来说,剩下的就是解释"动态"语言的实际含义。
在虚拟机的上下文中,这意味着在编译时不知道变量的类型。在"静态"语言中,类型(或者至少它的父类)在编译时是已知的,并且许多优化都基于该知识。
另一方面,在动态语言中,我们可能知道变量是持有容器类型(如数组)还是标量(字符串,数字,...),但是在编译时类型信息少得多。
另一个特点是动态语言通常使类型转换变得容易得多,例如在perl和javascript中,如果我们将字符串用作数字,则会自动将其转换为数字。
Parrot旨在使此类操作变得容易和快速,并允许优化而无需在编译时知道类型信息。
这是官方鹦鹉百科。
我们可以在此处找到很多信息和链接。
Parrot Wiki主页的底部还显示了Planet Parrot feed聚合器的最新标题。
除了VM外,Parrot项目还构建了一个功能非常强大的工具链,可以更轻松地移植现有语言或者开发新语言。
Parrot VM还将为许多强大的Perl 6新功能提供其他语言的支持(请参阅Perl 6 Wiki官方网站以获取更多Perl 6信息)。
Parrot将提供不同语言的模块之间的互操作性,因此,例如,其他语言可以利用巨大的Perl 6版本的CPAN(庞大的Perl 5模块档案库,Perl 6可以通过即将发布的版本访问) Perl 5.12)。
老实说,我不知道这有什么大不了的。它已经走了很长一段路,但是用途不多。主要的目标语言尚未真正出现,并且已经失去了行业专业人士的广泛关注。同时,.Net之类的其他解决方案以及Jython之类的项目向我们展示了,现在和现在可以击败任何感知到的炒作。