无论您是正在采取初步措施将 Perl 5 代码转换为 Perl 6 并遇到一些问题的程序员,还是仅仅对尝试将 Perl 5 程序移植到 Perl 6 时可能发生的情况感兴趣,本文都应该能解答您的疑问。
Perl 6 文档 已经包含了您在将 Perl 5 代码迁移到 Perl 6 时需要处理问题的大部分(如果不是全部)文档。但是,正如文档所述,重点在于事实上的差异。我将尝试更深入地探讨具体问题,并根据我将大量 Perl 5 代码移植到 Perl 6 的经验,提供更多实践信息。
Perl 6 怎么样?
非常好,谢谢!自 2015 年 12 月首次正式发布以来,Rakudo Perl 6 已经看到了一个数量级的改进和相当多的错误修复(总共超过 14,000 次提交)。到目前为止,已经出版了七本关于 Perl 6 的书籍。Brian D. Foy 的 Learning Perl 6 即将由 O'Reilly 出版,该书是从开创性的 Learning Perl (又名“The Llama Book”)改编而来,许多人都认识并喜爱这本书。
用户发行版 Rakudo Star 采用三个月的发布周期,并且在 Perl 6 生态系统 中有超过 1,100 个模块可用。Rakudo 编译器版本采用每月发布周期,通常包含 30 多人的贡献。Perl 6 模块被上传到 Perl 编程作者上传服务器 (PAUSE) 并使用 Comprehensive Perl Archive Network (CPAN) 在世界各地分发。
在线 Perl 6 简介 文档已被翻译成 12 种语言,以他们的母语向超过 30 亿人讲授 Perl 6。自 2014 年 2 月以来,最新版本的 Perl 6 Weekly 每周都在报道有关 Perl 6 的所有内容。
Cro,一个微服务框架,从头开始使用 Perl 6 的所有功能,开箱即用地提供 HTTP 1.1 持久连接、带有请求多路复用的 HTTP 2.0 以及带有可选证书颁发机构的 HTTPS。并且 Perl 6 IDE 现在处于(付费)测试阶段(可以将其视为具有即时交付成果的 Kickstarter)。
在 Perl 6 中使用 Perl 5 功能
Perl 5 代码可以使用 Inline::Perl5
模块与 Perl 6 无缝集成,从而使 所有 CPAN 都可用于任何 Perl 6 程序。这可以被认为是作弊,因为它将嵌入 Perl 5 解释器,因此继续依赖于 perl
(5) 运行时。但是,通过在 use
语句中添加 :from<Perl5>
,例如 use DBI:from<Perl5>;
,它确实可以轻松地运行您的 Perl 6 代码(如果您需要访问尚未移植的模块)。
在 2018 年 1 月,我提出了一个 CPAN 蝴蝶计划,旨在尽可能接近原始 API 地将 Perl 5 功能转换为 Perl 6。我将此定为目标,因为 Perl 5(作为一种编程语言)不仅仅是语法。问问任何人 Perl 的独特卖点是什么,他们很可能会告诉您是 CPAN。因此,我认为现在是时候从 Perl 世界的这种观点转变为

更现代的观点

换句话说:将 CPAN 作为 Perl 最重要的元素放在中心位置。
转换语义
要在 Perl 6 中原生运行 Perl 5 代码,您还需要大量的 Perl 5 语义。在 Perl 6 中提供(可选的)Perl 5 语义支持降低了 Perl 5 程序员在尝试使用 Perl 6 编程时感受到的概念门槛。更容易有宾至如归的感觉!
自 CPAN 蝴蝶计划发布以来,Perl 6 现在支持 100 多个内置 Perl 5 函数,并且具有相同的 API。许多函数在 Perl 6 中已经存在,但语义略有不同,例如,如果在 Perl 5 中未指定参数,则 shift
会神奇地从 @_
(或 @ARGV
)中移出;在 Perl 6 中,参数是必需的。
超过 50 个 Perl 5 CPAN 发行版也已移植到 Perl 6,同时遵守原始 Perl 5 API。这些发行版包括核心模块,例如 Scalar::Util 和 List::Util,以及非核心模块,例如 Text::CSV 和 Memoize。位于 CPAN 之河 上游的发行版旨在对生态系统产生尽可能大的影响。
总结
Rakudo Perl 6 已经成熟到可以使用 Perl 6 作为创建新的交互式项目的可行方法。能够使用可靠且经过验证的 Perl 5 语言组件有助于降低开发人员使用 Perl 6 的门槛,并且朝着 Perl 5 和 Perl 6 的总和大于其各部分之和的情况发展。
6 条评论