这些周在p5p 2000/10/23

备注

您可以通过向p5p-digest-subscribe@plover.com发送空消息订阅此摘要的电子邮件版本。

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

由于家庭原因,我上周没能完成总结;请注意,这是一期特别增刊,覆盖了最近两周。

我们的Unicode模型是什么?

过去几周的大辩论是我们实际的Unicode模型意味着什么:use bytes真正应该做什么,是否可以不通知任何人就升级值为UTF8,等等。如果您对Perl的Unicode策略如何工作——或者,正如一些人所说的,为什么不工作——感兴趣,请看看这个线程。这个线程中差不多有一百条消息,它涉及到了行纪律,这是从文件等外部源读取Unicode数据的方式。这个线程也引发了一些私人电子邮件,以下是一些已经解决的问题

  • 如果数据在内部升级到UTF8没有关系;如果有一个地方有关系,那就是一个错误。

  • 行纪律需要在其他任何事情之前发生。

  • use bytes确实有道理。真的。

线程的大部分都是关于如何实现行纪律的技术细节;有行纪律意味着我们几乎肯定需要我们自己的stdio版本或者非常类似的东西。

为什么不使用sfio?

实现我们自己的stdio版本的明显替代方案当然是偷用别人的,因此Nicks(Clarke和Ing-Simmons)开始查看ATT的sfio库

sfio声称它能做到我们想要的,它的开发者(David Korn - 是的,就是他 - 和Phong Vo)向p5p发帖来让我们放心,它会适合我们,新的许可证允许它与Perl一起分发;因此,这似乎是一个非常有可能的事情。

它需要移植到VMS和其他一些平台,但就我们和sfio的人来说,这不应该是一个问题,并且它也会让其他sfio用户受益。让我们开始吧!

超过256个文件 / sysopen

Piotr Piatkowski报告说,在Solaris上无法打开超过256个文件。嗯,这其实是标准的Solaris行为,但您应该能够通过sysopen绕过它,因为sysopen直接调用底层操作系统的open,对吧?然而,事实并非如此——sysopen实际上调用的是fopen,这是错误的!为此还没有开启一个错误报告,也没有修复。

如果cc发生变化怎么办?

贾科·诺特指出,由于现在人们将Perl与他们的商业Unix发行版一起打包,他们编译Perl时所使用的编译器——比如Sun cc——可能并不是用户最终使用的编译器——通常是FSF gcc这样的。这会导致添加CPAN模块时出现问题。萨拉西建议的解决方案是修改Config.pm,并且拥有打包的模块发行版。(比如模块的.deb和.rpm文件)ActiveState的PPM被建议为一种自然的方式来实现这一点,最近它已经被发布到CPAN。

EBCDIC上的Unicode

Perl 5.6在EBCDIC上正在逐渐完善;伊格纳西·罗卡发现了一个错误,并尝试进行了修复,但彼得·普里默和我已经着手处理了。彼得还贡献了大量杂项补丁,用于测试套件暗示ASCII的地方。

AIX混淆了

盖伊·赫尔伯特在我们帮助AIX运行起来后,似乎遇到了关于struct tm内容的困难。随后,梅里恩贡献了README.aix,这部分内容之前神秘地未被撰写。盖伊还识别出了一些其他问题,我认为这些问题已经得到了解决,但我不确定。

Unicode分割修复了!

上次,我报告了split和Unicode之间的问题;好消息是,贾科已经修复了它。我还为上次识别出的宽字符~问题贡献了一个修复,这在64位操作系统上不起作用。贾科和我同时发现这是pp_chr中的一个bug,它被限制在32位值,因为它从栈上取了一个U32——如今在处理字符时,从UV到及其以上的任何值都是合理的。

在其他Unicode新闻中,有一个bug,当执行类似"$1$utf8"的操作时会导致只读变量错误;贾科修复了它,尼古拉斯·克拉克也提供了一些测试。

Carp的修复

本·蒂利贡献了一个大补丁,以解决Carp中的一些错误和令人困惑的行为;不幸的是,这个补丁似乎导致测试套件比之前失败的更多。根据我所知,这个补丁还没有被重新审查,所以可能有人想看看它。

open()可能会失败

显然,贾科最近处于“机智”状态,询问“当open/fopen/fdopen失败时应该怎么办?”这个可能很有趣的线程被大量关于errno的语言法律诉讼所拖累。这种情况通常发生在errno上。

Perl 5是5!

Perl 5在上周某个时候度过了5岁生日。我说“某个时候”,因为关于时区如何庆祝生日有一点小小的争议。是的,我也觉得这很不可思议,但这里有原始发布信息,由杰夫·奥卡莫特保存。

翻转-翻转错误

杰夫·平杨注意到,在标量上下文中翻转操作符(如if 1...20等)在没有打开文件句柄的情况下会有有趣的问题。我糟糕地修复了这个问题,但雨果干净利落地修复了它;马克-贾森·多米努斯要求提供文档补丁,但尚未出现。如果有人想阅读这个线程并进行建议的更改,那将是美好的!

通过next退出子例程再次发生!

亚历山大·法伯发现了一个小的File::Find示例,它会导致段错误。当前的开发Perl中已经实现了 workaround,但事实上,通过next退出子程序确实会导致段错误。这可能是一个勇敢的人进行调查的好机会。

新的常量子机制

John Tobey提出了对newCONSTSUB的重新实现。[链接](http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000-10/msg00939.html)。这是什么呢?好吧,当你使用use constant或创建类似于sub foo () { 42 }的子程序时,Perl会对此进行优化,并在编译时创建一个特殊的内联子程序。他的新版本似乎可以节省大约70%的空间,但具体节省了什么空间以及什么条件下能节省,我就不知道了。然而,这个版本也对sub () { return 42; }进行了优化,为CV创建了一个“常量”标志。添加这个额外标志意味着需要更新像dump.cB::*这样的工具,John也确实做了更新。干得好,很全面。

正则表达式段错误

这次出现了相当多的段错误。Marc Lehmann[链接](http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000-10/msg00931.html)注意到了与正则表达式相关的一个错误。Andreas进行了回归测试,而Hugo修复了这个问题;Ilya加入进来帮助解释细节和潜在问题。

use vars让你做坏事

Robert Spier进行了一些错误考古工作,发现[链接](http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000-10/msg00961.html)使用use vars允许你做一些不好的事情;特别是,它允许你创建像$f;这样的变量,这些变量很难访问。他提供了一个补丁,当与use strict q/vars/结合使用时,会导致不合理的变量名引发错误。这引发了一些有趣的哲学问题——我们是否应该允许人们说:

use vars q($x $y;$z);

你怎么看呢?

各种

其他消息,包括通常的错误报告、错误修复、非错误报告、问题、答案,以及没有垃圾邮件。没有争论;或者至少,没有什么值得记忆的有趣事情。

直到下周,我是,你谦卑而顺从的仆人,


Simon Cozens

标签

反馈

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