perl数组硬引用_Perl 继续前行,Perl 7 将是下一代(硬核老王点评版)

54bd2dbbaee8edb0fb3e5007e138996a.png

它是默认带有现代行为的 Perl 5,将为以后更大的变化奠定基础。

  • 来源:https://linux.cn/article-12349-1.html
  • 作者:Brian D Foy
  • 译者:Xingyu.Wang

(本文字数:5043,阅读时长大约:8 分钟)

近日 召开的 Perl 大会是在云端举办的 ,在会上 Sawyer X 宣布 Perl 有了新的前进计划。Perl 7 的开发工作已经在进行中,但不会有代码或语法上的巨大变化。它是默认带有现代行为的 Perl 5,将为以后更大的变化奠定基础。

硬核老王:在经历了 Perl 6 失败的巨大痛苦之后,Perl 社区终于从阴霾的心情中走出了。但是失去的黄金 20 年却是挽回不了了,否则别说 PHP,都不会有 Python 什么事。我认为,Perl 7 是一条自我救赎之路,应该,或许,会有新的 Perl 7、Perl 8 吧……

Perl 7 基本上是 Perl 5.32

Perl 7.0 将会是 Perl 5 系列的 5.32,但会有不同的、更合理的、更现代的默认行为。你不需要启用大多数你已经设置过的默认行为,因为这些已经为你启用了。这个大版本跳跃为我们一直以来的工作方式和未来可以做的事情之间设定了一个界限。

硬核老王:可以理解为,Perl 是一个 Perl 5 兄弟们亲手打下的家族企业,而 Perl 6 是外面请来的职业经理人,结果经理人要对家族企业采用现代化管理,差点鸡飞蛋打。现在好了,Perl 6 分家出去单过了,亲儿子 Perl 7 准备重振家业。

请记住,Perl 是一门“按我的意思做”的语言,其默认行为可能就是你想要的。在 Perl 4 和 Perl 5 的早期,这很容易。但是,几十年过去了,现在的世界更加复杂了。我们不断地往其中添加编译指令,但由于 Perl 对向后兼容的承诺,我们不能改变其默认行为。现在,我们又回到了 C 语言的旧时代,在开始做一些事情之前,我们必须包含大量的例行模板:

use utf8;use strict;use warnings;use open qw(:std :utf8);no feature qw(indirect);use feature qw(signatures);no warnings qw(experimental::signatures);

这一点在 v5.12 及以后的版本中稍有好转,因为我们可以通过使用设置最低版本来免去设置 strict 指令:

use v5.32;use utf8;use warnings;use open qw(:std :utf8);no feature qw(indirect);use feature qw(signatures);no warnings qw(experimental::signatures);

硬核老王:不可否认,Perl 二十年前如日中天,那个时候,不说终端运行的脚本,就是互联网上主要的互动程序(CGI),也几乎全是用 Perl 写的。但是在风口时代它的主要精力都在折腾 Perl 6,而 Perl 5 系列不但很多地方显得老旧,历史包袱也过重。向前不能保持原有的精巧习惯,向后不能跟上现代的软工理念。

Perl 7 是一个新的机会,即使不指定版本,也可以把其中的一些行为变成默认行为。Perl 5 仍然有它的极度向后兼容的行为,但 Perl 7 将以最小的历史包袱获得现代实践的新生。我个人希望 签名(signatures)功能能够入选到新的版本,但要让 Unicode 成为默认行为还有很多工作要做,所以你可能需要保留其中的一些编译指令:

use utf8;use open qw(:std :utf8);

你可能会丢掉一些你肯定不应该使用的垃圾功能,比如间接对象表示方式。Larry Wall 说他必须为 C++ 程序员做点什么。

my $cgi = new CGI;  # 间接对象,但在 Perl 7 不这样用了my $cgi = CGI->new; # 直接对象

但是,这个功能在 Perl 7 中并没有真正消失。它在 v5.32 中已经可以 通过设置关闭 了,但现在有了不同的默认行为。

Perl 5 怎么了?

没有人要把 Perl 5 从你身边夺走,它将进入长期维护模式 —— 比最新用户版本的两年滚动支持时间的两倍都要长得多。这可能要从现在支持到十年后了(或者说 Perl 5 已经人过中年了)。

硬核老王:这样挺好,旧时代的继续留在旧时代,新生代的轻装前行。

什么时候开始?

这项工作现在就在进行,但你不需要担心,大约六个月后,才会出现第一个候选版本。我们的目标是在明年发布 Perl 7.0 的用户版本,并在这期间发布一些候选版本。

这也是一个容易实现的承诺,因为 Perl 7 基本上就是 v5.32,默认行为不同而已。没有大的重写,也没新的功能,尽管目前一些实验性的功能可能会稳定下来(请把“签名”功能选入!)。

