Go 语言的下一个大版本:Go 2.0
引言
今年 8 月 Go 开发团队公布了 Go 2.0 的设计草案,包括错误处理和泛型这两大主题。现在备受瞩目的 Go 2.0 又有了新动向 —— Go 开发团队在其官方博客表示,Go 2 已经被安排上了!目前 Go 2 已进入确定变更提案的阶段,并公布了提案评估流程。
废话不多说,先来看看 Go 2.0 有哪些值得关注的内容:
- 最大程度保持对 1.x 的兼容,以避免分裂 Go 语言生态系统
- 采用增量升级的方式,而非单独发布重大更新版本
- 实施新的提案评估流程,以评估尚未解决且被标记为提案的 issue
- 将会在 Go 1.13 版本中选择 Go 2 部分的提案
背景
早在2022年12月30日的 GopherCon 大会上,Russ Cox(Go 核心开发团队的技术 leader)就已经正式开始思考 Go 的下一个大版本。当时官方非正式地将它称为 Go 2,但我们知道,所谓的 Go 2.0 并非一个单独的重大更新版本,而是通过“增量更新(incremental)”的方式以逐渐抵达 "Go 2.0"。所以本文对这个未来版本的称号 —— 也暂且用 Go 2 来描述。
Go 1 和 Go 2 之间的主要区别在于主导权的不同。谁将影响设计,又该如何做出决策?我们都知道,Go 1 的诞生是小团队努力的结果,受外部影响不大;而到了 Go 2,尤其是经过将近 2022年12月30日的发展后,Go 语言的生态已经十分庞大,因此它也更多地受到社区的驱动和影响。经历了这些,Go 开发团队也了解到了更多一开始不知道的与语言特性和库相关的知识 —— 这些都来自于 Go 社区的反馈。
2022年12月30日,Go 开发团队引入了提案流程,以收集特定类型的反馈:针对语言和库变更方面的提案。由 Go 开发团队高级成员组成的委员会定期审查、分类和决定社区提交的提案。这个流程十分有效,但作为该过程的一部分,他们忽略了所有不向后兼容的提案,只是将其标记至 Go 2。到了2022年12月30日,Go 开发团队也停止进行任何类型的向后兼容的“增量”语言特性变更,因为他们认为无论变更多么小,都要有更全面的支持计划,并将 Go 2 考虑在内。
对于这些累积下来的提案,官方表示现在是时候采取行动了!
近况
本文发布时,官方表示目前在 Go 2 的提案中,大约有 120 个尚未解决且被标记为提案的 issue。这些提案都涉及到重要的库或语言特性变更,而它们通常不能与 Go 1 互相兼容。Ian Lance Taylor 和 Robert Griesemer 一直在研究这些提案,并对它们进行了分类(Go2Cleanup, NeedsDecision 等),以理解这些提案背后的含义并使它们后续更易进行。此外,他们还合并了相似的提案,并关闭了那些看似明显超出 Go 范围的提案,或者其他方面无法实现的提案。
早期出现的两个提案包括更好的错误处理和泛型,而它们的草案已在今年的 GopherCon 大会上发布,等待更多的探索发展。至于剩余的提案,官方提到,他们不希望过度影响数百万 Go 开发者以及现在的 Go 代码,更不想冒着分裂生态系统的风险去改版 Go 2,因此 Go 2 无法做出太多变更,每一个变更都需要仔细选择。为此,这些提案都将使用新的提案评估流程来决定去留与发展。
提案评估流程
提案评估流程旨在收集对少数选定提案的反馈意见,以作出最终决定。这个过程或多或少会与发布周期并行进行,包括以下步骤:
- 提案选择:Go 开发团队选择少量看起来值得考虑接受的 Go 2 提案,但尚未做出最终决定。
- 提案反馈:Go 开发团队将发布一份列出所选提案的公告,公告会向社区解释提案的初衷并收集反馈意见。在这个步骤中,社区可提出建议。
实现:根据来自社区的反馈意见,提案开始实现。
针对所实现的提案的反馈:在开发周期中,Go 开发团队和社区试用新功能并且收集进一步的反馈意见。
启动决策:在三个月的开发周期结束时,根据在发布周期中收集的经验和反馈意见,Go 开发团队会考虑变更的预期收益或产生的额外成本,从而最终决定是否发布每个变更。一旦发布,这些被发布的提案就成为语言和库的一部分。未被发布的提案可能会重新起草,但也有可能会被永久拒绝。
可以看到,通过两轮的反馈过程,可对提案进行有效的筛选,从而防止“功能蔓延(feature creep)”,有助于保持 Go 语言的简洁。
提案选择标准
一项提案至少要满足以下这些条件:
- 解决大部分使用者觉得重要的问题
- 不会对其他使用者造成太大的影响
- 提供一个清晰且易于理解的解决方案
条件1确保提案所做的任何变更都可以帮助到尽可能多的 Go 开发者(使他们编写的代码更健壮、正确性更高等),条件2则保证了变更将给使用者带来的影响降到最低。
至于条件3,如果提案不能满足该条件,它将不会被实现。即便这项提案能够解决一个很重要的问题,思路也很好,但在没有实现方案的情况下,它将会被拒绝,并需要重新起草。
下一步
在这篇文章发布时,Go 开发团队表示已经执行提案评估流程的第一步,并开始了流程的第二步,。
对于 Go 开发团队已经明确并通过的提案,将会继续实现(即评估流程的第3步)。开发团队表示希望在下一个发布周期的第一天完成这些提案变更的实现,所以这次可能会在较早的时间开始进行,以留出两个月的反馈时间。
而在为期3个月的开发周期中,被选择的提案将会被实现,每位使用者都可以体验新功能并进行反馈(评估流程的第4步)。
最后,在短暂的冻结期后,Go 开发团队会最终决定是否永久保留新功能(并保证这些功能与 Go 1 兼容),或是放弃这些功能(评估流程的最后一步)。
Go 开发团队表示这是首次采用这一流程,因此在冻结阶段将会是反思这个流程,并在必要时进行调整的好机会。我们也不妨拭目以待吧!
Go 语言的下一个大版本:Go 2.0的更多相关文章
- Go 语言的下一个大版本:Go 2.0 被安排上了(全面兼容1.X,改进错误处理和泛型这两大主题)
今年 8 月 Go 开发团队公布了 Go 2.0 的设计草案,包括错误处理和泛型这两大主题.现在备受瞩目的 Go 2.0 又有了新动向 —— 昨日 Go 开发团队在其官方博客表示,Go 2 已经被安排 ...
- solaris X86-64下一个ORACLE战斗11.2.0.3.8在一波折叠补丁
solaris X86-64下一个ORACLE战斗11.2.0.3.8补丁: 正确的步骤: 1.BUG6880880 .OPATCH补丁 2.BUG16902043.11.2.0.3.8补丁 情感是练 ...
- AngularJS - 下一个大框架
AngularJS AngularJS是web应用的下一个巨头. AngularJS如果为创建web应用而设计,那它就是HTML的套路了.具有数据绑定, MVW, MVVM, MVC, 依赖注入的声明 ...
- 抢先学鸿蒙(HarmonyOS)2.0,你就是下一个大咖!
1. 你不知道的鸿蒙(HarmonyOS) 2020年9月10日,华为开发者大会发布了鸿蒙(HarmonyOS)2.0.我在2020-9-11日也发布了全球首套鸿蒙2.0 App开发视频课 ...
- 迅雷程浩:企业外包服务,下一个大的风口?(2B业务一定要懂销售和营销的人,这点和2C 不一样)
我今年暑假去了趟硅谷,一天去一个朋友的公司拜访,发现这公司没有前台,前台桌子上放了一个显示器.我刚进去,显示器里的老印就跟我打招呼 "How may I help you?" 事后 ...
- LeetCode 31. Next Permutation (下一个排列)
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- Swift3.0语言教程获得一个公共的前缀
Swift3.0语言教程获得一个公共的前缀 Swift3.0语言教程获得一个公共的前缀,当在一个程序中有多个字符串时,我们需要判断是否有两个字符串有公共的前缀时,是很困难的.在NSString中的co ...
- nuget使用经验:复杂依赖关系下的包版本问题
背景 之前同事问到过1个关于nuget包被多层引用后,最终生效的版本的问题.当时通过在项目中重新安装了一次nuget包解决了. 现在来重新复盘一下当时的场景,顺便把这种场景下nuget处理逻辑分享给大 ...
- Go将统治下一个10年?Go语言发展现状分析
“本文是国内Go语言大中华区首席布道师——许式伟,在QCon2015上海站上的分享.他预测Go语言10年内一定会超过C和java,并且统治这一个10年. Go语言语法及标准库变化 Go从1.0版本到现 ...
- 【RMAN】RMAN跨版本恢复(下)--大版本异机恢复
[RMAN]RMAN跨版本恢复(下)--大版本异机恢复 BLOG文档结构图 ORACLE_SID=ORA1024G 关于10g的跨小版本恢复参考:http://blog.chinaunix.net/u ...
随机推荐
- .NET中全新的MongoDb ORM框架 - SqlSugar
.NET中好用的MongoDb ORM很少,选择也很少,所以我打造了一款适合SQL习惯的MongoDb ORM,让用户多一个选择. 1. MongoDB ORM教程 1.1 NUGET 安装 SqlS ...
- Elastic学习之旅 (12) .NET 6应用集成ES - 下
大家好,我是Edison. 上一篇:.NET集成ES进行CRUD 写在开头 在.NET应用中集成ES一般涉及两个方面: (1)将ES当存储用,类似于MongoDB,做文档的增删查改,这一类操作偏CRU ...
- C# 关于WinForm 中的自带控件 chart1 竖形统计图 使用。
百度查了好久都每找到自己想要的效果 经过一天头痛的摸索终于弄出来了,关键在于Points /// <summary> /// 更新图像图 /// </su ...
- ttl串口wifi模块
串口无线模块ZLSN7046T是上海卓岚推出的wifi转串口模块.它能够将wifi信号转化为串口信号,且支持多种功能,邮票孔封装,体积小巧可以外置天线或者内置天线.7046T支持一个UART TTL电 ...
- idea部分操作(一)----持续更新
07:51:101.IDEA正确设置编码统一为UTF-8: 这样可以整体修改.
- 痞子衡嵌入式:i.MXRT1170使用FlexSPI 2nd引脚组连接串行NOR Flash启动时FDCB需特殊设置
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170使用FlexSPI 2nd引脚组连接串行NOR Flash启动时FDCB需特殊设置. 最近痞子衡在支持一个 RT11 ...
- RMF Computation of Rotation Minimizing Frames 实现
简介 本文实现了, 局部标架沿着曲线旋转最小. 参考链接 https://github.com/merendaz/topo-blend/blob/42bef6f34b86ae73981938380e1 ...
- win11正式版摄像头被禁用如何解除的问题
有很多雨林木风官网的小伙伴,都已经升级win11正式版系统了.但是,有小伙伴在电脑上使用摄像头时发现它被禁用了,导致无法正常打开的情况.那么要如何解除禁用呢?本文中,雨林木风小编就来分享设置方法,希望 ...
- Windows11系统如何使用虚拟桌面的问题
有很多电脑基地的小伙伴都不知道,在win11系统特有一个叫虚拟桌面的功能.这个功能能够实现多个桌面运行不同的软件,而且相互之间不会互相影响,非常方便.特别在玩游戏的时候,可以随时切换桌面,使用方便.那 ...
- 深度技术解决win11居中任务栏图标变小的方法
相信很多深度技术的用户都已经安装了win11系统,而win11系统带来的全新界面包括任务栏也进行了改变,有不少的用户使用的时候都感觉任务栏的图标太大了不习惯,为此我们就给大家带来把win11系统居中任 ...