本周p5p动态 2001/04/22

注释

您可以通过发送空消息到 perl5-porters-digest-subscribe@netthink.co.uk 订阅本摘要的电子邮件版本。

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

本周共有不到500条消息。

核心模块

Jarkko在将 Scalar-List-Utils 添加到核心头文件后,面对了膨胀的指控,并列出了 提议添加的模块列表。这不可避免地引发了一场激烈的讨论。主要争议不是关于膨胀本身,而是关于模块责任不清的问题,特别是如果它在CPAN上有独立的生命,以及如何将更新反馈回来。

Paul Marquess 表示,他想将 zlib 源代码放入 Compress::Zlib 发行版中,这将使其适合核心化,以便 CPAN.pm 可以处理压缩文件。不幸的是,源代码很大,并不像Perl那样易于移植。另一个建议是在构建Perl时添加对 -lz 的配置探测,并构建 Compress::Zlib。Nick Clark一直在研究压缩/解压缩PerlIO过滤器,但这也会使用 libz。与 GDBM_File-lgdbm 依赖性的比较引发了对一个具有纯Perl解压缩回退的 AnyCompress 库的讨论。Nick Clark在其此消息中对这部分讨论进行了很好的总结。

Anton Berezin 表示,FreeBSD 将将5.6.1拆分为核心组件和附加的“ports”。这让一些人担心,直到他们想起Debian也一直在这样做,而Joe Karthauser指出,将核心模块拆分为单独的ports可以允许它们独立于Perl版本进行更新。

Larry 表示,要求 expat 并不是将 XML::Parser 包括在内太大的障碍,因为如今XML无处不在。Nat指出,Paul Kulchenko写了一个纯Perl解析器,XML::Parser::Lite,也可以贡献给核心。Dan Brian敏锐地指出,如果有人已经安装了expat并且他们将会进行XML操作,那么他们很可能已经有 XML::Parser 了,所以没有必要有一个纯Perl回退。Matt Sergeant提醒我们,关于“最佳”XML API模块并没有达成共识,所以我们实际上也不能包括其中任何一个。

Larry 想与Paul讨论 XML::Parser::Lite 为什么会变得如此缓慢,这可能是为了帮助他决定Perl 6的正则表达式策略。

质量控制

Perl的质量控制部门 - 施文先生 - 这周进展顺利;首先,他发现测试套件中有一些针对Mac的特殊情况 @INC 处理。如果这有必要,他争辩说,为什么不是所有测试都需要?如果所有测试都需要,为什么不将其抽象成一个单独的模块?因为 TEST 作业无论如何都会自动加载 TestInit.pm,为什么不使用它?Chris Nandor表示赞同,但他指出,您仍然需要从所有测试脚本中删除 @INC 修改,因为这些脚本将在 TestInit 完成修改后运行。

他还建议将 Test::SimpleTest::More 放入核心。对此没有人发表评论。

接下来,他将 t/lib/1_compile.t 中的“编译”测试从已经具有测试的模块中移除。Jarkko 建议这需要定期发生,并希望有一个更聪明的解决方案,但 Schwern 想到了一个更好的方法——写更多的测试!

然后,他列出了一份所有未经过测试的模块的清单,并提出了一个奖励——一旦所有模块都有足够的测试,Schwern 将捐赠500美元给Yet Another Society。快去做吧,剥夺这个人的辛苦钱!也许你还能从中得到奖品...

他还提出了两个相当没有争议(按照大多数人的标准)的新模块进入核心的标准:它们应该有一些文档和合理的测试量。Schwern 说:“我目前不想让它变得过于复杂,以避免长时间的辩论。”但这并没有奏效。

Peter Prymmer 提出让 Perl 在没有为 List::Utils 模块构建 XS 代码的平台上进行测试时避免测试这个模块。Graham Barr 短暂地提出了异议,认为它应该回退到纯 Perl 替代品;然而,如果没有构建,这些替代品就不会移动到 lib/ 目录下。当他意识到回退是为了那些没有编译器的人,而在 Perl 构建过程中你通常会有一个编译器时,他就撤回了他的异议。

正则表达式调试器和引用类型

Mark-Jason Dominus 一直在为 ActiveState 的 Komodo IDE 开发的正则表达式调试器——它允许你在正则表达式中设置断点。然而,他遇到的一个问题是将编译后的正则表达式(例如 ANYOFEXACT 等)的节点位置与字符串表示形式中的字符偏移量联系起来。例如,如果你有 /([\d.]+)f/,你的调试器会希望在“f”处停止。为此,编译后的形式需要知道“f”在哪里。为了提供这一点,他提交了一个补丁,

