Perl 5.36.0 编程语言可用

经过一年的开发,Perl 编程语言的新稳定分支 - 5.36 - 已经发布。 在准备新版本的过程中,更改了约250万行代码,更改影响了2000个文件,82名开发人员参与了开发。

分支 5.36 是按照九年前批准的固定开发时间表发布的,这意味着每年发布一次新的稳定分支,每三个月发布一次修正版本。 大约一个月后,计划发布 Perl 5.36.1 的第一个修正版本,该版本将纠正 Perl 5.36.0 实施过程中发现的最重大错误。 随着 Perl 5.36 的发布,对 5.32 分支的支持也被终止,只有在发现关键安全问题的情况下才会发布未来的更新。 开发实验分支 5.37 的过程也已经开始,在此基础上,将在 2023 年 5.38 月或 7 月形成 Perl XNUMX 的稳定版本,除非决定切换到编号 XNUMX.x。

关键变化:

  • 对函数签名的支持已经稳定,现在在指定“use v5.36”编译指示时可用,允许您显式定义函数中使用的变量列表,并自动执行从数组检查和赋值的操作传入参数。 例如,以前使用的代码: sub foo { die "Too much argument for subroutine" except @_ >= 2; die“子例程的参数太少”除非@_ <= 2; 我的($左,$右)= @_; 返回$左+$右; }

    使用签名时,可以替换为:

    子 foo ($left, $right) { return $left + $right; }

    如果您使用两个以上的参数调用 foo,解释器将抛出错误。 该列表还支持特殊变量“$”,它允许您忽略某些参数,例如,“sub foo ($left, $, $right)”将允许您仅将第一个和第三个参数复制到变量中,而必须将恰好三个传递给函数参数。

    签名语法还允许您指定可选参数并在缺少参数时指定默认值。 例如,通过指定“sub foo ($left, $right = 0)”,第二个参数变为可选,如果不存在,则传递值 0。在赋值操作中,您可以指定任意表达式,包括使用其他变量来自列表或全局变量。 指定散列或数组而不是变量(例如,“sub foo ($left, @right)”)将允许传递一个或多个参数。

  • 在使用签名声明的函数中,对来自“@_”数组的附加参数分配的支持被声明为实验性的,并将导致警告(仅当在使用新语法声明的函数中使用 @_ 时才会发出警告)。 例如,该功能将显示警告:use v5.36; sub f ($x, $y = 123) { 说“第一个参数是 $_[0]”; }
  • 在指定“use v5.36”编译指示时稳定且可用,中缀运算符“isa”用于检查对象是否是指定类的实例或派生类。 例如: if( $obj isa Package::Name ) { ... }
  • 当指定“use v5.36”编译指示时,将启用警告处理(激活“use warnings”模式)。
  • 指定“use v5.36”编译指示时,将禁用对调用对象的间接表示法(“功能间接”)的支持 - 这是一种过时的调用对象的方式,其中使用空格代替“->”(“method $ object @param”而不是“$object-> $method(@param)”)。 例如,您需要使用“my $cgi = CGI->new”,而不是“my $cgi = new CGI”。
  • 当指定“use v5.36”编译指示时,将禁用对 Perl 4 风格中模拟多维数组和散列的支持(“多维特性”),从而允许将多个键的指示转换为中间数组(例如,“ $hash{1, 2}”) 转换为“$hash{join($;, 1, 2)}”)。
  • 当指定“use v5.36”编译指示时,将禁用对实验性分支机制(“feature switch”)的支持,类似于 switch 和 case 语句(Perl 使用给定和 when 关键字)。 要使用此功能,从 Perl 5.36 开始,必须显式指定“使用功能“开关””,如果指定“使用版本”,则将不再自动启用。
  • 对正则表达式中方括号中的其他字符类的支持已经稳定并且默认可用。 该功能允许您使用字符集的交集、排除和并集的高级规则来执行匹配。 例如,“[AZ - W]”- 从 A 到 Z 的字符(不包括 W)。
  • 对操作“(?”、“( )”、“{ }”和“[ ]”的支持已部分稳定并默认可用;您可以使用符号“”“”、“”“”等。例如,“qr”拍“”。
  • 禁止调用不带参数的排序函数,这将导致错误。 @a = 排序@empty; # 将继续 @a = sort; # 将打印错误 @a = sort(); # 将会打印一个错误
  • 提出了一个新的命令行标志“-g”,它启用了加载整个文件的模式,而不是逐行加载。 该标志的作用类似于指示“-0777”。
  • 对 Unicode 规范的支持已更新至版本 14.0。
  • 提供浮点异常 (SIGFPE) 的即时处理,类似于 SIGSEGV 等其他警报,允许您通过 $SIG{FPE} 绑定自己的 SIGFPE 处理程序,例如输出发生问题的行号。
  • 基本包中包含的模块的更新版本。
  • 添加了性能优化。 提供了在不使用共享字符串表的情况下更有效地存储大型散列键的能力。 创建新标量值的性能得到了显着提高,例如以下代码现在运行速度提高了 30%: $str = "A" x 64; for (0..1_000_000) { @svs = split //, $str }
  • 解释器代码开始使用 C99 标准中定义的一些结构。 现在构建 Perl 需要支持 C99 的编译器。 已停止支持在旧版本的 MSVC++(VC12 之前)中进行构建。 添加了对在 Microsoft Visual Studio 2022 (MSVC++ 14.3) 中构建的支持。
  • 对 AT&T UWIN、DOS/DJGPP 和 Novell NetWare 平台的支持已停止。

来源: opennet.ru

添加评论