洋葱状态 5

拉里的洋葱状态演讲今年,就像往年一样,与以往完全不同。正如他所说,以前的演讲是关于化学、神学、生物学和音乐的;今年,拉里终于谈到了Perl。

今年,演讲的格式也相当不同。基于以往Perl会议中闪电演讲的成功,拉里决定采用这种形式——他给我们带来了33场闪电演讲,每场演讲55秒,他的女儿Heidi无情地打铃。实际上,她是如此无情,以至于拉里不得不鼓励我们快速笑,以免减少他的演讲时间。

Perl 6和启示录

拉里·沃尔在TPC 5的洋葱状态演讲中。拉里在闪电环节的时间控制器是他的女儿Heidi Alayne Wall。有关TPC 5和O'Reilly开源大会的更多信息,请访问O'Reilly网络会议报道页面

照片由D. Story/J. Blanchard/O'Reilly网络提供

拉里谈到了Perl 5和Perl 6。他指出,许多有才华的人都投入了热情和爱心来开发Perl 5,而且Perl 5做得很好。关于Perl 5,就这么多。

Perl 6显然是拉里演讲的重点,每场闪电演讲都概述了启示录的主要观点。和以前一样,启示录反映了《骆驼书》的章节,《Perl编程》

拉里暗示他已经部分放弃了第二个启示录;第三个启示录即将发布,但拉里病了。另一方面,这给了他一个慢慢来,做好的机会。

因此,他的闪电演讲实际上从第三个启示录开始,关于操作符。拉里指出,已经有很多具体的建议,但他想集中讨论一般性。他还表示,他对用户定义操作符的想法犹豫不决,尤其是Unicode操作符。《->》将变成. - 现在开始接受这个。这意味着连接操作符将需要改变,这可能会变成~

铃声响起,因此拉里不得不转到第四个环节——控制结构。在热烈的掌声中,他宣布Perl 6将包括一个switch语句;然而,他却让人惊讶地透露,它将被称为“given”——case语句将被称为“when”。另一个值得注意的重命名:“local”将变成“temp”。

拉里重申了需要可选的类型和属性声明;这并不等同于类型,但它是一种指定变量或子程序元数据的方式。随着你向Perl提供更多关于变量的元数据,它在存储和处理方面的效率将提高。随着铃声响起,拉里正在解释90%的代码不会快多少……

正则表达式、格式、包和模块

拉里一直在考虑从正则表达式中直接向变量赋值,但他已经决定这不是真正的问题——真正的问题是人们想要从正则表达式构建匿名散列或数组结构。

将会有字符类的集合操作:例如,你将能够指定一个匹配所有字母但不包括元音的匹配。实际上,这可能会在Perl 5中实现。还有时间告诉我们,他希望默认开启/x修饰符。

接下来的演讲是关于子例程的。原型将扩展到完整的类型签名系统;闭包中不再使用sub关键字——实际上,任何不是立即可识别的花括号都将假定是一个闭包。闭包的参数将是“自我标识”的,例如 $^a$^b

拉里说格式将是一个模块,所以关于这一点他不需要再说什么了。

参考演讲以伪哈希必须消亡的声明开始;这引起了热烈的掌声。拉里重申,当标量后面跟着花括号时,将假定解引用——也就是说,现在 $foo->[$a] 将在Perl 6中简化为 $foo[$a]。这需要禁止在哈希索引前使用空格。

在数据类型方面,将会有紧凑数组;伪哈希将被不可见对象替换,这些对象具有命名参数。现在 => 运算符将创建一个对类型;范围运算符将创建一个稍微不同类型的对,该对将在需要时展开为范围。

将区分类和模块。在类或模块内部,将有子包:将不再需要键入 Myclass::SubclassA::SubclassB;就像Unix有相对路径名和目录一样,Perl将拥有可以指定为相对命名空间的模块。

关于模块的主题,模块名称将被扩展以包括有关版本和作者姓名的元数据。默认的 use 语句将允许版本和作者姓名使用通配符。还将有虚拟接口模块,以及根据模块元数据自动化的文档的改进。

对象应该容易声明并且具有可访问的元数据。当您将属性添加到模块时,它将作为类内部的变量出现;在类外部,它可以作为一个方法访问。还将有可选的多方法,以及将引用祝福为类的语法,如 Class.bless($ref)

解决关切

拉里提到重载是一个头痛的问题;你不喜欢有它的语言,也不喜欢没有它的语言。有时会无端滥用重载,例如C++的左移运算符用于向函数添加更多参数。通过指定运算符为特殊方法名称,重载系统将变得更加干净。vtable系统将被利用以提供对象的重载。还将有 printf 中的重载钩子,以便定义新的格式。

