Parrot 虚拟机/简介
Parrot 是一个虚拟机 (VM),类似于 Java VM 和 .NET VM。但是,与这两个专为 Java 或 C# 等静态类型语言设计的虚拟机不同,Parrot 专为 Perl、Python、Ruby 或 PHP 等动态类型语言设计。
Parrot VM 本身是用 C 编程语言编写的,这意味着它在理论上可以移植到大量不同的计算机体系结构和操作系统。它是为了易于模块化和扩展而编写的。
程序员可以使用任何存在 Parrot 兼容编译器的语言进行编写。用一种语言(例如 Perl)编写的模块可以与最初用 Parrot 支持的任何其他语言编写的模块透明地交互。这种轻松的互操作性和对尖端动态编程功能的原生支持使 Parrot 成为下一代语言设计者和实现者的重要工具。
正是因为 Parrot 旨在支持如此多种不同的高级语言,Parrot 开发了一种非常通用且功能丰富的架构。Parrot 架构的大部分仍在积极开发中,因此这些部分还不能在这本书中得到充分讨论。一旦 Parrot 发布稳定版,并且更多细节确定下来,本书将能够提供更全面的覆盖范围。
Parrot 项目诞生于 Perl 6 开发项目。因此,Parrot 的历史,至少是早期的历史,与 Perl 6 的历史密切相关。事实上,只要了解 Perl 6 有多么庞大和雄心勃勃,你就会开始理解为什么 Parrot 必须拥有它所拥有的所有功能。
人们常说 Perl 编程语言的第 5 版“除了 perl 本身之外,没有任何东西可以解析 Perl”。这意味着 perl 可执行文件是唯一能够可靠解析 Perl 编程语言的程序。有两个原因。首先,Perl 语言不遵循任何正式规范;perl 解释器的行为是 Perl 操作的权威文档。其次,Perl 编程语言允许使用源代码过滤器,这些程序可以在执行之前修改自己的源代码。这意味着要可靠地解析和理解 Perl 程序,您需要能够可靠地执行源代码过滤器。唯一能够做到这两点的程序是 perl。
Perl 的下一个计划版本,Perl 6,应该是一个对该语言的重大重写。除了标准化和使所有逐渐进入语言语法的功能变得合理之外,人们还决定 Perl 6 将首先是一个正式规范,然后才是该规范的实现。
“Parrot”这个名字最初是用作愚人节的笑话。故事称,Perl 和 Python 语言(这两种语言是竞争对手,并且都正在进行重大重新设计)将合并成一种名为 Parrot 的语言。这当然是一个骗局,但这个想法却很强大。当开始创建能够运行 Perl 6 以及 Python 和其他动态语言的虚拟机时,Parrot 这个名字非常适合。
Parrot 的第一个版本,0.0.1,于 2001 年 9 月发布。开发团队已在每月第三个星期二准备了一个稳定的点版本。
Parrot 1.0.0 版本计划于 2009 年 3 月发布。Parrot 正在进行一些重大更改,本书中的信息可能会过时。一旦 1.0.0 发布,API 将被认为是“稳定的”,并且此处的文档也可能会变得更加稳定。 |
Parrot 基金会成立于 2008 年中期,旨在充当 Parrot 的倡导者。Parrot 基金会是美国的一个非盈利慈善组织,对该基金会的捐款是可以免税的。
在 Parrot 基金会成立之前,Parrot 由 Perl 基金会管理和监督。这种关系是历史性的,因为 Parrot 最初只是为了成为 Perl 6 编程语言的后端而设计的。由于 Parrot 已超出这一范围,并试图公平地处理所有高级动态编程语言,因此决定将其与 Perl 基金会分离。
Parrot 的网站是 http://www.parrot.org
本书适合具有扎实计算机编程背景的中级到高级读者。Perl 编程 是一个良好的开端,尽管任何动态语言的背景都会有所帮助。拥有 编译器构造、正则表达式 或编译器构建工具 Lex 和 Yacc 的背景也是一项优势。
对于关于 Parrot 黑客的部分,需要了解 C 编程。
本书将至少作为 Parrot 虚拟机的一个基本介绍。我们将介绍 Parrot 在其支持的最低级语言中的基本编程:PIR 和 PASM。我们还将讨论 Parrot 平台最大的优势之一,Parrot 编译器工具 (PCT),它使编译器可以轻松地为 Perl 和 Python 等更高级语言编写。
后面的章节将深入研究 Parrot 内部,并讨论 Parrot 的工作原理以及如何为 Parrot 开发项目贡献代码。本书末尾的大量参考资料将尝试跟踪开发人员最需要的那些信息。
有关 Parrot 信息和文档的权威来源是 Parrot 项目网站,http://www.parrot.org。Parrot 程序员、黑客和爱好者还在 Parrot IRC 聊天室 中聊天。
Parrot 的原始网站是 http://www.parrotcode.org,但它已迁移到 http://www.parrot.org |
Parrot 开发流程庞大而多样。根据技能水平,人们有很多机会参与 Parrot 开发。以下是一些示例
- 如果您精通 C 编程
- 如果您了解 C 编程,始终需要帮助来处理 Parrot。除了正常的开发任务外,还需要解决错误报告、修复编译错误、将新平台移植到 Parrot 以及执行优化。Parrot 需要移植到许多不同的系统,并且需要在所有系统上进行适当的测试。
- 如果您精通 Perl 编程
- Parrot 的许多构建工具是用 Perl 5 编写的。但是,还存在一个庞大的开发工作来支持 Perl 6 项目。一种类似于 Perl 6 但缺少许多功能的中间语言,称为 Not Quite Perl (NQP),用于实现更高级语言的编译器。如果您精通 Perl 并且愿意学习 Perl 6 和 NQP,那么有很多编译器实现工作需要完成。
- 如果您精通系统管理
- Parrot 需要定期构建和测试。始终需要愿意定期构建和测试 Parrot 的人员。如果您愿意设置自动化构建机器人来定期构建和测试,那就更好了。
- 如果您会写作
- 这本书需要您的帮助,任何人都可以编辑它。此外,还有许多其他与 Parrot 相关的书籍写作项目正在寻找活跃的作者和编辑。关于 Parrot 的内容越多,新用户就越能了解它。
贡献者说明:如果您希望您对本维基教科书的贡献也能用于其他与 Parrot 相关的书籍(几乎所有这些书籍都是根据 Artistic 2.0 许可证授权的,而不是像维基教科书使用的 GFDL 许可证),请在 Parrot Virtual Machine/Licensing 上签署您的姓名,表明您希望您的贡献获得双重许可,以实现最大兼容性。 |
如果您不属于以上任何类别,还有其他机会可以提供帮助。这可能是您学习新技能的好机会,比如编程 Perl 6、PIR 或 NQP。如果您对写作或编辑感兴趣,也可以帮助编写本维基教科书!
尽管没有集中的管理层级,但人们在 Parrot 开发中承担了多种不同的角色。志愿者倾向于履行他们喜欢且有技能的角色。
- 架构师
- Parrot 架构师,目前是 w:Allison Randal,负责制定 Parrot 的总体设计规范。架构师对重要决策有最终决定权,并负责确保设计文档的最新性。通过制定系统的总体要求,其他志愿者能够为他们最感兴趣的领域做出贡献。
- 南瓜王
- 南瓜王负责监督 Parrot 源代码仓库,也是主要开发人员。南瓜王定义所有贡献者必须遵守的编码规范,并帮助协调其他贡献者。
- 发布经理
- Parrot 按照大约每月一次的发布计划发布。发布经理负责监督此过程,并确保发布质量高。发布经理将控制何时添加新功能,以及何时冻结代码以进行调试。预发布调试会话对于 Parrot 开发来说是非常高效和重要的阶段,并确保在每次发布之间修复了许多错误。
- 提交者
- 提交者是指具有 Parrot SVN 代码库写入权限的人员。提交者通常已提交了多个补丁并参与了与 Parrot 相关的讨论。
- 元提交者
- 元提交者是指具有 Parrot SVN 代码库写入权限,并且能够提升新提交者的人员。架构师和南瓜王自动成为元提交者,但还有其他几个元提交者。
在上述各组中,还有一些其他的指定。这是因为许多提交者往往将他们的工作集中在 Parrot 开发工作中相对较小的一部分。
- 核心开发人员
- 在 Parrot 内部工作的人员,通常是一个或两个子系统。核心开发人员需要精通 C 编程,并且还需要使用许多用 Perl 编写的开发工具。
- 编译器开发人员
- 这些开发人员与核心开发人员一样,在 Parrot 内部工作,通常是编写大量的 C 代码。与之相反,编译器开发人员将他们的工作重点放在各种编译器前端,例如 IMCC、PIRC、PGE 或 TGE。
- 高级语言开发人员
- 高级语言开发人员是指在 Parrot 上实现高级语言的人员。尽管他们对整个代码库具有提交权限,但许多高级语言开发人员只专注于一种语言实现。高级语言开发人员需要精通 PCT 和许多用于 HLL 的基于 Perl 6 的开发工具。
- 构建管理者
- 构建管理者帮助创建和维护其他开发人员依赖的工具。
- 测试人员
- 测试人员创建和维护一套数百甚至数千个测试,以验证 Parrot、其子系统、其编译器以及在它上面运行的高级语言的操作。
- 平台移植者
- 平台移植者确保 Parrot 可以在多个平台上构建。移植者必须在不同的平台上构建和测试 Parrot,并且还要创建和分发不同平台的预编译安装包。
当然,这绝不是一个详尽无遗的可能角色列表。如果您有编程技能,但不知道自己是否适合以上任何指定,您的帮助仍然是需要的。
- http://www.parrotcode.org/docs/intro.html
- http://www.parrotcode.org/docs/roadmap.html
- http://www.parrotcode.org/docs/parrothist.html