📅 2026 年 7 月
⚠️ 基于原始来源,已核实 — 分享前请检查最新信息


如果 Pike、Thompson 和 Griesemer 是创造 Go 的人

Russ Cox 则是让 Go 从 Google 内部的一门语言成长为全球开发者共同使用的生态系统的人。他编写了 gofmt,设计了 Go modules,提出了 Minimal Version Selection 算法,撰写了兼容性承诺,目前担任 Go tech lead——决定 Go 未来走向的人。

每次你输入 go build 后,它在几秒内完成工作,这一切都归功于 Cox。


来自 MIT 的 Plan 9 少年

在同龄人使用 Windows 或 Mac 的时代,Russ Cox 使用的是 Plan 9——由 Rob Pike、Ken Thompson 和 Dennis Ritchie 在贝尔实验室创建的操作系统。

他每天都把它当作主力操作系统使用。

在 MIT 就读期间,Cox 直接与 Pike 合作参与 Plan 9 项目,共同撰写了论文《Security in Plan 9》(USENIX 2002),当时他还是一名学生。

但随着 Web 变得重要,Plan 9 缺乏可用的网页浏览器。

与其迁移到其他操作系统,Cox 做了优秀程序员该做的事:将整个 Plan 9 系统移植到 Unix

plan9port 是在 Linux 和 macOS 上运行的 Plan 9 用户空间。你可以在普通机器上使用 acme 编辑器、sam 编辑器、rc shell、plumber——Plan 9 的所有工具。

直到今天,Cox 仍将 Acme 作为主力编辑器。

正是这一点让 Pike 注意到了他:“这个孩子对 Plan 9 的理解足以将整个系统移植过来。”


Google Code Search 与 RE2

Cox 在 MIT 攻读博士期间曾在 Google 实习。

让他为人所知的作品是 RE2——他为 Google Code Search 编写的正则表达式引擎。

传统正则引擎的问题在于灾难性回溯:某些模式可能需要数分钟、数小时甚至导致崩溃,因为回溯算法存在指数级的最坏情况。

Cox 利用自己在研究中掌握的自动机理论,设计了 RE2,保证始终 线性时间,无论模式多么复杂。

自 2006 年起,RE2 已在 Google 生产环境使用——Google Code Search、Google Sheets,后来成为 Go 标准库中的 regexp 包。

他撰写的三篇文章已成为正则表达式领域的经典参考:《Regular Expression Matching Can Be Simple And Fast》、《Regular Expression Matching: the Virtual Machine Approach》、《Regular Expression Matching in the Wild》。


2008 年——Pike 邀请加入 Go 团队

当 Cox 即将完成 MIT 博士学位(论文《An Extension-Oriented Compiler》)时,Pike 邀请了他。

Pike 说:“我们正尝试将 Plan 9 开发软件时所热爱的一切,带到 Google 的软件开发中。你愿意加入吗?”

Cox 回答:“Yeah, of course。”

他成为 Go 团队的第四位成员,紧随 Pike、Thompson 和 Griesemer 之后。


gofmt——第一个项目

Cox 在 Go 团队的第一个任务是 gofmt

2009 年 12 月,他撰写博客文章宣布 gofmt——自动将 Go 代码格式化为统一风格的工具。

这看似微不足道,却是 Go 历史上最明智的决策之一。

在 gofmt 之前,Go 团队曾为括号是否与 if 在同一行、缩进用 tab 还是空格、逗号后是否留空格等问题争论不休。

有了 gofmt 后,这些问题永远消失了。

如今,全球所有 Go 项目看起来都一模一样,无论你阅读的是 Google、初创公司还是开源贡献者的代码。


go 命令——你每天都在用却从未思考过它

Cox 设计了 go 命令——go buildgo testgo get——你每天输入的所有命令。

但真正改变 Go 的成果是 Go modules


Go Modules——Go 生态系统的转折点

在 Go 1.11 之前,Go 的依赖管理是一场灾难。

go get 直接从版本控制系统拉取代码,没有版本管理、没有锁定文件。一个项目的依赖可能悄无声息地升级,导致另一个项目崩溃。

2018 年 2 月,Cox 发布了 vgo——他独自编写的 Go modules 原型。

随后他做了一件几乎没人做过的事:写了 10 篇博客文章解释所有决策。

  • 为什么需要语义化导入版本控制
  • 什么是 Minimal Version Selection,为什么它优于 npm 的 SAT solving
  • 可重现构建如何工作
  • Go 的版本控制原则

Minimal Version Selection (MVS) 是 Cox 提出的算法。它不试图像 npm(使用 SAT 求解器且耗时很长)那样找到“最佳版本组合”,而是选择满足所有模块要求的最低版本。