他还说,关于绑定变量的许多提案都偏离了要点;绑定的是变量,而不是值。绑定需要自然地与变量的生命周期相关联,并且为了效率,绑定需要预先声明。

他还呼吁在处理Unicode时对程序员表示同情;我们不希望强迫人们处理Unicode,如果他们不想这么做,同样我们也不希望将Unicode用户排除在外。字符串需要完全多态,内部例程能够指定它们能够处理哪种类型的字符串。规范化通常在文件句柄级别完成,类型系统必须记住某些数据是否已被规范化。

IPC演讲要求安装新协议“无痛苦”;将轻松地将高级结构化数据,如XML-RPC或SOAP,从网络映射到Perl的内部数据结构。Perl 6将继续拥有安全的信号。IPv6将得到支持。

线程模型将基本上是ithreads,这是5.6.0版本中的新模型;变量可以通过声明共享,但默认情况下不会共享。Pthread模型意味着“共享一切”。模块应该默认是线程安全的 - 它们应该在元数据中声明它们的线程安全或否则。

Perl将拥有自己的解析器,用Perl编写。这将使我们能够字节编译解析器,并且解析器可修改。它还将帮助我们移植到运行在小型虚拟机上的Perl的eval。词法分析将保持为一遍过程,子程序将在解析时立即编译。

命令行界面不会发生重大变化;只有一个RFC涉及它。Larry强调了Perl作为粘合语言的作用,以及它必须与其环境合作。

Larry也有一件不光彩的坦白;他写了Perl调试器,但几乎从不使用它 - 他更像是print-语句的人。因此,他很高兴将调试器的编写委托给其他人。然而,他指出,调试器对它在平台上运行的调试功能有很高的依赖性。

他还回避了内部细节,将这方面的细节留给明天将要讲话的Dan Sugalski。然而,他说内部将更加模块化;它们将包含一个软件CPU,正则表达式将编译成正常的Perl操作码。它将实现各种垃圾收集模型,并使用vtable来调度值上的操作。

那CPAN呢?

CPAN太大而无法下载,并且存在一个问题,即ISP从未安装足够的内容来满足用户的需求。捆绑是解决此问题的部分解决方案,但最近人们对开发Perl SDK的兴趣越来越大。

污染将通过新的属性方法实现,而沙盒将通过使用单独的解释器线程来实现。

Perl 6将尝试消除一些常见的错误:Perl 5已经在你说foreach $i (1 .. 1_000_000_000) { ... }时不占用大量内存;但Perl 6也将对@big = 1 .. 1_000_000_000;应用相同的优化。还将支持将测试嵌入到POD中。

说到POD,=begin=end将用于注释,因为现在=end将回到之前的状态而不是进入POD。Larry希望有多个POD流,指出DATA文件句柄本质上只是另一个POD流。

Perl文化在很大程度上是自我纠正的;Perl 6的宣布驱使人们更紧密地合作并修复社区的一些缺陷。然而,Larry鼓励每个人尽自己的一份力;新手友好性是一回事,但重要的是要对自己提出比对自己更高的标准。

特殊变量的清理将是在清理与便利之间进行平衡的练习。例如,$_显然会保留;另一方面,$(将消失。这使我们能够为插值表达式释放$( ... )。裸词文件句柄将消失,错误状态变量可能会合并。

内置函数。对于返回列表非常长的函数,如stat,Perl将返回模块;一些提出的数组操作符(如mergepartitionflatten等)将包含在核心中。从如system等函数的逻辑返回值将变得更加合理;select将删除。

标准Perl库将几乎全部被移除。这样做的目的是让互联网服务提供商相信Perl本身基本无用,因此他们将需要安装额外的模块。实用模块将拥有更多自由来扭曲Perl的语法和语义,并且还会提供真正的优化提示。

Larry建议标准模块库可以根据需求下载;将有一些支持基本内置功能的模块及其文档。Perl 6应该处理国际化(I18N)和本地化(L10N)问题,并支持与其类型语言相匹配的异常处理。

“还剩下35秒。有什么问题吗?”

这就是Perl 6设计的要点。在未来几个月里,我们将看到来自Damian的释义支持下的其他《启示录》内容,并希望最终看到Dan和团队的其他代码。当我们从会议中回来后,我们将为您带来Perl 6语言发展的分析!

标签

反馈

这篇文章有什么问题吗?请在GitHub上创建一个issue或pull request来帮助我们。