Perl 鹦鹉到底是什么?

Perl 鹦鹉到底是什么?,perl,jit,vm-implementation,parrot,Perl,Jit,Vm Implementation,Parrot,我知道Parrot是一台虚拟机,但我觉得我没有完全理解它背后的想法 据我所知,这是一个虚拟机,可以处理多种语言。这是正确的吗 使用虚拟机而不仅仅是解释器有什么好处 Parrot到底做了些什么使其成为如此重要的事情?Parrot是一个字节码解释器(可能在未来阶段使用JIT)。想想Java及其虚拟机,Java(目前)更倾向于静态语言,而Parrot从一开始就倾向于动态语言 还可以看到科迪的精彩答案!强烈推荐。克里斯介绍了用户面临的差异,因此我将介绍另一面 Parrot是基于寄存器的,而不是基于堆栈的

我知道Parrot是一台虚拟机,但我觉得我没有完全理解它背后的想法

据我所知,这是一个虚拟机,可以处理多种语言。这是正确的吗

使用虚拟机而不仅仅是解释器有什么好处


Parrot到底做了些什么使其成为如此重要的事情?

Parrot是一个字节码解释器(可能在未来阶段使用JIT)。想想Java及其虚拟机,Java(目前)更倾向于静态语言,而Parrot从一开始就倾向于动态语言


还可以看到科迪的精彩答案!强烈推荐。

克里斯介绍了用户面临的差异,因此我将介绍另一面

Parrot是基于寄存器的,而不是基于堆栈的。这意味着编译器开发人员可以更轻松地优化为给定代码段分配寄存器的方式。此外,从Parrot字节码到机器码的编译在理论上可以比基于堆栈的代码更快,因为我们运行基于寄存器的系统,并且有更多的优化经验。

是一个专门设计用于处理多种语言,特别是动态语言的虚拟机。尽管涉及到一些有趣的技术,但由于它可以处理多种语言,它将能够跨越语言边界。例如,一旦它可以编译Ruby、Perl和Python,就应该很容易跨越这些界限,让我使用Python中的Ruby库,Python中的Perl库,所以不管我喜欢什么组合


Parrot起源于Perl世界,许多从事它工作的人都是有经验的Perl人员。Parrot不使用当前的Perl解释器(它显示了它的时代),而是允许Perl具有诸如可分发的预编译模块(其他人已经拥有很长时间)和更智能的垃圾收集器等功能。

其他人给出了很好的答案,所以我要做的是解释什么是“动态的”语言实际上意味着什么

在虚拟机的上下文中,这意味着在编译时变量的类型是未知的。在“静态”语言中,类型(或者至少是它的父类)在编译时是已知的,许多优化都是基于这种知识进行的

另一方面,在动态语言中,您可能知道变量是否包含容器类型(如数组)或标量(字符串、数字等),但在编译时,您拥有的类型信息要少得多

另一个特点是,动态语言通常使类型转换更加容易,例如,在perl和javascript中,如果使用字符串作为数字,它将自动转换为数字

Parrot的设计目的是使此类操作简单快速,并允许在编译时不知道类型信息的情况下进行优化

你可以在那里找到很多信息和链接

Parrot wiki主页的底部还显示来自提要聚合器的最新标题

除了VM之外,Parrot项目正在构建一个非常强大的工具链,以使移植现有语言或开发新语言变得更加容易

Parrot VM还将为许多功能强大的新Perl 6功能提供其他语言的幕后支持(有关Perl 6的更多信息,请参阅)


Parrot将提供不同语言的模块之间的互操作性,因此,例如,其他语言可以利用将成为庞大的Perl 6版本的CPAN(庞大的Perl 5模块存档,Perl 6将能够通过即将发布的Perl 5.12访问该存档)。

老实说,我不知道这有那么大的意义。它已经走了很长一段路,但没有看到太多的用处。主要的目标语言还没有真正到达,在行业专业人士中已经失去了巨大的思想份额。与此同时,其他解决方案,如.Net和Jython等项目向我们展示了“此时此地”可以击败任何宣传。

  • Parrot将成为java的目标,但从未实现——一个面向所有人的虚拟机 操作系统和平台
  • Parrot将为任何动态语言和真正的跨平台实现微软公共语言运行库背后的理念
  • 最重要的是,Parrot现在和将来都是免费和开源的
  • Parrot将成为使用动态语言进行开源编程的事实标准

另一个需要提及的要点是,Parrot是基于寄存器的intead,而不是基于堆栈的intead,这与JVM和CLR不同。从理论上讲,这可以使优化更容易,因为我们在基于寄存器的系统方面有更多的经验。科迪:你应该发布这篇文章,这样我就可以+1你的评论了。:-)事实上,parrot已经有了jit,至少对于x86系统是这样,现在已经有一段时间了。感谢Perl社区成员的良好响应!我没有剩余的选票,但一旦一天过去(15分钟后),我会投票支持你。:-)Perl已经拥有可分发的预编译模块很长一段时间了;根据我记忆中的阅读内容,它们从未流行(主要是因为它们只是编译代码的内存格式的转储,因此它们最终足够大,从磁盘加载它们的时间可能比perl从源代码中重新生成它们所需的时间要长),PMCs也只在某些情况下工作。我从未探究过它们,因为我记得很快就打破了它们。虽然我忘记了细节。@ysth:完全不相关的主题,但预编译的perl5字节码
。pmc
模块在一段时间内工作正常。至于大小:p5p在2011年故意用5.14[perl#81332]打破了B上游,“744aaba059使B编译器膨胀。”你需要修补B或使用
perlall--patches=Compiler
来获得小而快的
.pmc
文件。当然,加载
.pmc
比加载
.pm
更快。Parrot
.pbc
文件,如@brian