Go 博客
贡献者峰会
引言
在 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
的默认值,这意味着用户只需将 Go 的 bin 目录添加到他们的 $PATH
中即可开始使用 dep。
dep 可能带来的另一个未来的可用性改进是允许 Go 在任何目录(而不仅仅是 GOPATH 中的工作区)下工作,这样人们就可以使用他们习惯于使用其他语言的目录结构和工作流程。将来也可能通过引导用户将 bin 目录添加到其路径中,甚至自动化该过程来简化 go install
。有许多不错的选项可以使 Go 工具链更易于使用,讨论很可能会在邮件列表上继续进行。
标准库
我们围绕 Go 语言未来进行的讨论大多包含在 Russ Cox 的博客文章:迈向 Go 2 中,所以我们继续讨论标准库环节。
作为标准库和子仓库的贡献者,这个环节对我来说特别有趣。哪些内容应该放在标准库和子仓库中,以及它们可以改变多少,是一个没有明确定义的话题。当 Go 团队可能没有在特定主题领域拥有专业知识的成员时,维护大量包可能会很困难。要对标准库中的包进行关键修复,必须等待 6 个月才能发布新版本的 Go(或者在出现安全问题时必须发布一个点版本,这会消耗团队资源)。更好的依赖管理可能有助于将一些包从标准库迁移到拥有自己发布计划的独立项目中。
会议还讨论了一些难以通过标准库中的接口实现的事情。例如,如果 io.Reader
接受一个 context,以便可以取消阻塞的读操作,那就太好了。
在确定标准库将发生哪些变化之前,需要更多经验报告。
工具和编辑器
为编辑器提供语言服务器是工具环节的一个热门话题,许多人主张 IDE 和工具开发者采用通用的“Go 语言服务器”来索引和显示代码及包的信息。由于微软的 语言服务器协议(Language Server Protocol) 在编辑器和 IDE 中得到广泛支持,因此被建议作为良好的起点。
Jaana Burcu Dogan 还讨论了她在分布式追踪方面的工作,以及如何更容易地获取运行时事件的信息并将其附加到追踪中。有人提议建立一个标准的“计数器” API 来报告统计数据,但在设计这样的 API 之前,需要社区提供具体的经验报告。
贡献者体验
当天的最后一个环节是贡献者体验。第一个讨论完全围绕着如何使当前的 Gerrit 工作流程对新贡献者更容易,这已经导致了几个仓库文档的改进,并影响了几天后的新贡献者研讨会!
会议还考虑了如何更容易找到要完成的任务,赋予用户在 issue 跟踪器上执行“园艺”任务(如分类、清理 issue)的能力,以及如何更容易找到审阅者。希望在接下来的几周和几个月里,我们能在这些以及贡献过程的许多其他方面看到改进!
分组讨论
下午,参与者分成更小的组,对上午环节的一些主题进行更深入的讨论。这些讨论有更具体的目标。例如,一个小组致力于识别经验报告中有用的部分,并列出记录 Go 用户经验的现有文献清单,最终形成了经验报告的维基页面。
另一个小组讨论了 Go 中错误的未来。许多 Go 用户最初对 error
是一个接口这一事实感到困惑或不理解,而且很难在不遮盖诸如 io.EOF
等哨兵错误的情况下向错误附加更多信息。分组讨论探讨了在即将发布的 Go 版本中可能修复其中一些问题的具体方法,以及在 Go 2 中可以改进错误处理的方式。
社区
除了技术讨论,这次峰会还为来自世界各地经常交流和合作的一群人提供了面对面会面的机会,许多情况下是第一次见面。没有什么能替代面对面的交流来建立相互尊重和同志情谊,这对于背景和想法各异的多元化群体需要聚集在一起在一个社区中工作至关重要。休息期间,Go 团队成员分散在贡献者中,既讨论 Go,也进行了一些轻松的社交,这真正有助于我们将那些每天审阅我们代码的名字与面孔联系起来。
正如 Russ 在迈向 Go 2 中讨论的那样,有效的沟通需要了解你的受众。将广泛的 Go 贡献者聚集在一个房间里,帮助我们更好地理解 Go 受众,并就 Go 的未来展开了许多富有成效的讨论。展望未来,我们希望更频繁地举办此类活动,以促进交流和社区意识。





照片由 Steve Francia 拍摄