2000年11月7日p5p本周

注释

您可以发送一个空消息到 p5p-digest-subscribe@plover.com 订阅此总结的电子邮件版本。

请将更正和补充发送到 simon@brecon.co.uk

对于这份报告稍晚出现表示歉意;我旨在每周一发布,但希望你们都被美国大选分散了注意力,还没有注意到。这周内容很多,根据是否计算唯一的邮件或重复邮件,达到了300或550条。然而,并没有太多非常有趣的内容。

错误号解析

t/lib/io_multihomed.t的一个看似无辜的补丁,竟然暴露了Errno.pm中的一些问题。(Casey Tweten做得很好,终于追踪到了这个问题,经历了看起来相当痛苦的调试过程...)

如果您不知道,Errno模块在构建Perl时会自动通过读取系统的errno.h文件生成。然而,似乎有些系统和libc实现使用的宏对Perl来说很难自动解析,这意味着一些错误常量(例如EINPROGRESSETOOSTUPID等)没有被捡起。(Tom Hughes在RedHat 7.0上也注意到了这一点。)解决办法是使用gcc的-dM标志;目前对非gcc我们无法做太多。

VMS技巧

这周在VMS上做了很多工作:首先是在文件锁定方面。Peter Prymmer报告说t/lib/st-lock.t失败了,因为VMS实际上没有锁定。Peter Farley表示,这种情况在DOS和DJGPP上也一样,解决办法是取消锁定测试。Andy Dougherty提到,一个永久的解决办法是定义一个d_fcntl_can_lock Configure变量来决定是否fcntl有用。Craig Berry之前提出过这个想法;Andy提供了补丁。

Peter还注意到Jarkko的一个补丁破坏了POSIX模块;还有一些错误输出混淆了测试框架,使得测试通过但仍然报告失败。

经过这一切,Perl在VMS上现在通过了所有测试,大家都很高兴!

神秘的(f)crypt

Richard Proctor正在尝试在RiscOS上编译Perl(并接管RiscOS南瓜),但是遇到了问题,因为该系统的fcrypt没有原型。他试图通过一些强制类型转换来解决这个问题,但Jarkko并不满意;正确的做法是有一个独立的riscos/目录,并将特定于平台的东西放在那里。Nicholas Clark评论说,[fcrypt]支持是“奇怪的”。

有4个FCRYPT引用,但没有任何地方(甚至在端口子目录中)定义了这个宏。这个宏不是通常的HAS_或I_形式。有人知道它起源于哪里吗?

没有人知道,这很奇怪。然而,我们发现了Riscos的UnixLib是从哪里获得fcrypt实现的。

Andy Dougherty建议另一种正确的方法是定义(并测试)一个configure符号d_fcrypt_proto,然后转换为HAS_FCRYPT_PROTO

没有提供补丁。

更多自我关联

Randy Ray 拥有一个模块(Perl-RPM),它使用自绑定;他发现自绑定对象的引用计数为两个,而你预期它应该是一个是。Alan 回复说自绑定是严重损坏的(嘿,我们不都知道吗……),Jarkko 宣布我们需要有人愿意解决这个问题并把它解决。Randy 承诺尝试看一下。

Steffen Bayer 建议你可以手动将引用计数设置为1,这在 Alan 看来有些令人反感。Steffen 回应说

我认为这是一个观点问题。:-)

将 refcount 设置为较低值本身并没有什么根本性的邪恶,因为这只会比正常情况下更早触发 DESTROY() 事件。

但 Nick 指出,你无法确保在 DESTROYing 期间不会创建任何更多对该对象的引用,因此这归根结底确实是邪恶的。

Rsync与FTP补丁

Merijn Brand 抱怨补丁存档(那是 rsync://ftp.linux.activestate.com/perl-current-diffs/ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/perl-current-diffs)和最新的源树之间有差异。( rsync://ftp.linux.activestate.com/perl-current/ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/perl-current。)

Sarathy 解释说

rsync 镜像是自动的,每五分钟与存储库同步。

更新补丁区域仍然需要手动干预(这涉及许多愚蠢的事情,你已经注意到了),通常是每日循环。使此过程自动化已在我的待办事项列表上,但不要问我何时。

该线程稍微偏离了主题,讨论了设置 rsync 服务器的机制,但导致了 Merijn 对 perlhack 的贡献,解释了如何与 Perl 源保持同步。

README.aix变更

我们最近一直在告诉 AIX 用户,他们需要升级他们的编译器才能编译 Perl,因此 Merijn 向 README.aix 发送了一个补丁,告诉他们如何这样做。了解详情。

Jarkko 也决定是时候有一个 README.Solaris 了;正在寻找志愿者。

正则表达式堆栈问题

Sam Smith 发现一个正则表达式会导致引擎崩溃 - 进一步调查显示它是引擎递归太深并超出最大栈深度。Dominic Dunlop 解释说,修复这个问题很困难,因为编写可移植的栈检查代码是一个挑战,而修复问题的根本 - 将正则表达式引擎从递归改为迭代 - 是有些艰巨的。

Dominic 进一步解释说,他有一个栈检查补丁,但它依赖于系统具有 BSD 资源限制函数 getrlimitsetrlimit。他也不能找到一种优雅的方式使所有这些都合理地与线程一起工作。当时,Ilya 反对说应该通过重写引擎为迭代来修复这个问题;Dominic 尝试了,但这非常困难,使整个过程慢了大约 30% - 这是由于需要在不同层级之间复制结构体的额外内存分配。Jarkko 提出了几个想法,其中最有希望的是使用自定义栈。

解决方法是使用 ulimit 增加进程的栈大小;有人建议 Perl 应该能够在必要时使用 setrlimit 来扩展其自己的栈大小。这被 Jarkko 所不齿 - 限制是存在的原因。

任何有无限耐心和理智的人可能都愿意尝试移除递归,但到目前为止,Dominic 和 Hugo 看起来是唯一有耐心和理智的人。

没人修复的事情

一些尚未有人调查的虫报,对于那些有额外时间的人: xsubpp 截断文件

5.6 中 AUTOLOAD 行为已更改,以及 UTF |= 已损坏

享受吧!

Craig Berry

本周,Craig Berry对p5p做出了巨大贡献,特此予以特别表扬——我们几乎收到了他近三百条信息。然而,经过仔细检查,其中284条实际上是相同的,这是因为某个完全不同地方的一个恶意CC Mail副本导致的。(这完全不是Craig的错。)

各种

留下了一堆误入歧途的查询、测试报告、常见问题解答、离题帖子,以及人们在列表上关于列表中垃圾邮件数量的问题。直到下周,我仍然是,您谦卑且顺从的仆人,


Simon Cozens

标签

反馈

这篇文章有什么问题吗?请在GitHub上打开一个问题或拉取请求,帮助我们。