Perl 5.30发布

昨天,5月23日,Perl 5.30.0发布了。 该新闻 perl.perl5.porters Usenet 宣布为Perl的主要开发人员之一,SawyerX。


与大约11个月前发布的以前的稳定版本5.28.0相比,更改了大约620,000行代码,这些更改影响了1300个文件,共有58位作者参与了开发。 对源代码本身(仅.pm,.t,.c和.h文件)的更改估计约为510,000行和750个文件。


下一个分支5.31的开发已打开。 下一个稳定版本计划于2020年5月发布。


关键更改:


  • Perl API C函数sv_utf8_downgrade和sv_utf8_decode不再视为实验性的。
  • 对变长的后向表达式实现实验性支持,例如“(?<= Foo?)”和“(?<!Ba {1,9} r)”(以前导致错误)
  • 正则表达式的块“ {m,n}”中的大小说明符(“ n”)的最大值已从32767增加到65534。
  • 支持Unicode 12.1。
  • 有限的通配符支持已添加到Unicode属性值规范中(我不知道如何正确翻译)。 例如,表达式“ qr!\ P {nv = /(?X)\ A [0-5] \ z /}!” 允许您选择定义从0到5的数字的所有Unicode字符,包括泰语或孟加拉数字。
  • 已实现对qr'\ N {name}'的支持(正则表达式内的命名字符仅限于单引号;更早的此类正则表达式导致错误)。
  • 现在,您可以仅使用具有语言环境(-Accflags ='-DUSE_THREAD_SAFE_LOCALE')的线程安全操作来编译Perl。
  • 标志“ -Dv”(扩展的调试输出)和“ -Dr”(调试正则表达式)的组合现在导致包含所有可能的正则表达式调试模式。
  • Pack()增加了防止返回无效Unicode序列的保护。

功能删除和不兼容的更改:


  • 现在,将非零值分配给特殊变量$ [ (数组第一个元素的索引)会导致致命错误。
  • 作为线条和图案的分隔符,现在仅允许字素。 (禁止使用Unicode复合字符)。
  • 现在禁止使用某些以前过时的方法在正则表达式模式中使用未转义的左括号“ {”。
  • 在处理句柄时调用sysread(),syswrite(),send()或recv():utf8现在是致命错误。
  • 禁止在完全相同的错误条件语句中使用“ my”(例如,“ my $ x if 0”)。
  • 删除了对特殊变量$ * (多行搜索)的支持。 正确的替代选择是“ / s”和“ / m”。
  • 删除了对特殊变量$# (数字格式输出)的支持。
  • 现在,必须对函数名称dump()进行明确限定(CORE :: dump)。
  • 删除了功能File :: Glob :: glob(您需要使用File :: Glob :: bsd_glob)。
  • 计划停止支持使用XS代码(C块)中的UTF-8执行操作的宏,但随后决定将其推迟到版本5.32。

性能改进:


  • 现在,将UTF-8转换为代码点 (我不知道如何转换)是作为状态机实现的,这也可以提高性能-例如,ord(“ \ x7fff”)现在需要的指令减少了12%。 UTF-8字符序列验证也可以作为状态机实现,并且速度更快。
  • 从finalize_op()中删除了递归调用。
  • 对代码进行了次要的优化,以折叠相同的字符并在正则表达式中定义字符类。
  • 有符号类型标识符到无符号(IV到UV)的转换已得到优化。
  • 通过一次处理两位而不是一位来加速将整数转换为字符串的算法。
  • 通过LGTM分析进行了改进。
  • regcomp.c,regcomp.h和regexec.c文件中的优化代码。
  • 对于“ a”是ASCII字符的情况,匹配形式为“ qr / [^ a] /”的正则表达式的速度大大加快了(非ASCII“ a”的情况也可能会提高性能,但在某些情况下)。

Source: https://habr.com/ru/post/zh-CN453340/


All Articles