本周p5p 2000/04/23

注释

元信息

您可以通过发送空消息到[email protected]订阅此摘要的电子邮件版本。

请将更正和补充发送到[email protected],其中YYYYMM是当前年份和月份。

简要更新

自上次以来,Perl 5.6.0已发布。如您所见,版本编号方案已更改。如果未更改,这将是一5.006,或者可能是5.006_00。

5.6.0版本公告

在此之后,列表流量非常高,有许多小错误报告和配置问题。自那以后已经平静下来。

3月底和4月初流量激增的另一主要原因是大量关于5.6.0是否好或不好的抱怨和指责。天哪,p5p在最糟糕的时候。Sarathy努力使5.6.0准备就绪,然后在发布之后,每个人都开始抱怨。

一方面,有人在抱怨错误和它的不稳定性,说没有人会切换,还有一些指控称Sarathy是微软阴谋破坏Perl的一部分。等等。另一方面,很多人说这些变化不足以值得发布新版本号。

(关于最后一点,我认为Tom的回复最有效地回答了这一点。这种语气是整个讨论中大多数的特点。)

您可能会认为最多只能有一组这样的说法是合理的;或者微软正在试图通过强制提前发布不稳定版本来破坏Perl,或者变化太小,不值得发布。您可能会这样想,但您会犯错误。

现在让我们结束这一特别丢脸的章节。

p5p是否会成为审稿人?

部分原因是3月和4月占用大量时间和精力的漫长、乏味且无关紧要的争执,Sarathy提出了让列表“审稿”的建议。这与审查不同:大多数人的消息都正常通过,但如果审稿人同意,则某些线程或某些订阅者的消息必须通过审查员才能发送到列表。在您做出决定之前,请阅读实际的提案。

以下讨论令人满意地避免了宣言、最后通牒、指控、高谈阔论等。

Sarathy: 许多好人已经不再这里了。Chip离开了,但已经勇敢地尝试创建一个新的列表,试图重新发现我们熟悉的旧perl5-porters。Jarkko消失了,他对所有的人身攻击和低俗行为感到厌恶。Andy也走了,多亏了无用的争论、个性冲突和恐惧传播。我们负担不起。

这里的一个插曲是,Jarkko表示希望有人能接手Configure南瓜。如果您想接手Configure南瓜,请联系Jarkko。

Jarkko: 我们需要教育更多的南瓜持有者。

perlretut和perlrequick

在我没有编写报告的时候,Mark Kvale 提交了一个 perlretut 手册页草稿,这是一份面向正则表达式初学者的教程。(也许你没有注意到,现有的 perlre 手册页除非你已经使用 sed 三年,否则难以理解。)我抱怨 perlretut 太长了,而Mark很乐意地提供了一个缩减版本,perlrequick

perlretut

perlrequick

线程搞笑事件

Dan Sugalski 发现 lock() 函数不是线程安全的。我提名这为2000年最有趣的意外Perl源代码笑话。

这引发了Dan和Sarathy之间关于Perl线程最佳方法的又一轮辩论。Dan的补丁在每个 SV中都添加了一个互斥锁;Sarathy提出了反对意见。

线程从这里开始。

Dan Sugalski:每当有共享时,你必须处理这个问题。Sarathy:抱歉,我现在没有签证进入结论之国。:-) Dan:而且显然在过去两年里,也没有人为进入部分工作替代方案之国申请签证。

Sarathy的回复

讨论后来在第二个线程中继续。

这次讨论真的很有趣,但我没有完全理解。如果有人想为我的下一份报告贡献一个更详细的讨论,我将不胜感激。

行纪律

Simon Cozens 对承诺的“行纪律”功能做了一些工作,但在5.6.0中并没有完全实现。这是一个概念验证,还没有完成。想法是你可以将一个Perl(或XS)函数与一个文件句柄关联起来,然后每次从文件句柄读取时,都会调用该函数以某种方式转换输入。典型的转换:将CRLF转换为LF以供Windows机器使用;将ISO-2022等一些国家字符集转换为Unicode或反之亦然。

这个功能的基础在Perl 5.6.0中就有了;例如,可以查看5.6.0中binmode()的文档。

Simon的消息。

旧纪律讨论

前一次讨论第一部分 前一次讨论第二部分

前一次讨论第三部分

大行号

James Jurach 报告说,当你的程序超过65,535行时,Perl报告的错误行号是错误的。结果是行号存储在操作符节点中,并且只有16位长,以节省空间。(在64K行程序中,32位行号将额外消耗128Kb空间。)James提交了一个补丁,使32位行号成为编译时选项。

伪哈希字段名,哈希性能,以及map性能

Benjamin Tilly 提出了许多有趣的观点。首先,对于伪哈希的“没有这样的数组字段”错误信息没有说明问题字段名。其次,如果当桶中的链表过长时,用二叉搜索树替换它,哈希的性能可能会比现在更加平滑。

然而,他没有为这两者提供补丁。

Benjamin的文章

后来,Benjamin 报告说在某些情况下,map 非常慢,甚至比一个全部用Perl编写的函数慢。看起来基于grepmap函数被优化为在结果列表不比参数列表长的情况下快速执行。对于grep来说,这是所有情况。但是,对于map来说,这并不总是正确的,一个典型的例子是

        %hash = map {($_ => 1)} @array;

Benjamin 提出了如何修复这个问题,但不幸的是没有提供补丁。

Benjamin的另一篇文章

Benjamin 还报告了Math::BigInt中的一个错误;当它不应该崩溃时,它会崩溃并显示“内存不足!”。Hugo van der Sanden确认了这一点,并找到了一个更小的测试用例

        perl -we 'use Math::BigInt ":constant"; for ($n = 1; $n < 10; $n++) { 1 }'

C与嵌入式Perl

Vadim Konovalov 提出了一个简单且方便的方法将Perl代码嵌入到C程序中。这是一个简单的预处理程序,与常规的C预处理程序一起工作。了解相关信息。

`不可达’代码。

名叫Zefram的人对手册中说的一部分提出了异议

        [goto] also can't be used to go into a construct that is
        optimized away.

他的例子

    if(0) {
      FOO:
        print"foo\n";
        exit
    } 
    print "1\n";
    goto FOO;

这里,if块被优化掉了,所以程序打印出1然后以找不到标签FOO错误退出。Zefram正确地指出,他不应该知道什么可能会被优化掉,至少在这个情况下应该有一个编译时的警告。他还说

不可达代码消除是件好事。但如果代码前面有一个标签,那么它很可能不是不可达的。

很难反驳这一点。然而,没有人跟进。

原始消息。

sprintf精度

有人来信(又一次)询问为什么sprintf("%.0f", 0.5)得到的是0而不是1。我不会提到这件事,除非它吸引了John Peacock的跟进,他说他正在编写一个Math::FixedPrecision模块,这可能有助于解决这类问题。这听起来很有趣,可能值得一看。了解更多。

SDF替换

以前,Ian Clatworthy开发了一种名为SDF的文档格式,即简单文档格式。它是一种易于阅读的标记语言,就像POD一样,但更强大,也可以转换为许多其他格式。(在某些情况下,它使用POD作为中间格式。)

Ian在p5p上宣布他正在开发SDF的继任者,即ANEML。他这样做是因为他认为我们会感兴趣(我确实感兴趣),并且因为他认为有人可能会自愿帮忙。许多细节在这里。

各种

大量的错误报告、错误修复、非错误报告、问题和答案。这次没有垃圾邮件。

直到下次再见,我仍是,您谦卑而顺从的仆人,


Mark-Jason Dominus

标签

反馈

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