P5P 更新:更智能的匹配

这篇帖子将是 p5p 和社区之间新沟通渠道的一部分。我们希望利用这个平台与您分享更多内容,并保持您对最新信息的了解。

2017年12月20日,我们发布了 Perl 5.27.7,其中包含了针对 智能匹配操作符 的重大更改。从那时起,这一更改已被撤销。发生了什么?

智能匹配有着悠久的历史。它于2007年12月引入 5.10 版,并在 5.10.1 版中进行了重大修订。这是一个好主意,但最终它带来的弊大于利,以至于被认为不可靠。

在前所未有的举措中,它于2013年5月发布的 Perl 5.18.0 中被标记为“实验性”。以下是 perldelta 中对此的提及。

自 v5.10.0 版本中添加以来,v5.10.1 版本中进行了重大修订的智能匹配一直是抱怨的焦点。尽管它在某些方面是有用的,但它也证实了对于 Perl 的用户和实现者来说既麻烦又令人困惑。已经提出了一些关于如何最好地解决这个问题的方法。很明显,智能匹配几乎肯定会在未来改变或消失。不建议依赖于它的当前行为。

当解析器看到 ~~givenwhen 时,将发出警告。

从那时起,提出了各种关于如何解决它的帖子。决定的方法是大大简化语法。经过几轮讨论(其中一些是“讨论车棚”),我们才确定要简化什么,并就新行为达成一致。

去年,我们最终就重大观点达成了一致。这些更改是由核心开发者 Zefram 实施的。这项工作被发布在一个公开分支上以供评论。

在没有人提出反对意见后,Zefram 合并了新分支。它被包含在 5.27.7 开发版本中。

随着这个开发版本的发布,一些问题开始显现出来,这些变化产生了影响。相当一部分 CPAN 出现了问题,以至于一位专门的 Perl 测试员决定他们无法继续测试。随后,我们决定撤销这一更改。

出了什么问题?

首先,将智能匹配移至实验性并没有达到我们希望的效果。将功能标记为实验性是为了让我们可以自由地(就“自由”一词而言)调整和实验它们,直到我们觉得它们足够稳定。政策是,任何实验性功能都可以在两个版本没有行为变化后宣布为稳定。对于智能匹配,它是在作为稳定功能存在了多个版本之后才被标记的。

其次,更改很大。这本身并不是 necessarily 错误,但我们处理它的方式仍有改进的空间。

第三,围绕这一更改在核心邮件列表上进行沟通是不够的,以获得足够的反馈和关注问题及提出的解决方案。我们应该在列表之外发布,并寻求更多的输入和评论。我们希望利用这个平台来完成这项工作。

第四,我们可以请求我们的专门测试员帮助运行额外的、特定的测试,以查看 CPAN 上会断开连接什么,以及这一更改可能造成的损害程度。

我们下一步该怎么做?

尽管这不是从错误中学习最好的方式,但损害是最小的。新的语法和行为仅在单个开发版本中可用,没有达到任何生产代码,并在该版本中撤销。

为了再次解决smartmatch问题,我们需要反思我们的错误,并考虑通过更好地沟通变化以及获取额外反馈来重新处理。这将需要时间,目前我们并没有急于重新审视smartmatch。

我们对此造成的恐慌表示歉意,并感谢您迅速响应以解决这一问题。谢谢。

标签

Sawyer X

Sawyer X是Perl 5项目负责人(Pumpking)。他位于阿姆斯特丹,在booking.com工作。

浏览他们的文章

反馈

这篇文章有问题吗?请通过在GitHub上打开一个issue或pull request来帮助我们。