我知道Parrot是一个虚拟机,但我觉得我并没有完全理解它背后的想法。
据我所知,它是一个虚拟机,可以处理多种语言。它是否正确?
使用虚拟机而不仅仅是解释器有什么好处?
Parrot究竟做了什么让它变得如此重要?
答案 0 :(得分:36)
Parrot是专为处理多种语言而设计的虚拟机,尤其是动态语言。尽管涉及一些有趣的技术,但由于它可以处理多种语言,因此它将能够跨越语言边界。例如,一旦它可以编译Ruby,Perl和Python,就应该很容易跨越这些边界让我在Python中使用Ruby库,一个Python的Perl库,所以我喜欢的任何组合。
Parrot开始于Perl世界,许多从事这项工作的人都是经验丰富的Perl人。 Parrot不再使用当前显示其年龄的Perl解释器,而是允许Perl具有诸如可分发的预编译模块(其他人已经拥有很长时间)和更智能的垃圾收集器等功能。
答案 1 :(得分:21)
Parrot是基于寄存器而不是基于堆栈的。这意味着编译器开发人员可以更轻松地优化为给定代码段分配寄存器的方式。此外,从理论上讲,从Parrot字节码到机器代码的编译可以比基于堆栈的代码更快,因为我们运行基于寄存器的系统并且有更多的优化经验。
答案 2 :(得分:13)
Parrot是一个字节码解释器(可能在未来阶段使用JIT)。想想Java及其虚拟机,除了Java(目前)更倾向于静态语言,而Parrot从一开始就面向动态语言。
另见Cody的优秀答案!强烈推荐。
答案 3 :(得分:8)
其他人给出了很好的答案,所以对我而言,解释“动态”语言实际意味着什么。
在虚拟机的上下文中,这意味着在编译时不知道变量的类型。在“静态”语言中,类型(或至少是它的父类)在编译时是已知的,并且许多优化建立在该知识的基础上。
另一方面,在动态语言中,您可能知道变量是保存容器类型(如数组)还是标量(字符串,数字......),但在编译时您的类型信息要少得多。 / p>
另一个特点是动态语言通常使类型转换更容易,例如在perl和javascript中如果使用字符串作为数字,它会自动转换为数字。
Parrot旨在使这些操作变得简单快捷,并且无需在编译时知道类型信息即可进行优化。
答案 4 :(得分:2)
你可以在那里找到很多信息和链接。
Parrot wiki主页的底部还会显示Planet Parrot Feed聚合器的最新标题。
除了VM之外,Parrot项目正在建立一个非常强大的工具链,以便更容易移植现有语言或开发新语言。
Parrot VM还将为许多强大的新Perl 6功能提供其他语言支持(请参阅Official Perl 6 Wiki获取更多Perl 6信息)。
Parrot将提供不同语言的模块之间的互操作性,因此,例如,其他语言可以利用将成为CPAN的巨大Perl 6版本(庞大的Perl 5模块存档,Perl 6将能够访问)通过即将发布的Perl 5.12)。
答案 5 :(得分:1)
答案 6 :(得分:1)