结果:go mod tidy 仅需 2 秒完成,而不是解析依赖树需要数分钟。

Go modules 成为 Go 1.13 的标准,并在 Go 1.16 成为默认选项。


Go 兼容性承诺——10 年前的代码仍可编译

2023 年 8 月,Cox 撰写了博客文章《Backward Compatibility, Go 1.21, and Go 2》。

文章的开篇句成为 Go 的格言:

"Boring is good. Boring is stable. Boring means being able to focus on your work, not on what's different about Go."

Cox 维护 Go 的兼容性承诺,审查所有可能破坏向后兼容性的更改。

试想一下:2012 年的代码无法在 2026 年的编译器上编译,除非进行修改。

Go 能做到这一点,是因为 Cox 和团队将兼容性奉为圭臬。


透明决策

Cox 改变 Go 团队工作方式的不仅是代码,更是流程

他设计了 Go 提案流程——所有重大变更都必须通过 GitHub 上的公开提案,并附带设计文档说明问题、备选方案和理由。

他写了 6 篇博客文章解释这一流程:《Clarity & Transparency》、《Large Changes》、《Scaling Discussions》、《Enabling Experiments》、《Representation》。

没有“房间里最聪明的人做决定”。从 Go 1.0 到现在,Go 的每一项决策都有文字记录。

这就是 Cox 所说的“为软件工程服务的语言设计”——语言设计不是天才的艺术,而是有流程、有理由、有记录的工程。


哲学

Cox 的 GitHub 简介写道:"Go Hacker. Mistake maker."

他从不假装无所不知,这正是最令人敬佩之处。

在 2018 年的 GoTime 访谈中,他谈及最初的期望:

"My hope was that maybe a few people would notice, and ideally whatever the next big language to come along would steal the concurrency and the interface ideas from Go, and that would be our tiny little contribution to making programming a little bit better. Obviously, that didn't happen, but I'm okay with how it turned out instead."

“希望有几个人注意到”——而 Go 后来成为全球生产环境使用的语言。


Cox 的另一面——数学家

Cox 不仅仅是 Go 工程师。

他是 OEIS 基金会主席(Online Encyclopedia of Integer Sequences)——世界上最大的整数序列数据库。自 1964 年以来,数学家和计算机科学家一直使用 OEIS 作为参考。

他 2024-2026 年的博客文章主要关于浮点数格式化——深入到《Pull a New Proof from Knuth's Fixed-Point Printer》和《Fast Unrounded Scaling: Proof by Ivy》这样的级别。

他使用 Rob Pike 编写的类 APL 计算器语言 Ivy 来证明数学算法的正确性。

这就是同一个人:一天设计 Go modules,另一天用形式化证明验证浮点格式化器的正确性。


其他成果

在 Go 之前,Cox 有许多其他成果:

  • Vx32 沙箱系统(USENIX 2008)
  • Vivaldi 网络坐标系统(SIGCOMM 2004)——无需测量每对节点即可找到分布式系统中的延迟
  • Xoc 可扩展编译器(ASPLOS 2008)

在 Go 之后:

  • Go 内存模型——撰写文章解释 Go 的内存模型和硬件内存模型(2021-2022)
  • 透明遥测——Go 工具链的透明使用数据收集系统(2022)
  • Go 的协程——Go 协程提案(2023 年 7 月)
  • xz 后门分析——分析 xz 库后门的时间线(2024)

今天

Cox 仍是 Go tech lead,在 Google Cambridge, MA 工作,每天使用 Acme 编辑器。

他在 research.swtch.com 上定期撰写博客,已有 150+ 篇文章且持续增加。

2024-2026 年:撰写 Go Changes、Go Testing By Example、浮点格式化系列、基于哈希的二分调试、差异覆盖率等文章。

他不是拥有上万观众的主题演讲者,但每次他撰写内容,Go 团队和社区都会阅读。


Cox 与泰国程序员

2 秒内完成的 go mod tidy 是 Cox 的功劳。

让所有 Go 项目代码风格一致的 gofmt 是 Cox 的功劳。

让 2012 年的 Go 代码在 2026 年仍可编译的兼容性承诺是 Cox 的功劳。

以及“透明决策、记录理由”的文化——成为 Go 社区 DNA 的东西——是 Cox 创造的。


总结

Rob Pike、Ken Thompson、Robert Griesemer 是创造 Go 的人。

而 Russ Cox 是让它存活下来的人。


来源:swtch.com/~rsc, research.swtch.com, go.dev/blog, GoTime #77, github.com/rsc, github.com/google/re2, pdos.csail.mit.edu/~rsc