致Perl社区的一封公开信

在过去几个月里,我一直在思考如何再次将Pumpkin Perl 5(或perl,指Perl 5 Porters维护的Perl版本)和Rakudo Perl 6(或perl6,指基于NQP和MoarVM的Perl 6实现)拉近关系。是的,我没有放弃这个想法,尽管我第一次尝试(组织2012年的Perl 重聚峰会)并没有按照我预期的方向发展。但这也产生了一些积极的影响,因为它将Perl社区中通常不会进行讨论的人聚集在一起,并为Perl 6带来了一些美好的进步。

我仍然希望将Perl 5和Perl 6结合起来,因为它们都拥有相同的Perl思维模式,这是一种“足够DWIM(按我意行事)而不过分WAT(现在在做什么?)”的混合。

我知道Perl 6的发展过程很复杂。你可以认为Perl 6是第四次实现尝试。这也是第一个真正工作的Perl 6实现,它可以无缝地与Perl 5Python或任何外部C库接口,在更多和更多的微基准测试中击败Perl 5,并且正在生产中使用,尤其是在微服务非ASCII语言解析领域。

有些人认为Perl 6是Perl 5的姊妹语言。我个人认为Perl 6更像是具有许多父母最佳基因的基因工程女儿语言。一个有着困难童年的女儿,曾经让很多人疏远,但现在她已经从青春期过渡到成年早期。但我又跑题了。

蝴蝶Perl 5项目

从Perl 5到Perl 6没有明确的升级路径,这意味着将Perl 5和Perl 6结合起来,超过它们各自的部分是不可能的。Perl 5 Porters仍在添加受Perl 6启发的功能,这进一步混淆了局势。

一个激进的想法是,Perl 5 Porters可以回到他们的原始目标:移植 Perl 5。但这次不是移植到不同的操作系统,而是将Perl 5移植到不同的虚拟机。暂停新功能的开发,将开发限制在当前运行时的维护上。这将保护Perl 5最有价值的特性,即其稳定性和向后兼容性。但我又跑题了。

将Perl 5移植到NQP(Not Quite Perl,Rakudo Perl 6的一种实现语言)将提供这样的迁移路径。基本上,这将重新启动“use v5”项目,该项目将Perl 5作为一个子语言实现为Perl 6的方言。这样的努力将提供一个从30年的旧perl解释器到现代虚拟机的清晰迁移路径,允许在MoarVM、JVM和JavaScript后端上执行Perl 5源代码。从而保证Perl 5作为编程语言在未来很长一段时间的生命,并利用现代虚拟机提供的所有多进程功能。

短期内,它的速度可能仍然比Perl 5慢,但从长远来看,它将运行得更快。这是因为即时编译(JIT)的热代码,它可以在运行时将所有源代码优化为机器代码,而不是手动将热代码优化为XS。尽管我全心全意地支持Butterfly Perl 5项目,但我已经得出结论,现在这不再是我个人想要解决的问题。

CPAN蝴蝶计划

那么Perl 5到底由什么组成呢?它是一个用C语言和宏语言编写的运行时环境。但它也是一个核心的模块集,具有定义良好的API和文档。对许多人来说,CPAN上的模块是Perl 5不可或缺的一部分。许多这些模块需要移植到Butterfly Perl 5项目。但移植它们本身对Perl 6就非常有用,因为它将使得将用户Perl 5程序移植到Perl 6变得更加容易。因此,我正在努力将Perl 5模块大规模迁移到Perl 6,包括核心模块和CPAN上的其他模块。

我们正在开发一个“如何将Perl 5模块移植到Perl 6”指南,涵盖命名约定、导出、将Perl 5面向对象转换为Perl 6面向对象、作用域陷阱和线程等内容。还有关于Perl 6各种内置特性的笔记,这些特性在移植语义而不是代码时可能很有用。

接下来,我们将创建一个网站,注册负责将Perl 5模块移植到Perl 6(例如从最想列表)的贡献者。贡献者将链接到GitHub仓库,在那里编写代码、处理拉取请求并分配提交权限。移植的模块将被上传到CPAN作为新的Perl 6分发。

我们将创建一个排行榜,根据贡献者的进度进行排名。排行榜上的位置可以定义为

  • 原始Perl 5模块的代码行数、文档和测试的大小
  • 迁移的完成百分比,由贡献者表示并由同行评审团判断
  • 如果文档和/或测试得到即时改进,则获得额外分数
  • 如果涉及XS代码且没有纯Perl实现,则获得额外分数

赞助商将迁移的代码与对Perl 6核心开发基金的捐赠相匹配,这样贡献者不仅可以直接支持Perl 6,还可以间接支持Perl 6核心的进一步发展。每转换一行Perl 5代码/文档/测试约一美分,在同行评审团决定转换的模块功能足够强大,可以“发布”为1.0版本时捐赠。

排行榜将由一个网站支持,该网站跟踪所有这些活动,类似于alerts.perl6.org,具有API和社交媒体界面。

这应该使2018年成为人们真正开始将代码从Perl 5迁移到Perl 6的一年。无论是由于他们可以这样做,他们想要尝试,还是只是想看看Perl 6将如何为他们工作。

收尾

我真诚地希望足够多的人会支持CPAN蝴蝶计划,也许是一个Butterfly Perl 5项目。这样我们就可以一起朝一个方向前进,而不是两个。如果您想参与,请加入我们irc.freenode.net上的#perl6-dev频道。如果您没有安装IRC应用程序,您可以通过web界面在浏览器中与我们交谈。

标签

Elizabeth Mattijsen

在🦋、🐪和其他许多(大多数现已停用)编程语言中担任开发者,是Rakudo Perl 6的贡献者,并撰写了Perl 6 周刊

浏览他们的文章

反馈

这篇文章有什么问题吗?请在GitHub上创建一个issue或pull request来帮助我们。