本周p5p 2000/11/20
>
备注
您可以发送空消息到 p5p-digest-subscribe@plover.com
订阅此总结的电子邮件版本。
请将更正和补充发送到 simon@brecon.co.uk
本周有超过250条消息。
修复正则表达式引擎
本周在正则表达式引擎方面进行了大量工作,由Jarkko和Ilya完成。如果您还记得,正则表达式引擎有两个主要问题。首先,有再入性。这意味着如果您尝试说
m/something(?{s|foo|bar|})bad/
那么当您到达 bad
时,引擎将感到困惑,因为它在 s|foo|bar
之后无法正确恢复上下文。现在可以了,多亏了Ilya,他注意到
为什么这么一个微不足道的补丁要等我来做?!
将regexec()执行类似的编辑留给读者作为练习。
Jarkko反击说:“我们大多数人发现 reg*.[hc]
非常令人敬畏。”我注意到“微不足道的补丁”大小为89k。
第二个问题是递归;(参见两周前的报道)这意味着像Dan Brumlevel本周产生的病理示例会导致栈溢出
'' =~ ($re = qr((??{$i++ < 10e4 ? $re : ''})));
Ilya也开始着手“简化”正则表达式引擎以移除这种递归。虽然他的补丁没有解决这个问题,但它大大缓解了问题,并允许在像选择分支这样的操作上进行栈回溯。
著名的“多态正则表达式”问题也取得了一些进展,多亏了Jarkko。这个问题发生在匹配UTF8字符串内部;它的过程是这样的:给定一个包含字符300的字符串,它在UTF8中表示为字符196后跟字符172,字符172应该匹配吗?当然,它不应该,但目前它确实匹配。需要做的是将正则表达式的每个“节点”转换成可以表示字符和一系列字节的东西,然后它可以在byte
模式和字符模式下适当地行为。(参见关于此的先前讨论。)
Jarkko报告说,除了特殊匹配变量( $&
、$`
和 $'
)和POSIX字符类之外,大多数功能现在都已实现。
UTF8 和 Charnames
Andrew McNaughton发现Charnames
在小于255的代码点上不会生成UTF8编码的字符串。他提供了一些补丁来实现这一点,但Nick和我不认为如果不需要,就不应该进行UTF8编码。Perl的UTF8编码是懒惰的 - 如果Perl无法避免升级,则字符串将升级。
PerlIO(再次)
Nick对PerlIO的出色工作仍在继续,本周他提出了有关存储use open
设置默认值的位置的问题;目前,CV中有四个位被设置,两个用于输入,两个用于输出。然而,由于这只能提供四种状态,它并不能很好地扩展到用户定义的纪律。Sarathy的建议是使用与lexical warnings pragma使用的相同区域。整个线程包含了对PerlIO纪律语义如何展开的精彩讨论。了解更多信息。
=head3(再次)
Casey Tweten为了使POD支持=head3
及其更高级别而不懈努力。他首先修补了文档,然后修补了Pod::Checker
以确保它不会对新级别提出抱怨。Russ Allbery发布了podlaters的新版本以支持这些级别。
新的 subs.pm
Jeff Pinyan提出了一个新的subs.pm版本,该版本旨在处理预声明原型和属性。它需要一点平滑处理,但现在看起来相当不错。
祝贺
本周有两项祝贺事项。首先,祝贺那些致力于解决bug的团队;Perl中现在开放的bug少于1000个,而且没有任何一个被认为是致命的。
祝贺Perl黑客Mark Fisher,他刚刚成为父亲。阅读有关内容。
各种
有很多有用的细微改进,以及一些不引人注目的bug报告。许多通常是测试结果。本周只有两次激烈争吵,而且每次都是来自你著名的perl5-porters digest作者。你可能会认为我们会做得更好。
下周再见,我谦卑而顺从的仆人,
标签
反馈
这篇文章有什么问题吗?请在GitHub上为我们打开一个问题或拉取请求。