CPAN 怎么办?

CPAN( 综合 Perl 档案网(Comprehensive Perl Archive Network))有近 20 万个模块。人们正在使用的处于维护状态的模块应该还能用,对于其它的模块会有一个兼容模式。记住 Perl 7 主要是 v5.32,所以你应该不需要修改太多。

你可能不知道 Perl5 Porters 几乎会针对所有的 CPAN 模块测试其新版本。这个用于检查更改可能对 Perl 社区产生影响的工具已有很长的历史了。作为一个模块的作者,我经常会收到来自不同人的消息,主要是 Andreas Koenig 或 Slaven Rezić,他们说我的模块中的一些奇怪的东西可能会在新的 Perl 版本中出问题。通常,我总是需要更新一些东西来解决这些问题。追踪现有代码中的问题已经不是问题了。修复代码应该不会那么繁琐,因为它仍然是 Perl 5,但有更好的实践。

硬核老王:知道当年 Perl 为什么强悍吗?有一个主要的原因是,Perl 有个无所不包的 CPAN 仓库。

会不会有一个单独的 Perl 7 的 CPAN?没有人说不能有,但是在跳转到 Perl 7 的过程中,开发人员不希望重做已经可以工作的东西。这个变化应该是可以控制的,尽量减少副作用。

另外,PAUSE( Perl 作者上载服务器(Perl Authors Upload Server))在过去的几年里得到了不少人的喜爱。这使他们可以更容易适应未来的需要。从事这方面工作的人都是经验丰富、才华横溢的人,他们让代码库变得更加容易管理。

为什么要跳到大版本?

一个主要版本可以与用户订立不同的契约。跳转到一个主要版本可以用新的默认行为来改变这个契约,即使这与过去有冲突。如果你愿意的话,总会有办法将所有这些设置都重置为旧的 Perl 5 默认行为。不过在语法和行为上,Perl 7 的代码(大部分)仍然是 v5.32 的代码。

Sawyer 谈到了 Perl 用户的三个主要细分市场:

  • 绝不会改变他们的代码的人
  • 使用新功能的人
  • 从零开始的人

Perl 5 的社会契约是 极度后向兼容(extreme backward compatibility),并且在这方面取得了惊人的成功。问题是,极度后向兼容对那些不会更新代码的人有效,但对另外两部分人没有帮助。要使用新功能的人不得不在每个程序中加入挺长的例行模板部分,而从零开始的人们则想知道为什么他们创建一个程序就必须包含这么多,才能不让 StackOverflow 上的人因为少了那些编译指令而呵斥他们。

硬核老王:迎合新血才是最重要的,让旧代码和旧人们自己过吧。

为什么是 7,而不是 6?

这个答案分为两部分。 首先,“Perl 6” 已经被现在称为 Raku 的产品所采用。很久以前,我们认为这件非常雄心勃勃的重写工作将取代 v5.8。但最后,这件事并没有发生,Perl 语言依旧继续过着自己的生活。

因此,下一个可用数字为 7。如此而已。这只是序列中的下一个基数。版本跳跃这事情并不稀奇:PHP 直接从 5 升到了 7 —— 难道是我们从 PHP 社区偷学到的跳跃技能?看看一下历史上的其他奇怪的版本变化:

  • 从 Solaris 2.6 到 Solaris 7
  • 从 Java 1.4 至 Java 5
  • 从以 Postgres 9.x 为主要版本变成了以 Postgres 10 为主要版本
  • Windows 3.1 至 Windows 95(98、ME、2000、XP、Vista、7、8、10)
  • TeX(每个新版本都更趋近于圆周率 π )

至少我们没跳到 Perl 34!

硬核老王:言外之意,你们跳得,我也跳得~而且,你们不觉得版本 6 这个数字有点不吉利么,而版本 7 这个数字就好多了。

有什么消失了么?

消失的东西不多。有些东西在默认情况下会被禁用,但同样,这本质上是调整旋钮和拨盘指向不同地方的 Perl 5.32。即使在 Perl 5 的土地上,有些东西你也应该学会不需要。以下这些都是第一轮变化的可能目标:

  • 间接对象符号
  • 裸词文件柄(标准文件柄除外)
  • 伪多维数组和哈希值(老的 Perl 4 花招)
  • Perl 4 风格的原型定义(使用 :prototype() 代替)

硬核老王:是该学会放弃了,又不是区块链,什么旧的都不能丢下。

增加了什么?

