发布Perl 7

2020-06-25 00:39:23

今天上午,在Perl in the Cloud大会上,Sawyer X宣布了Perl向前迈进的新计划。Perl7的工作已经在进行中,但它不会对代码或语法进行重大更改。它是带有现代默认设置的Perl5,它为以后进行更大的更改做好了准备。我的新书“为Perl7做准备”对此进行了更详细的介绍。

Perl7.0将是V5.32,但具有不同的、更合理的、更现代的默认设置。您不必启用大多数已在执行的操作,因为它们已为您启用。主要版本的跳转设定了我们一直在做的事情和我们未来可以做的事情之间的界限。

请记住,Perl是一种“按我的意思做”的语言,其中的缺省值可能是您想要做的。在Perl4和Perl5的早期,这很容易。但是,几十年过去了,现在世界变得更加复杂。我们一直在添加编译指示,但是由于Perl致力于向后兼容,我们不能更改默认设置。现在我们回到C语言的旧时代,在开始做一些事情之前,我们必须包含大量的样板文件:

这在v5.12和更高版本中稍好一些,因为我们通过设置最低版本来免费执行严格要求:

Perl7提供了一个机会,即使不指定版本,也可以将其中一些设置为缺省设置。Perl5仍然具有Perl5的极端向后兼容性行为,但是Perl7以最少的历史包袱获得了现代实践。我个人希望签名能够通过,但是要使Unicode成为默认代码,还有很多工作要做,所以您可能需要保留其中的一些:

您可能会错过一些不应该使用的更过时的特性,例如间接对象表示法。拉里·沃尔说他必须为C++程序员做点什么:

My$cgi=new CGI;#间接对象,但不是在Perl 7My$cgi=cgi->;new;#direct对象中。

但是,这个特性并没有在Perl7中真正消失,它已经是V5.32中的一个设置,但是现在有了不同的默认设置。

没有人会把Perl5从您身边夺走;它会进入长期维护模式--比对两个最新用户版本的两年滚动支持要长得多。这可能是十年后的事(或者Perl5已经出现的时间的一半)。

这项工作现在正在进行,但是您在大约六个月内不需要担心,那时第一个候选版本应该会出现。目标是在明年内发布Perl7.0的用户版本,同时还有一些候选版本。

这也是一个很容易遵守的承诺,因为Perl7主要是具有不同缺省值的5.32版本。没有大的重写或新功能,尽管目前正在试验的一些功能可能会稳定下来(请选择签名!)。

Perl综合档案网(CPAN)有近20万个模块。人们正在使用的维护的模块应该仍然可以工作,对于其余的模块,将会有一个兼容模式。请记住,Perl7主要是5.32版,因此您不需要做太多更改。

您可能不知道Perl5Porters针对几乎所有的CPAN测试新版本。检查更改可能对Perl社区产生的影响的工具由来已久。作为一名模块作者,我经常收到各种人的消息,主要是Andreas Koenig或Slaven Rezić,关于我的模块中可能与新Perl决裂的奇怪事情。通常,这是我无论如何都需要更新的东西。追踪现有代码的问题是一个已解决的问题。修复代码不应该那么繁重,因为它仍然是Perl5,但是有了更好的实践。

Perl7是否会有单独的CPAN?没有人说不可能,但是在跳到Perl7的过程中,开发人员不想重做已经在工作的东西。这一变化应该是可控的,需要尽可能少的次要任务。

此外,Perl作者Upload Server的Pause在过去几年受到了相当多的喜爱。这使得他们更容易适应未来的需求。从事这项工作的人经验丰富,才华横溢,他们使代码库变得更容易处理。

主要版本可以与用户签订不同的合同。主要版本跳转使用新的默认行为更改了该契约,即使这与过去的行为相冲突。如果您愿意,有一种方法可以将所有这些设置重置为旧的Perl5默认值。不过,Perl7代码(大部分)在语法和行为上仍将是V5.32代码。

Perl5的社会契约是极端的向后兼容性,并且在这方面取得了惊人的成功。问题是,极端的向后兼容性适用于那些不更新代码的人,但对其他两个部分没有帮助。新功能的人群不得不在每个程序中处理更长的样板部分,新手们想知道为什么他们必须包括这么多内容才能创建一个程序,这样StackOverflow上的人就不会因为缺少的语用而使他们望而却步。

这个答案分为两个部分。首先,“Perl6”已经被现在的Raku所采用。很久以前,我们认为非常雄心勃勃的重写工作将取代V5.8。简而言之,事实并非如此,这种语言继续过着自己的生活。

所以,7是下一个可用的数字。就这样。这只是排队的下一个基数。这样的跳跃并不是闻所未闻的:PHP直接从5到7,难道不是时候从那个社区偷点东西了吗?想想历史上其他一些奇怪的跳跃:

没什么。默认情况下,某些功能将被禁用,但同样,这本质上是Perl 5.32,其旋钮和刻度盘位于不同的位置。即使在Perl5中,也有一些东西您应该学会在没有的情况下生活。以下是第一轮改革的可能候选者:

没什么。Perl7主要是Perlv5.32,但默认情况下启用了所有特性。您不需要做任何事情就可以获得大多数新特性,例如后缀取消引用、新的ISA运算符或其他几个特性。这就是主要版本提供的新社会契约的好处。这是一个硬边界,默认情况下,新功能可以在一侧存在,而不会干扰另一侧。

如果您需要较旧的Perl来运行您的代码,那么您就可以了。那些旧版本不会消失。就像Perl 5.6仍然可用一样,如果您希望运行该版本的话。

如果您的代码在限制和警告下运行没有问题,并且您使用的是现代Perl样式,那么您可能基本上是不错的。如果您有一些赤字文件句柄,请开始转换它们。间接对象表示法也是如此。

有了杂乱无章的代码,您就不会不走运了。将有兼容模式帮助您从Perl5过渡到7(但不是Perl5到8)。杂注会将旋钮和拨盘设置回旧设置(但这更像是一个版本的设置):

对于模块,有一些问题需要解决,但也会有兼容机制。

好消息是,这些东西已经在生产环境中由主要的Perl利益相关者进行了测试。这不是纸面上的计划:它已经发生了,粗糙的边缘正在被打磨。

而且,v5.32已经有了一个这样的旋钮和刻度盘。您可以关闭间接对象表示法:

我在准备Perl7时收集了所有这些信息,Perl7是我通过Perl School和Leanpub提供的最新产品。

Perl7是V5.32,具有不同的设置。如果代码不是乱七八糟的,那么它应该可以工作。预计用户将在一年内发布。