Go 语言之父 Rob Pike 在澳大利亚悉尼举行的 GopherCon AU 大会上,为纪念 Go 编程语言发布 14 周年 ( 2009 年 11 月 10 日) 发表了一场演讲,主题旨在回顾: "我们做对了什么以及做错了什么 (What We Got Right, What We Got Wrong)"。
Pike 分享了许多关于 Go 早期历史的内部记忆,以及在开发过程中有关一些重要因素的见解。不过他也声明称,本次发言仅代表个人观点,与 Go 团队或谷歌没有关系。
"Go 过去是、现在仍然是一个敬业的团队和一个庞大的社区所付出的巨大努力。所以如果你同意我说的任何话,请感谢他们。如果你不同意,可以责怪我,但请不要说出来。"
Pike 补充到,编程语言的好坏在很大程度上是一个见仁见智的问题,而不是事实。在 2022 年发表的一篇讨论了 Go 流行原因的文章中,Pike 与 Ken Thompson、Russ Cox、Robert Griesemer 和 Ian Lance Taylor 曾共同指出,Go 是专门为并发和并行性而设计的,在处理大规模工作负载的同时利用了新的多核芯片的强大功能。但他们也将 Go 的成功归功于其持续的“以开发为中心的理念”,以及其蓬勃发展的社区及其贡献(包括新包)。
在演讲中 Pike 再次提到了这个主题表示,“我们最初的目标不是创造一种新的编程语言,而是创造一种编写软件的更好方法.....如果我当时不花 45 分钟来构建二进制文件,Go 就不会出现。”
简而言之,Pike 指出,Go 是一种编程语言,但也不仅仅是一种编程语言。它的目的是帮助提供一种开发高质量软件的更好方法。时至今日,这仍然是它的目标;Go 是一个让生产软件的开发更简单、更高效的项目。
出人意料的是,Pike 在例举 Go 语言的成功之处时,首先提及的是吉祥物 (Go gopher ),并将之誉为 Go 成功的最早因素之一、对 Go 的发展至关重要。他认为,呆萌有趣辨识度高的吉祥物很好的团结了社区氛围,为社区参与项目奠定了基调 —— 即卓越的技术与真正的乐趣相结合。
但对于以 CC 许可发布 Gopher 的设计,Pike 则坦言,这"也许不是最好的选择",如果再重来一次他们会慎重考虑。
在提到 Go 语言发展过程中所做出的一些正确决策时,Pike 提到了:确保 Go 易于解析,此举反过来又使得创建 IDE 等工具以及 Go 的官方语言服务器 gopls(也提供 IDE 功能)变得容易;以及为编译器添加了自动测试和代码审查工具。其他还包括:
- gofmt 自动格式化工具
- Go 的软件包库
- 发布了 Go 语言的正式规范
- 在早期就发布了 Go 语言的兼容性保证,等等。
此外,Pike 还透露了一些他期待出现的功能,包括:允许使用任意精度的整数,他认为这将消除一整类安全隐患;以及希望看到编译器对 Go 的动态接口进行更多自动检查,并检查资源共享可能导致的进度停滞死锁。"任何能让程序在编译时更安全的东西都是好东西。"
Pike 指出,Go 语言的另一个关键之处在于它的可移植性;也就是说,它可以轻松地为其他平台编译代码。这在一定程度上得益于 Ken Thompson 用 C 语言编写的编译器,尽管其他人认为编译器应该用 Go 本身编写(或使用 LLVM 中的工具)。Pike 也将该编译器描述为“an odd duck”,但无论如何,他认为这对于当时的处境来说是一个正确的选择。直到 2015 年,Russ Cox 编写了一个工具,可以将编译器从 C 半自动编译为 Go。
而有关 Go 最具影响力的决定 —— “并发”。在分享这一故事时,Pike 首先描述了 2002 年自己刚加入 Google 时的世界。在他的记忆中,彼时的谷歌似乎一直在回避进程线程的并发执行,甚至采取"几乎完全禁止"的态度,这也让他感到很苦恼。
“自 20 世纪 70 年代以来,我一直在做类似并发的事情,甚至是在无意识的情况下”。事实上,除了 Pike 外,当时许多其他语言、论文甚至书籍都写过关于并发编程的内容,并表明并发编程可以做得很好。只是当时的并发还没有成为主流理念,Go 的诞生部分就是为了解决这个问题,而它最终也成为了 Go 最大的亮点之一。
"回顾过去,我认为可以公平地说,Go 在 让编程世界相信并发是一个强大的工具(尤其是在多核网络世界中)方面发挥了重要作用,并且它可以比 pthread 做得更好。如今,大多数主流语言都对并发提供了良好的支持。但在当时,这让 Go 看起来像是一种新事物......Go 对并发的支持是一个主要的吸引因素,它帮助增加了早期的采用率,吸引了那些之前没有使用过并发但对其可能性很感兴趣的程序员"。
Pike 认为,这是一个绝对成功的举措,Go"帮助普及了并发作为服务器软件结构的一种方式"。
最后,Pike 简洁的总结了一些促使 Go 成功的因素,“最重要的是,我们得到了 Gophers 这个乐于助人、多元化社区的大力支持。”
更多详情可查看博客。