本周Perl 6动态(截至2002年7月21日周末)

又过去了一周,又是Perl 6的总结。巧妙的是,这周我从Piers那里接管了总结工作,这样我可以更容易地提及自己。这也是一个好周,因为perl6-internals比perl6-language发生的事情更多。所以,我先从这里开始...

Parrot 0.0.7

这周的大新闻是DrForr发布了Parrot 0.0.7给全世界(奇怪的是,许多开源项目都在O'Reilly开源会议之前发布代码...)。这个版本包含了一个Perl 6语法(带有小型、部分编译器!)、功能子程序、协程和延续PMCs、全局变量、中间代码编译器(imcc)、纯Perl汇编器和工作的垃圾收集。名字是Parrot。珀西·帕罗特。

http://archive.develooper.com/perl6-internals@perl.org/msg11090.html http://www.cpan.org/modules/by-authors/id/J/JG/JGOFF/parrot-0_0_7.tgz

请注意,真正的酷Perl 6编译器至少需要Perl 5.6。哦,如果你还没有看过,可以看看imcc。

复古Perl

Nicholas Clark表示,“2000年10月我相信5.005维护对于Perl 6的接受是很重要的,现在我还是这样认为”。Leopold Toetsch发送了一个针对初步Perl 6编译器的第一个补丁,使其能够在5.005_03上运行,鉴于Chip Salzenberg已经重新开始了一个新的5.005维护版本的编写工作,因此让Parrot在复古Perl上运行可能对Parrot的各个部分来说是个好事。应该不会是主要问题。

Parrot文档

上周的一个重要推动是让Parrot内部有更多的文档。编写文档对于开源项目来说一直是个问题,上周遇到了瓶颈。好消息是,Parrot中已经添加了大量新的文档。

关于文档的性质有一些讨论。结果是,内联C文档应该编写API细节,而更长的讨论(比如,算法的选择、如何避免无符号算术溢出、不同哈希算法的优缺点)将作为docs/dev目录中的.dev文件结束,就像PDD07“Perl源代码的约定和指南”所说的那样。随后还跟进了一些文档补丁。

最近邮件列表和IRC频道相当繁忙,这似乎是新推动更多文档的吸引新人的结果。额外加分!

http://archive.develooper.com/perl6-internals@perl.org/msg11080.html

MANIFESTations

Parrot的MANIFEST文件往往不会随着最近添加的内容而更新。Andy Dougherty提供了一个补丁来做到这一点。Nicholas Clark问:“CVS足够灵活,让我们可以在每次提交时运行manifest检查,并在失败时生成发送到某处的警告吗?”。Robert Spier回答说是的,并且希望他很快就能实现...

RECALL

Tanton Gibbs发布了一个补丁,清理了我们Copy on Write策略的问题。他友好地为我解释了:“基本问题是,在perlint.pmc中,我们有如下内容

  void set_string( PMC* value ) {
    CHANGE_TYPE( SELF, PerlString );
    SELF->data = value->data
  }

换句话说,在变为PerlString之后实施COW策略。然而,在perlstring.pmc中执行如下操作

  void set_string( PMC* value ) {
    SELF->data = string_copy( INTERP, value->data );
  }

RECALL命令自动化了这个过程,所以set_string现在看起来像

  void set_string( PMC* value ) {
    CHANGE_TYPE( pmc, PerlString );
    RECALL;
  }

感谢Tanton的解释。

内部其他事项

还有许多其他小的补丁和讨论。看起来这周的主要推动是让向Parrot添加新的PMCs更容易。

同时,在perl6-language

本周Perl6语言列表相对平静,这可能是好事,因为过多地思考超运算符让我头疼。

超运算符

本周对超运算符进行了一些讨论。并没有特别深入,但讨论了很多语法。在讨论类似代码时,经常出现“这段代码看起来很丑”之类的反对意见:

  @solution =  (^-@b + sqrt(@b^**2 ^+ 4^*@a^*@c) ) ^/ (2^*@a);

Luke Palmer指出,可能表达得更好如下:

  for @a; @b; @c; @s is rw ->
    $a; $b; $c; $s {
      $s = (-$b + sqrt($b**2 - 4*$a*$c)) / (2*$a)
  }

Karl Glazebrook解释说,PDL将所有内容都保持为对象,并使用超运算符魔法而不需要额外的语法。所以Perl 6中的“@y = $a ^* @x ^+ @b”在PDL中就变成了更清晰的“$y = $a * $x + $b”。PDL不是很闪亮吗?

空白符?

Brent Dax注意到,正则表达式修饰符“:w”可能存在一个问题。根据Apocalypse 5,“words modifier”会在模式中有实际空白符的地方引起隐式匹配”。他问以下内容是什么意思:

  m:w/foo [~|bar]/
  m:w/[~|bar] foo/
  m:w/[~|bar] [^|baz]/
  m:w/@foo @bar/

Luke Palmer进一步解释说:“换句话说,它将模式中的每个实际空白符序列替换为\s+(在两个标识符之间)或\s*(在其它任何地方之间)”。因此,第一个将扩展为:

  m/ foo \s* [~ | bar] /

然而,正如后续情况所指出的,这并不容易表示。他继续说:“也许:w不会转换正则表达式,但会保留正则表达式中空白符所在的位置‘标记’”。尽管如此,这仍然是一个非常实用的功能。

致谢

本摘要由O'Reilly开源会议提供,音乐来自《Buffy the Vampire Slayer》的序曲。

正如Piers所说:如果你喜欢这个,那么给YAS捐钱;如果你不喜欢,嗯,你也可以给他们捐钱;也许他们会用这笔钱聘请更好的作家。或者你也可以写一篇竞争性的摘要。

标签

反馈

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