这些周在p5p 2000/10/23
- 备注
- 我们的Unicode模型是什么?
- 为什么不使用sfio?
- 超过256个文件 / sysopen
- 如果cc发生变化怎么办?
- EBCDIC上的Unicode
- AIX混淆了
- Unicode分割修复了!
- Carp的修复
- open()可能会失败
- Perl 5是5!
- 翻转-翻转错误
- 通过next退出子例程再次发生!
- 新的常量子机制
- 正则表达式段错误
- use vars让你做坏事
- 各种
备注
您可以通过向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.c
和B::*
这样的工具,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);
你怎么看呢?
各种
其他消息,包括通常的错误报告、错误修复、非错误报告、问题、答案,以及没有垃圾邮件。没有争论;或者至少,没有什么值得记忆的有趣事情。
直到下周,我是,你谦卑而顺从的仆人,
标签
反馈
这篇文章有什么问题吗?请通过在GitHub上打开一个问题或拉取请求来帮助我们。