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
接受一个上下文,那么阻塞读取操作就可以被取消。
在确定标准库将发生哪些变化之前,需要更多的 经验报告。
工具和编辑器
在工具会议中,供编辑器使用的语言服务器是一个热门话题,许多人主张 IDE 和工具开发人员采用通用的“Go 语言服务器”来索引和显示有关代码和包的信息。建议使用 Microsoft 的 语言服务器协议 作为良好的起点,因为它在编辑器和 IDE 中得到了广泛的支持。
Jaana Burcu Dogan 还讨论了她关于分布式跟踪的工作,以及如何更容易地获取有关运行时事件的信息并将其附加到跟踪中。有人提议使用标准的“计数器”API 来报告统计信息,但需要来自社区的具体经验报告才能设计出这样的 API。
贡献者体验
当天最后一场会议是关于贡献者体验的。第一次讨论完全是关于如何让新贡献者更容易使用当前的 Gerrit 工作流,这已经导致几个库的文档得到改进,并影响了几天后举行的新的贡献者研讨会!
会议还讨论了如何更容易地找到要完成的任务,如何授权用户在问题跟踪器上执行维护任务,以及如何更容易地找到审阅者。希望在未来几周和几个月内,我们将看到贡献过程的这些和更多领域的改进!
分组讨论
在下午,参与者分成更小的群体,更深入地讨论上午会议中的一些主题。这些讨论有更具体的目标。例如,一个小组致力于确定经验报告的有用部分以及记录 Go 用户体验的现有文献列表,这产生了经验报告 维基页面。
另一个小组考虑了 Go 中错误的未来。许多 Go 用户最初会对 error
是一个接口感到困惑或不理解,并且在不掩盖像 io.EOF
这样的信号错误的情况下,很难将更多信息附加到错误。分组讨论讨论了在即将发布的 Go 版本中可能修复其中一些问题的具体方法,还讨论了如何在 Go 2 中改进错误处理。
社区
除了技术讨论之外,峰会还为一群来自世界各地的人们提供了一个机会,他们经常在一起交流和工作,并亲身会面,在许多情况下,这是他们第一次见面。没有什么比面对面的时间更能建立相互尊重和同志情谊了,这对于一个拥有不同背景和想法的多样化群体来说至关重要,他们需要走到一起,在一个社区中共同努力。在休息期间,Go 团队成员分散在贡献者中,进行关于 Go 的讨论和一些一般的社交活动,这确实帮助我们认识了每天审核我们代码的人。
正如 Russ 在 走向 Go 2 中所讨论的那样,有效的沟通需要了解你的受众。将广泛的 Go 贡献者样本聚集在一个房间里,帮助我们所有人更好地了解 Go 受众,并开启许多关于 Go 未来的富有成效的讨论。展望未来,我们希望举办更多类似的活动,以促进讨论和社区意识。
照片由 Steve Francia 拍摄