增加的也不多。Perl 7 主要是 Perl v5.32,但默认启用了所有的功能。你不需要做任何事情就可以获得大多数新功能,比如 postfix 解引用 ,新的 isa 操作符 ,或者其他一些功能。这就是一个主要版本可以提供的新社会契约的好处。这是一个硬边界,新功能可以在一边默认存在,而不干扰另一边。

硬核老王:多增加点新的编程语言技能吧!哪怕是语法糖。

那我现在应该做什么?

如果你需要一个旧版的 Perl 来运行你的代码,你继续好了。那些旧版本是不会消失的。就像 Perl 5.6 到现在仍然可以使用,如果那是你希望运行的版本的话。

如果你的代码在那些约束和警告下运行没有问题,而且你使用的是现代 Perl 风格,可能你大部分代码都不用动。如果你有一些裸词的文件柄,就开始转换这些,间接对象符号也一样。

如果你的代码比较凌乱,你也不是没有机会。在从 Perl 5 到 7 的过渡过程中,会有兼容模式来帮助你(但不是 Perl 5 到 8)。一个编译指令可以把那些旋钮和拨盘设置回旧的设置(但这最多也就是一个版本的事情)。

use compat::perl5;  # 行为类似 Perl 5 的默认行为

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

硬核老王:代码实在写的烂(辩解:我这不是烂,是 Perl 的古怪传统),那没办法,只能给你一次机会。

好消息是,这些东西已经被主要的 Perl 利益相关者在生产环境中进行了测试。这不是纸上谈兵:我们已经在做了,一些粗陋的地方正在调整打磨。

而且,v5.32 中已经有了一些这些旋钮和拨盘,比如,你可以这样关闭间接对象表示:

no feature qw(indirect);

预期会有更多的旋钮或拨盘,或许像这样:

no multidimensional;no bareword::filehandle;

我在《 为 Perl 7 做准备 》一书中收集了所有这些信息,这是我通过 Perl School 和 LeanPub 提供的最新产品。

硬核老王:本文作者 brian d foy 也是《 精通 Perl(Mastering Perl)》 的作者,我是这本书是中文译者之一。

一句话总结

Perl 7 是 v5.32,设置不同而已。你的代码如果不是乱七八糟的,应该可以用。预计一年内会有用户发布。

硬核老王:作为一个老 Perl 程序员,这个消息让我又动心了,认真考虑是不是再投回 Perl 的怀抱,哦不,是 Perl 7 的怀抱。

点击“了解更多”可访问文内链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spark将rdd转为string_八、Spark之详解Tranformation算子

RDD中的所有转换(Transformation)算子都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给Driver的动作时,这些转换才会真正运行…

2021年呼和浩特高考段考成绩查询,2019届呼和浩特市高三段考成绩排名分析

原标题:2019届呼和浩特市高三段考成绩排名分析不忘初心 天道酬勤╳✎校对:刘姝坤✎文稿:王涛老师✎声明:如有转载请联系并注明出处好乐(巨人)教育2019高三普文理集训段考班火热招生中全呼市唯一一家吃住学一体封闭式管理的学校唯一…

html设置table表格的弧度,用CSS3和table标签实现一个圆形轨迹的动画的示例代码

html:其实就是根据table标签把几个实心圆div进行等边六角形的排布,并放入一个div容器中,然后利用CSS3的循环旋转的动画效果对最外层的div容器进行自转实现,当然不要忘了把div容器的外边框设置圆形弧度的。BMI色盲色弱心率开始测试…

ios时间相差多少天_上海自驾拉萨,走川进青出,应如何规划线路?需要多少天时间?...

线路总览上海自驾西藏拉萨,川进青出,全程约8000公里,需用时18~25天,行程主要分为4段:1、进藏之前:上海—成都,2000公里,3~5天;2、川藏线进:成都—拉萨&#x…

儒林外史每回概括简短10字_早安心语正能量经典短句 一句话的简短励志语录

1、人生就两件事, 一件是拿事儿把时间填满,另一件是拿感觉把心填满 。早安!早安心语正能量经典短句 一句话的简短励志语录点击添加图片描述(最多60个字)2、凭着一股子信念往前冲,到哪儿都是优秀的人。生活它从来不会允诺我们一份轻…

半个小时用计算机怎么算,CPA机考计算器操作指南,掌握这些快捷键,考试“延长”半小时!...

原标题:CPA机考计算器操作指南,掌握这些快捷键,考试“延长”半小时!注册会计师考试就是一场在有限的时间内得分最多的比拼游戏!不仅要求考生学习各种专业知识,同时还需要掌握一定的策略。例如注会考试采用机…

c均值聚类matlab程序_机器学习笔记-9-聚类

1 K-means算法K-means是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。它是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为:选择K个随机的点,称为聚类中心对于数据集中的每一个数据…

html和css哪个优先,CSS3 | 样式和优先级

