走过的11个年头

2020-11-11 01:46:40

今天,我们庆祝Go开源版本的11岁生日。我们为Go 10岁生日举办的派对似乎是一个遥远的记忆。这是艰难的一年,但我们一直在不断地开发,积累了相当多的亮点。

今年2月,GO 1.14发布了第一个正式的“生产就绪”的GO模块实现,同时还有许多性能改进,包括更快的延迟和非合作式的Goroutine抢占,以减少调度和垃圾收集延迟。

3月初,我们发布了一个新的协议缓冲区API,google.golang.org/Protobuf,它对协议缓冲区反射和自定义消息的支持有了很大改进。

当疫情来袭时,我们决定暂停春季的任何公开发布或发布,因为我们意识到每个人的注意力都理所当然地属于其他地方。但我们继续努力,我们的一名团队成员加入了苹果和谷歌在隐私保护暴露通知方面的合作,以支持全球范围内的联系人追踪工作。在5月份,该组织推出了参考后端服务器,用Go编写。

我们继续改进GOPL,这使得许多编辑都支持先进的Go-Aware。今年6月,VSCode Go扩展正式加入Go项目,现在由开发GOPL的开发人员负责维护。

同样在6月份,由于您的反馈,我们也将pkg.go.devas背后的代码开源,这也是Go项目的一部分。

6月晚些时候,我们发布了最新的泛型设计草案,以及一个原型工具和泛型平台。

7月份,我们发布并讨论了三个未来更改的新设计草案:new//go:为文件选择、文件系统接口和构建时文件嵌入构建行。(我们将在2021年看到所有这些内容,如下所示)。

8月份,Go 1.15发布的主要是优化和错误修复,而不是新特性。最重要的是开始重写链接器,使其运行速度提高20%,在大型构建时平均减少30%的内存使用。

上个月,我们进行了一年一度的围棋用户调查。一旦我们分析了结果,我们就会在博客上公布。

围棋社区和其他所有人一样,已经适应了“虚拟优先”,今年我们看到了许多虚拟会议和十几场虚拟围棋会议。上周,围棋团队在谷歌开源直播(Google Open Source Live)上主持了围棋日(链接中的视频)。

我们也对围棋第12年即将发生的事情感到非常兴奋。本周,围棋团队成员将在GopherCon 2020上展示8项活动。在你的日历上做上标记!

《Typing[Generic]Go》,罗伯特·格里斯默(Robert Griesemer)演讲,11月11日上午10:00(美国东部);问答:上午10:30。

“What to Expect When You‘t Expect When You’t Expect”,现场录制了Go Time播客,包括Hana Kim在内的一组专家调试者,11月11日下午12点。

Michael Knyszek的演讲《Go Memory Manager的内存和CPU效率的演变》,11月11日下午1:00;问答:下午1:50。

“实施更快的延迟”,丹·斯卡尔斯(Dan Scales)的演讲,11月11日下午5:10;问答:下午5:40

《Go Team-Ask Me Anything》,现场问答,朱莉·邱,丽贝卡·斯坦布勒,拉斯·考克斯,萨米尔·阿杰马尼,范·里珀,11月12日下午3点。

“原谅中断:GO 1.14中的循环抢占”,奥斯汀·克莱门茨的演讲,11月12日下午4:45;问与答,下午5:15。

“Working With Errors”,乔纳森·阿姆斯特丹的演讲,11月13日下午1:00;问答:下午1:50。

卡门·安多(Carmen Andoh)的演讲“跨越鸿沟走向围棋:200万用户和增长”,11月13日下午5:55。

2月份,Go 1.16版本将包括新的文件系统接口和构建时文件嵌入。它将完成链接器重写,带来额外的性能改进。它还将包括对新的Apple Silicon(GOARCH=arm64)Mac的支持。

在8月份,Go 1.17版本无疑将带来更多的特性和改进,尽管确切的细节还有待商榷。它将包括一个新的x86-64基于寄存器的调用约定(不破坏现有的汇编!),这将使程序在所有方面都变得更快。(其他架构将在以后的版本中跟进。)一个肯定会包括的很好的特性是新的//go:构建行,它比当前的//+版本更不容易出错。另一个备受期待的特性是对go test命令中的模糊的支持,我们希望明年能准备好进行beta测试。

在接下来的一年里,我们将继续致力于开发对围棋模块的支持,并将它们很好地集成到整个围棋生态系统中。Go 1.16将包括我们迄今最流畅的围棋模块体验。我们最近的调查得出的一个初步结果是,96%的用户现在已经采用了围棋模块(一年前为90%)。

最后,我们还将逐步减少对基于GOPATH的开发的支持:任何使用标准库以外的依赖项的程序都需要一个go.mod。(如果您还没有切换到模块,请参阅GOPATH维基页面,了解从GOPATH到模块之旅的最后一步的详细信息。)

从一开始,围棋模块的目标就是将包版本的概念添加到围棋开发者和我们的工具的工作词汇表中,以实现对整个围棋生态系统中的模块和版本的深度支持。围棋模块镜像、校验和数据库和索引都是通过这种对包版本是什么的全生态系统的理解而成为可能的。在接下来的一年里,我们将看到更多的工具和系统增加了丰富的模块支持。例如,我们计划研究新的工具来帮助模块作者发布新的版本(GO发行版)。在接下来的一年中,我们将看到更多的工具和系统增加了丰富的模块支持。例如,我们计划研究新的工具,以帮助模块作者发布新的版本(GO发布。

作为一个更大的例子,我们创建了gopls来减少编辑器为围棋支持而使用的许多工具(没有一个支持模块),只剩下一个支持的工具。在接下来的一年里,我们将准备好让VSCode Go扩展在默认情况下使用gopls,以获得开箱即用的出色模块体验,并且我们将发布gopls 1.0。当然,gopls最大的好处之一是它是与编辑器无关的:任何理解语言服务器协议的编辑器都可以使用它。

版本信息的另一个重要用途是跟踪构建中的任何包是否存在已知漏洞。在接下来的一年里,我们计划开发一个包含已知漏洞的数据库以及用于根据该数据库检查您的程序的工具。

Go包发现网站pkg.go.dev是由Go模块启用的版本感知系统的另一个例子。我们一直专注于获得正确的核心功能和用户体验,包括今天启动的重新设计。在接下来的一年里,我们将把godoc.org统一到pkg.go.dev.我们还将扩展每个包的版本时间表,显示每个版本中的重要更改、已知漏洞等,遵循关于添加依赖项做出明智决策的总体目标。

我们很高兴看到从GOPATH到GO模块的这段旅程即将完成,以及GO模块正在启用的所有优秀的依赖感知工具。

每个人脑海中的下一个功能当然是泛型。正如我们上面提到的,我们在6月份发布了最新的泛型设计草案。从那时起,我们继续改进粗略的边缘,并将注意力转移到实现可投入生产的版本的细节上。我们将在2021年全年致力于这一点,目标是在今年年底之前有一些东西供人们试用,或许是Go 1.18测试版的一部分。

围棋不仅仅是我们谷歌围棋团队中的一员。我们感谢与我们一起工作的围棋版本和工具的贡献者。此外,围棋之所以成功,是因为你们所有人都在为围棋蓬勃发展的生态系统工作和贡献。在围棋之外的世界里,这是艰难的一年。我们比以往任何时候都更感谢你们抽出时间加入我们,帮助围棋取得如此的成功。谢谢。我们希望你们都平安,并祝你们一切顺利。