近日,Go 语言创始人之一 Rob Pike 在 Github 上发表评论引发关注。据悉,他已在 Go 代码仓库提交了一个 issue (#48918),反对在 Go 1.18 的标准库中引入泛型支持,建议不要改动 Go 1.18 中的标准库。
Rob 提出以上建议主要有两个依据:
其一,是因为改动范围过大,可能会出现差错。Rob 表示,Go 语言 1.18 版本很可能包括自创建以来对语言的最大变化——参数多态性,俗称泛型。
尽管语言的变化已经以某种形式进行了十多年,但是库的变化是非常新的,且暂时没有设计使用新类型的经验和依据。当然,多年来 Go 语言团队已经对此做了很多工作。
关于核心库将如何适应等议题,目前也已经有很多讨论(例如请参见#45955和#48594,还有其他的,而且肯定会很快出现。)
其二,是缺乏实战经验。Rob 指出,如何在标准库中使用这些泛型是需要深思熟虑计划的。如果现在将它们放入库中,会给发布增加了很大的负担。
可以在生产中进行测试,在一两个周期内进行更改、调整和发展,让整个社区试用,只有通过测试,才会将它们转移到主回购协议中进入主仓库。也就是说,有了一、两个版本的实际使用,且积累了足够的经验之后,再考虑更新标准库也不迟。
另外,由于泛型的兼容性承诺使得任何细节出错的成本相当高,Rob 团队先等待、观察和学习。
因此,Rob 建议暂时不要在 Go 1.18 修改标准库。可以继续为切片、贴图、通道等设计、构建、测试和使用新的库,先在 golang.org/x 或 golang.org/exp 提供相关库的泛型版本。
最后,Rob 忠告称:“我意识到每个人都想从新的语言功能中获得乐趣,并期待着解决核心库中的一些问题,这些问题一旦出现就会变得不那么笨拙,但我坚信,现在最好放慢速度。谨慎使用、学习、学习和行动。”