他提交了一个补丁,每次编译正则表达式时都会生成一个偏移量数组;他还修复了 perldebguts,以解释它是如何工作的

此外,MJD 注意到正则表达式调试输出的问题:当你有一个字符类时,Perl 使用一个掩码来标记你正在匹配的字符。它曾经是256位,一个用于每个字符。然而,对于 UTF8 正则表达式,现在这个掩码需要比以前宽得多。但是,调试器并不知道这个新的宽掩码,仍然只跳过256位,落在 Unicode 掩码的中间。如果这一点上的位被设置为零,这是很可能的,调试器会将其解释为空操作。MJD 通过让 Perl 跳到列表中的下一个节点而不是尝试遍历字节码来修复了这个问题。

与此同时,Michael Schwern询问为什么当你使用ref qr/foo/时得到的Regexp类型没有文档记录,或者为什么它不像所有其他内置类型一样是REGEXP。Jarkko同意它应该是REGEXP,而Larry(看,他又回来了!)建议用REGEX来提高可读性。Sarathy说他想改变它,但有两个问题从未得到解决:名称(我们现在有了规定)和类应该做什么。因此,Schwern建议修改名称的补丁。然而,Sarathy担心由于qr/foo/返回的“东西”实际上是blessed的,所以可以将其视为对象,并创建一个Regexp.pm来实现这个对象的方法。(这正是Damian Conway在他的面向对象Perl书中所做的那样。)大写类型的目的是未blessed;没有什么可以阻止某人编写SCALAR.pm,但这会让人困惑,因为您将无法区分从ref返回的东西是否是blessed或未blessed。这说服了Jarkko不要改变Regexp的大写形式。

iThreads

Artur Bergman报告说,他开始编写一个模块,希望有朝一日可以取代Thread.pm。它不使用旧式的“5.005”线程,而是使用新的解释器线程。这些被称为iThreads,有各种令人兴奋的颜色,并且价格昂贵。它们是用于在Windows上模拟fork的技巧——而不是进行fork,您只需克隆解释器来形成一个“伪进程”。

然而,到目前为止,还没有从Perl空间控制iThreads的方法;所有这些都必须从C中进行。Artur还没有完成,但我听说他已经使许多基本功能正常运行。

感兴趣吗?加入邮件列表

B Bumblings

Robin提出一个非常惊人的补丁,它为B::Deparse添加了对pragmata的支持。他还为当前未定义的子程序中的括号参数添加了一些内容;也就是说

    foo 23
    sub foo { }

需要括号。然后他修复了UTF8字面字符串,并注意到大代码点与正则表达式之间的问题。David Dyck修复了之前说成是split /\s+/split " "的解析。Robin还使解析器能够识别特殊的常量,如$^W,并区分词法变量和全局变量。哦,还有BEGIN/INIT/END块,以及其他各种小功能。

Michael Schwern也一直在玩B,并在B::walksymtable中发现了错误的文档,他修复了它,以及Robin正在玩的一个错误。Robert以真正精彩的解释回复了如何检测pragmata

各种

Benjamin Franz宣布了另一个邮件列表,一个工作组,旨在制定一个一致的战略来创建一个“命名参数”模块。如果您对此感兴趣,请发送主题为subscribe argument-shop的邮件到majordomo@nihongo.org

Elaine Ashton向FAQ中添加了一些补丁,以及将“邮件列表”和“许可”部分添加到由h2xs生成的简略文档中。这些补丁不大,但我提到它们是因为Elaine是那些默默无闻的英雄之一,人们往往忘记她在幕后为我们所做的贡献,比如整理FAQ、perl.org的内容、“CPAN搜索引擎”以及出色的Perl邮件列表列表

汤姆·罗奇提出了一项建议,改变Perl的版本搜索行为,以便安装不同版本的模块。人们给出了各种解释来说明这行不通(因为Perl必须先加载一个模块才能识别其版本),并且提出了两个巧妙的替代方案:理查德·索德伯格建议在@INC中使用子例程引用,而MJD建议简单地将版本号放在模块的文件名中。实际上,为什么不按模块创建一个目录,这样你就可以使用use Foo::Bar::1.10呢?但我在这里打岔了……

卡勒·迪贝达尔问为什么我们有一个名为patchlevel.h的文件,因为ImageMagick也有,这搞砸了Perl。拉里回答说,我们是最先有的。

下周再会,您的谦逊而顺从的仆人,


西蒙·科泽恩 - 注释 - 核心模块 - 质量控制 - 正则表达式调试器和引用类型 - iThreads - B Bumblings - 各种

标签

反馈

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