css3一般介绍:CSS注释:/*CSS*/CSS长度单位:1.px(像素)2.em(倍数,一般用于文字)一、HTML嵌套CSS3样式:1.外部(推荐)例如HTML文件为index.html将样式放入另一文件中,index.css以上两个文件放入同一文件夹下2.…

锁定计算机 背景图片,win7系统电脑更换锁屏壁纸的方法

当win7系统电脑在一段时间不动的话就进入锁屏状态,然而很多用户觉得默认的锁屏壁纸不好看,就想要更换自己喜欢的锁屏壁纸,那么win7怎么更换锁屏壁纸呢?下面给大家讲解一下win7系统电脑更换锁屏壁纸的方法。1、同时按下窗口键winR组…

计算机二级循环队列知识点,考点!计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列...

小编所收集到的相关计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列的资料 大家要认真阅读哦!1、栈(Stack)又称堆栈。(1)栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶,…

lua 字符串包含_Programming in Lualua学习第11期 Lua模块与包

微信公众号:GameToolDev关注可了解更多的游戏工具开发教程。问题或建议,请公众号留言;从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块。从使用者的角度来看,一个模块就是一个程序库,可以通过r…

.net 从txt中读取行数据_【VBA项目】从指定文件中读取数据并绘制图表

VBA 是一种很久远的编程语言,但并不过时。在满足以下两个条件时,借助 VBA 可以极大的提升生产率,降低出错率:你的电脑上不允许自主安装软件; 你需要执行的工作中大部分的步骤都是固定且重复的。项目背景近期接到一个工…

axure实现复选框全选_jq简单的全选、反选和全不选效果

jquery是很实用和方便的前端效果库,可以让我减少很多的操作和节省很多的时间。今天,我们来说一下jq的全选、全不选和反选效果,本篇讲的是最简单简洁的jq全选、全不选和反选的例子。如果还有什么其他的功能要求可自己根据所学到的基础来扩展一…

计算机设备管理器驱动,设备管理器安装驱动程序的详细教程

系统出现问题,很多人都会选择重装系统。但系统重装后,我们所做的第一件事,就是安装驱动。有的驱动程序有安装包,直接安装就行了。但是有的驱动是只有驱动程序文件,而没有执行程序,这时候就需要通过设备管理…

电路串联和并联图解_一个关于交流电路谐振现象的仿真实验

对于一个具有电阻、电感、电容的交流电路中,交流电源两端的电压一般不和它输出的电流同相位。如果调节电路的参数或者电源频率使它们同相位,这时电路就发生了谐振现象。按照发生谐振现象的电路不同,可以分为串联谐振和并联谐振。1、串联谐振在…

sync不生效 vue_Vue实战项目-记账器-重要知识点汇总

历时3周,记账器项目终于可以运行了,这次项目是基于Vue开发,用到了typeScript和Scss,下面基于项目做一个阶段性的总结,回顾一下项目中用到的知识点。一.组件一开始用的是JS对象的写法:构造选项:{ data(){ret…

fifo页面置换算法设计思路_千万级并发!如何设计一个多级缓存系统?

什么是一个多级缓存系统?它有什么用?我们又如何设计一个多级缓存系统?图片来自 Pexels所谓多级缓存系统,就是指在一个系统的不同的架构层级进行数据缓存,以提升访问效率。我们都知道,一个缓存系统,它面临着许多问题&#xff0c…

apple quicktime怎么在ppt中用_PPT情感专题大赏No. 007:一份这就是街舞第三季主题PPT(上集)...

Hello,大家好,这里是千师傅小作坊第35期,我是你们的老朋友千千。熟悉千师傅小作坊的人都知道,千师傅特别喜欢看综艺,尤其是音乐、表演、舞蹈类。作为一个十八线PPT设计师,如果我看到好看的节目视觉设计&…

idea内存溢出解决_各种OOM代码样例及解决方法

针对目前大家对OOM的类型不太熟悉,那么来总结一下各种OOM出现的情况以及解决方法。把各种OOM的情况列出来,然后逐一进行代码编写复现和提供解决方法。1. 堆溢出-java.lang.OutOfMemoryError: Java heap space。2. 栈溢出-java.lang.OutOfMemorryError。3…

win7安装硬盘后无法启动计算机,硬盘装Win7系统电脑后开机提示DISK BOOT FAILURE怎么办【图文】...

很多人都喜欢安装win7系统,而硬盘安装系统的方式也是深受用户们的喜欢,但是最近有用户反映说硬盘安装win7系统之后,在重启计算机的时候屏幕提示DISK BOOT FAILURE,INSERT SYSTEM DISK AND PRESS ENTER,导致无法正常进入系统&#…