Go 之父 Rob 发话:Go 泛型步子不能迈太大

共 1310字,需浏览 3分钟

 ·

2021-10-16 00:10

早上看到 Go 创始人之一 Rob Pike 发了一个 issue:go: don't change the libraries in 1.18[1]有人发文说了这件事。然后立马看到有人问:Go1.18 没有泛型了?

首先要明确,Go1.17 就包含了泛型的核心代码,只是默认不启用,循序渐进。

那 Rob 这个 issue 是什么意思?不贴原文了,说一下大概意思。

Go1.18 版本,因为泛型的引入,会是该语言自创建以来变化最大的一次。语言层面支持泛型,但不少功能需要库的支持。这有两个层面的问题:

  • 已有库如何更好的支持泛型;
  • 增加新库让泛型更好用;

这两方面,之前都有相关 issue 讨论,比如:proposal: bytes: add Grow, Clip; maybe add bytes/strings Insert, Delete[2]、增加 slices 和 maps 包等。

这些是迟早要做的事情。不过 Rob Pike 认为,如果这些事情都在 Go1.18 做,一下子加入太多东西,难免会有问题,甚至可能是库的设计问题。引入新的库,大家没有任何使用经验,设计是否合理?但 Go 一直保证兼容性,如果处理不好,因为兼容性,处理起来会很费劲。

因此,Rob 建议,应该先将新库放入 golang/x/exp 下面(之前就存在这个 exp),方便大家进行使用、体验、测试,然后反馈,Go Team 可以根据大家的反馈,进行调整。一旦经过一段时间的检验,更多人认可了,再合入主仓库。

从该 issue 下面的评论看出,大家对这个决定还是很支持的。泛型来得晚,是因为 Go 官方很谨慎,一直在努力寻找更好的方案。现在终于要来了,也不能操之过急,最后阶段得稳住,平滑过渡。临门一脚得踢稳当。

应该基本确定,Go 1.18 发布时,标准库不会有过大的变化。

参考资料

[1]

go: don't change the libraries in 1.18: https://github.com/golang/go/issues/48918

[2]

proposal: bytes: add Grow, Clip; maybe add bytes/strings Insert, Delete: https://github.com/golang/go/issues/48594




往期推荐


我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。


坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio

浏览 49
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报