本周p5p动态 2001/07/09

笔记

本周p5p动态

尚未发布5.8.0

新模块

数字,数字,数字

PerlIO被认为是邪恶的

异步回调

各种

请将更正和补充发送到perl-thisweek-YYYYMM@simon-cozens.org,其中YYYYMM是当前年份和月份。欢迎对perl5-porters的传记进行更改和补充。

这周相当忙碌,共有400多条消息。我不是每周都这么说吗?

尚未发布5.8.0

Jarkko令人遗憾的是宣布5.8.0不会在Perl Conference之前发布,但5.7.2即将到来

我想是时候放弃5.8.0会在Perl Conference之前发布的幻想了。星星就是不肯正确排列,太多的 loose ends,太多的延误,太多令人烦恼的小问题,CPAN模块测试太少。幸运的是,没有出现重大问题,我认为我已经大致实现了我最初为Perl设定的目标,所以我仍然希望能够在TPC之前完成一些东西,并称之为5.7.2(它必须下周发生,否则就不会发生),并在会议之后不久发布5.8.0的候选版本1,然后继续努力,直到我们对得到的结果满意为止。

新模块

这些并不是真正的新模块,但它们可能已经从网络上滑过去了,你还没有注意到它们,而且由于它们很有趣,你可能想看看...

I18N::LangTags 检测并操作RFC3066语言标签;Locale::Maketext 对于本地化文本非常有用;Unicode::UCD 是访问Unicode字符数据库的便捷接口;Encode 正在变得强大,现在可以读取IBM ICU字符表;Mark-Jason Dominus的Memoize模块现在是核心的一部分。

数字,数字,数字

还记得上周那个奇怪的Amdahl UTS漏洞,其中Nicholas Clark确信UTS C执行了两次递减语句吗?他找到了问题 - 递减语句根本不应该在那里...

这促使他发现了grok_number中的漏洞;这让我有些惊讶,因为我不知道grok_number甚至存在。所有有用的、平台无关的代码,用于处理数值操作 - 介于不同大小之间的转换,转换二进制、十六进制和八进制数字,识别字符串中的数字等等,都已移至numeric.c。看看它,里面有很多实用的小工具。

我们的UTS大师Hal Morris还指出了一些令人不快的类型转换假设,需要补丁

UV_MAX不能定义为(unsigned long){whatever}对于UTS,因为那样与双精度比较将不会正确(与(unsigned)类型转换没有问题,只有与(unsigned long)

grok_number在QNX上又派上了用场,当时Norton Allen发现strtoul没有在溢出时正确设置errno。当我们不得不重新实现人们损坏的C库时,这是便携性的代价。

PerlIO被认为是邪恶的

Ilya在PerlIO中找到一个漏洞,然后尝试展示它时又发现另一个漏洞。原始漏洞是

实际问题是,按字符输入需要重复按回车键,Perl才能看到这个键。通过Term::ReadKey测试套件调试这个问题,显示以下逻辑

pp_getc()调用is_eof(),其中getc/ungetc调用getc()

[顺便说一句,我看不到这一系列事件中有任何逻辑。]

问题是,如果"\n"是缓冲区中的第一个字符,ungetc()无法取消返回"\n",并且默默地将其丢弃。

Ilya对PerlIO有很多批评,我们不必深入讨论。不言而喻,他没有提供作为补丁的多层标准IO系统的替代实现。实际上,他甚至没有提供任何补丁。

Vadim Konovalov提供了一个简单的补丁来清理一些东西,但后来AndyNick都表明这根本无济于事,生成的代码相同,一些编译器无法处理lvalue casts,Nick小心翼翼地移除,Vadim的补丁又重新引入。看来Nick可能真的知道自己在做什么。

异步回调

David Lloyd询问如何安全地从C到Perl进行异步回调。Bejamin Stuhl建议修改核心以在PERL_ASYNC_CHECK交叉码期间引入一些检查,并建议Perl 5.8.x有注册交叉码回调的公共方法。David Lloyd回复说PHP/Zend已经有了这个功能,甚至可以不修改核心实现信号检查的附加模块。Paul Johnson更进一步,建议使用可插拔的runops例程。令人惊讶的是,这实际上已经实现,但没有人真正了解它;《Devel::Cover》显然利用了它。当然,问题是一个时间只能使用一个自定义op循环,因此David建议编写一个XS模块,允许其他模块添加回调。我希望这能实现。

Artur Bergman突然出现,不出所料,建议使用ithreads。

各种

Rudi Farkas在Win32上发现了一个奇怪的问题——在该平台上,可执行性(即-x测试)由被检查的文件名决定。例如,foo.bat被视为可执行,但foo.bar不是,即使它们包含完全相同的数据。这个相当奇特的设计决策导致了一个事实,即如果你使用文件名调用stat,执行位将根据扩展名设置。另一方面,如果你使用文件描述符调用fstat,Windows无法检索文件名并测试扩展名,因此它将执行位静默设置为零,无论它接收什么。这是不好的,意味着在Windows上-x _是不可预测的。Radi提供了一个建议的解决方案,但没有人足够关心修复这样一个明显愚蠢的问题,以至于产生了补丁。

Mike Schwern修复了MakeMaker,以防止在构建扩展时产生多余的-I...,并发现XS版本的Cwd作为单独的CPAN模块效果不大,因为它依赖于核心函数sv_getcwd,该函数仅存在于5.7.1中。哎呀。哦,说到Cwd,Ilya为OS/2修补了它,并指出在该平台上结果是未被篡改的。

Ilya还修复了一个明显的调试器错误(哦,讽刺),这促使Jarkko哀叹缺乏测试套件。Robin修复了B::Deparse中的几个奇怪的错误。

Jonathan Stowe将pl2pm升级为警告和严格清理。我不确定为什么。

Philip Newton修补了许多错误。Norton Allen更新了QNX文档,并提供了一些其他修复。

皮尔斯·卡韦利(Piers Cawley)在 SUPER:: 中发现了一个看起来像是bug的东西,但有人向他保证这不是bug;兰达尔(Randal)通过引用Smalltalk赢得了胜利。

阿比吉特·梅嫩-森(Abhijit Menon-Sen)(留意这个人……)使得当 mkdir 被赋予非八进制字面量时会发出警告,因为通常这并不会做人们想要的事情。在吉斯勒(Gisle)的提示下,他还对 umaskchmod 做了同样的处理。不幸的是,他忘记了常量折叠……

下周见,


您的谦卑而顺从的仆人,

标签

反馈

这篇文章有问题吗?请通过在 GitHub 上打开问题或拉取请求来帮助我们。