Go 博客

贡献者峰会

Sam Whited
2017 年 8 月 3 日

引言

在 GopherCon 前一天,一群 Go 团队成员和贡献者齐聚丹佛,讨论并规划 Go 项目的未来。这是此类活动首次举办,是 Go 项目的一个重要里程碑。本次活动包括一个上午的会议,围绕主题进行的集中讨论,以及一个下午的会议,由小组圆桌讨论组成。

编译器和运行时

编译器和运行时会议始于关于将 gc 及相关工具重构为可导入包的讨论。这将减少核心工具和 IDE 的开销,IDE 可以嵌入编译器本身进行快速语法检查。代码也可以完全在内存中编译,这在不提供文件系统的环境中很有用,或者在开发过程中持续运行测试以获得实时的故障报告。未来很可能会在邮件列表中就是否继续这项工作进行更多讨论。

关于弥合优化汇编代码和 Go 之间差距的讨论也很多。Go 中大部分加密代码为了性能都用汇编编写;这使得调试、维护和阅读变得困难。此外,一旦您开始编写汇编,通常就无法再调用 Go,这限制了代码的重用。用 Go 重写将使维护更容易。添加处理器内建函数和对 128 位数学的更好支持将提高 Go 的加密性能。有人建议,即将推出的 1.9 版本中的新 math/bits 包可以为此目的进行扩展。

对于不熟悉编译器和运行时开发的人来说,这对我来说是当天最有趣的会议之一。我学到了很多关于当前世界状况、存在的问题以及人们希望从这里走向何方的信息。

依赖管理

在从 dep 团队获得项目状态的快速更新后,依赖管理会议转向了当 dep(或类似 dep 的东西)成为主要的包管理方式时,Go 世界将如何运作。为了让 Go 更容易上手,并且让 dep 更容易使用,相关工作已经开始。在 Go 1.8 中,引入了 GOPATH 的默认值,这意味着用户只需在开始使用 dep 之前将 Go 的 bin 目录添加到他们的 $PATH 中。

dep 可能带来的另一个未来的可用性改进是允许 Go 从任何目录(而不仅仅是 GOPATH 中的工作区)工作,以便人们可以使用他们习惯于与其他语言一起使用的目录结构和工作流程。未来也可能通过引导用户将 bin 目录添加到其路径中,甚至自动化此过程,来简化 go install 的过程。有很多好的选择可以使 Go 工具更容易使用,并且讨论很可能会在邮件列表中继续进行。

标准库

我们关于 Go 语言未来讨论的大部分内容已包含在 Russ Cox 的博客文章《迈向 Go 2》中,所以让我们继续讨论标准库会议。

作为标准库和子仓库的贡献者,这次会议对我来说特别有趣。标准库和子仓库包含什么,以及它们可以改变多少,这是一个没有明确定义的主题。Go 团队要维护大量的包,而他们可能并没有任何特定领域的专业知识,这可能很困难。要对标准库中的包进行关键修复,必须等待 6 个月才能发布新版本的 Go(或者在安全问题的情况下必须发布补丁版本,这会耗尽团队资源)。更好的依赖管理可能会促进一些包从标准库迁移到其自己的项目,并拥有自己的发布周期。

关于标准库接口难以实现的功能也进行了一些讨论。例如,如果 io.Reader 接受一个 context,以便可以取消阻塞的读取操作,那就更好了。

在我们可以确定标准库将发生哪些变化之前,需要更多的经验报告

工具和编辑器

用于编辑器的语言服务器是工具会议上的热门话题,许多人主张 IDE 和工具开发人员采用通用的“Go 语言服务器”来索引和显示有关代码和包的信息。微软的 语言服务器协议被建议作为一个良好的起点,因为它在编辑器和 IDE 中得到了广泛支持。

Jaana Burcu Dogan 还讨论了她在分布式跟踪方面的工作,以及如何更容易地获取运行时事件信息并将其附加到跟踪中。有人提议提供一个标准的“计数器” API 来报告统计信息,但在设计这样的 API 之前,需要来自社区的具体经验报告。

贡献者体验

当天的最后一场会议是关于贡献者体验的。第一次讨论是关于如何让当前的 Gerrit 工作流程对新贡献者来说更容易,这已经促使了几个仓库的文档改进,并影响了几天后举行的“新贡献者研讨会”!

更容易找到要处理的任务,让用户能够对问题跟踪器执行整理任务,以及更容易找到审阅者也被考虑在内。希望在未来几周和几个月内,我们能看到这些以及更多贡献流程方面的改进!

分组讨论

下午,与会者分成小组,对上午会议的一些主题进行了更深入的讨论。这些讨论有更具体的目标。例如,一个小组致力于识别经验报告中有用的部分,以及一份记录 Go 用户经验的现有文献列表,从而创建了经验报告维基页面

另一个小组考虑了 Go 中错误的未来。许多 Go 用户最初对 error 是一个接口感到困惑或不理解,并且在不遮蔽 sentinel 错误(如 io.EOF)的情况下添加更多错误信息可能很困难。分组讨论了在即将发布的 Go 版本中可能解决这些问题的一些具体方法,以及在 Go 2 中如何改进错误处理。

社区

除了技术讨论之外,峰会还为一群来自世界各地经常交流和合作的人们提供了一个面对面交流的机会,在许多情况下是第一次。面对面的交流对于建立相互尊重和友谊感至关重要,这对于一个拥有不同背景和想法的多元化群体齐心协力在一个社区中工作来说是不可或缺的。在休息期间,Go 团队成员分散到贡献者中,就 Go 相关话题和一些一般性社交进行交流,这真正帮助我们认识了那些每天审查我们代码的名字。

正如 Russ 在《迈向 Go 2》中讨论的那样,有效沟通需要了解你的听众。让一群 Go 贡献者聚集在一起,帮助我们所有人更好地理解 Go 的受众,并开始了许多关于 Go 未来的富有成效的讨论。展望未来,我们希望举办更多此类活动,以促进交流和社区意识。

摄影:Steve Francia

下一篇文章:贡献者研讨会
上一篇文章:迈向 Go 2
博客索引