/【译】Rob Pike认为Go成功的5件事

Created Tue, 30 Aug 2022 10:40:51 +0800 Modified Wed, 31 Aug 2022 18:28:49 +0800
2227 Words

原文链接

俗话说……历史不会重演,但经常押韵。

如果您想创建成功的编程语言(或至少了解您的可能如何),那么向其他人学习的人来说,这是非常有价值的。在Go Time#100上,Rob Pike和Robert Griesemer(Go的两个创作者)坐下来讨论该语言的成功。

这是罗布·派克(Rob Pike)在演出中的成功归因于该语言的成功。

1.他们写了正式的规范

Rob在给出该项目的起源故事时说

但这是规范发生的时候。是的,几个星期。所以我们真正开始了六个月左右的头脑风暴和近似塑造。我们做的第一件重要的事情之一–也许是我们做的第一件重要的事情–是我们写了一个正式的语言规范,我认为这是项目成功的一个关键部分。

最重要的事情之一是伊恩·泰勒(Ian Taylor)也在谷歌(Google),他看到了这个规范,并决定他想为它写一个编译器。所以有一天,他走进我们的办公室,说:“哦,顺便说一下,我已经为你的语言写了一个编译器。” 这对我们来说是一个惊人的时刻。当然,他成为了团队的一员,现在他还在为Go工作。

来源

该规范获得伊恩·兰斯·泰勒(Ian Lance Taylor)等工程师的最初兴趣。

(巧合的是,伊恩(Ian)最近也在演讲中谈论他在泛型方面的工作。)

2.他们吸引了杀手级应用程序

遗憾的是,Rob并没有对他们如何在早期吸引Docker进行评价。我猜是通过使语言……对系统程序员有吸引力?

是的,Docker是我们的杀手级应用,因为它是用Go写的,运行良好,而且它成为现在所谓的云计算的核心……我们过去只是称之为系统编程,或服务器。事实上,其中一项关键技术是用Go写的,这对很多人来说证明了该语言的目的……我认为它实际上是一种非常好的语言;这正是我们在编写该语言时考虑的事情,尽管我们自己并没有这样做。

后来,Kubernetes也出现了,这次是来自谷歌。但是,拥有用你的语言编写的重要软件是使一种语言成功的一个真正重要的部分。如果什么都不写,那么语言再好也没有用。

来源

3.他们成立了一个开源社区

Rob坦率地谈到了他们在开源世界中遇到的挑战,这令人耳目一新。

我确实认为,团队并没有真正准备好与开源社区互动,以及这意味着什么。伊恩是我们中唯一一个在开源世界花了很多时间的人,而他做的事情比他在社区的份额要多。

我们花了很长时间来理解成为开源社区的一部分意味着什么,拥有一个基本上由公司支付的项目,但有很多开源的贡献者……实际上,我们很早就有很多奇妙的开源开发。移植到Windows是完全由外部贡献者完成的,这非常好……而社区的投入一直很关键。

我认为有时人们认为谷歌控制得太多了,这是他们的观点,但我不同意;我认为他们低估了团队对开源社区所说的话的倾听程度,阅读了所有的问题,处理得非常好……有时不那么好,但随后它被修复。

当有成千上万的人的时候,这是一件非常具有挑战性的事情,现在相信世界上有数百万Go程序员。他们对这件事都有自己的看法,如何倾听,但也要确保你保持项目的灵魂–我不认为这有什么简单的答案。我认为很多人认为这是微不足道的,你只是接受每个人想要的东西……但那样你就不会有Go,你会有完全不同的东西。这真的很棘手,这是一个非常困难的平衡行为。

来源

4.他们使语言难以改变

这一点起初有点违反直觉。通常对于软件来说,可塑性是一种美德,而僵化是一种诅咒。然而,Rob很好地解释了为什么翻转剧本对Go这样的编程语言如此重要。

好吧,我们让它难以改变。我们特意为Go1写下,我们承诺不做任何改变。这对这门语言的成功至关重要,因为它使企业相信我们所做的事情和对我们的依赖不会破坏他们的东西……而这使得改变变得更加困难。我认为很多人不理解我们对该合同的热情。我们没有破坏人们的程序,尽管它现在是一个十年前的项目。这只是一个令人难以置信的负担,但它对于让我们达到现在的位置至关重要。来源

5.他们坚持使用他们相信的功能

当Jon Calhoun问及社区的反馈以及团队对改变的抵制是如何起作用时,Rob说。

Go的一些功能对它的成功很重要,但人们并不喜欢,我们对此也很有意见。我想你提到的那个未使用的变量的编译错误就是其中之一。这很烦人–你忘记删除一个未使用的变量,你的程序就会被编译。但对我们来说,这也是我们试图讲述的故事的一部分,那就是制作一种语言,尽可能地保证更好的代码质量,尽管我们不能阻止你写坏的代码……但我们可以确保不会有东西溜进来,使你的构建速度变慢,或者你的代码更难维护。

我认为真正让人抓狂的是你不允许导入一个你不使用的库。这对我们来说是非常重要的,因为我们花了很多时间来处理大量二进制文件的缓慢构建,确保你的程序的依赖性正是你所需要的,而不是更多;这对我们来说是非常重要的,但对很多人来说,每次你进行编辑并删除一个打印语句或其他东西,编译器就会说 “你没有使用这个库。我不会再为你编译了”。

后来Brad写了一个叫goimports的东西,它是gofmt的一个变种,可以为你管理导入,这就基本平息了这种抱怨。正如通常的情况一样,自动化可以摆脱很多抱怨。

来源