大家好,我是煎鱼。
在国外的播客节目 Go Time #100 中,Rob Pike 和 Robert Griesemer(Go 的两位创始人)和主持人 Jerod Santo 探讨了 Go 语言的胜利原因和一些思考。
如果你想发明一门胜利的编程语言,向曾经做到的人学习是十分有价值的。
欢送对 Go 感兴趣的小伙伴一起围观!
0. 阐明
Rob Pike 将其归为了 5 个方面,在主持人 @Jerod Santo 的分享下造成了这篇《5 things Rob Pike attributes Go’s success to》文章,与播客的内容绝对应。
目录如下:
- 他们写了一份正式的标准。
- 他们吸引了杀手级利用。
- 他们启动了一个开源社区。
- 他们使语言难以扭转。
- 他们保持应用他们置信的性能。
1. 他们写了一份正式的标准
在介绍 Go 我的项目的起源时,Rob 说:
“
但这就是标准产生的时候。是的,几个星期。所以咱们真的开始了六个月左右的头脑风暴和近似塑造。
咱们做的第一件重要的事件——兴许是咱们做的第一件重要的事件 —— 是 咱们编写了语言的正式标准,我认为这是我的项目胜利的要害局部。
其中最重要的事件之一是 Ian Taylor 也在 Google,看到了标准,并决定为它编写一个编译器。
有一天他走进咱们的办公室说:“哦,顺便说一句,我曾经为你的语言编写了一个编译器。”那对咱们来说是一个了不起的时刻。
当然,他成为了团队的一员,当初他仍在钻研 Go。
“
该标准最后引起了 Ian Lance Taylor 等工程师共事的趣味。
2. 他们吸引了杀手级利用
可怜的是,Rob 并没有阐明他们晚期是如何吸引 Docker 的。我猜,通过使语言……对程序员有吸引力?🤷♂️
“
是的,Docker 是咱们的杀手级应用程序,因为它是用 Go 编写的,运行良好,并且成为当初所谓的云计算的外围……咱们过来只称其为零碎编程或服务器。
其中一项关键技术是用 Go 编写的,这一事实证明了该语言对很多人的目标是正确的……而且我认为它实际上是一种十分好的语言。这正是咱们在将语言放在一起时正在思考的事件,只管咱们本人并没有这样做。
起初 Kubernetes 是另外呈现的,其诞生来自谷歌。然而,领有用你的语言编写的重要软件是用一种语言取得成功的一个十分重要的局部。
如果什么都没有写,那么语言有多好并不重要。
”
3. 他们启动了一个开源社区
Rob 坦率地谈到了他们在开源世界中面临的挑战,这令人耳目一新。
“
我的确认为团队并没有真正筹备好与开源社区互动以及这意味着什么。Ian 是咱们当中惟一一个在开源世界中破费大量工夫的人,他所做的超出了他在社区工作中应有的份额。
咱们花了很长时间才了解成为开源社区的一部分意味着什么,领有一个基本上由公司领取的我的项目,但有很多开源贡献者 …… 咱们实际上有很多很棒的开源倒退很早就产生了。Windows 的移植齐全由内部贡献者实现,这太棒了……社区的投入至关重要。
我认为有时人们认为谷歌管制它太多,这是他们的意见,但我不批准;我认为他们低估了团队对开源社区所说的话、浏览所有问题、解决得很好……有时不是很好,但起初它失去了修复。
当有成千上万的人时,这是一件十分具备挑战性的事件,而当初它被认为是世界上数百万的 Go 程序员。他们对这件事都有本人的认识,以及如何聆听,但也要确保你放弃我的项目的灵魂正确 —— 我认为没有任何简略的答案。
我认为很多人认为这是微不足道的,你只是承受了每个人都想要的货色 …… 然而你不会有 Go,你会领有齐全不同的货色。这真的很辣手,这是一个十分艰难的均衡行为。
“
4. 他们使语言难以扭转
这个一开始有点违反直觉。通常对于软件,延展性是一种美德,而僵化则是一种咒骂。然而,Rob 很好地解释了为什么不这么做,对于像 Go 这样的编程语言是如许的重要。
“
好吧,咱们很难扭转。咱们特意为 Go 1 写下了咱们承诺不会扭转任何货色。这对语言的胜利至关重要,因为它使企业可能置信咱们正在做的、依赖咱们的 Go,并不会毁坏他们的货色……这使得做出扭转变得更加艰难。我认为很多人不观赏咱们对这份合同的激情置信。
咱们没有毁坏人们的程序,只管它当初是一个有十年历史的我的项目。这只是一个令人难以置信的累赘,但让咱们达到当初的地位至关重要
”
这里指的是 Go1 兼容性保障。
5. 他们保持应用他们置信的性能
当 Jon Calhoun 询问社区反馈以及团队对改革的抵制如何与之抗衡时,Rob 说:
“
Go 的某些性能对其胜利很重要,但人们并不喜爱,咱们对此十分闪烁其辞。
我认为您提到的未应用变量的编译谬误就是其中之一。这很烦人 —— 你遗记删除一个未应用的变量,你的程序就会无奈编译。但对咱们来说,这是咱们试图讲述的故事的一部分,也就是:编写一种尽可能保障更好代码品质的语言,即便咱们无奈阻止你编写蹩脚的代码……但咱们能够确保不会让你的构建速度变慢或代码更难保护的事件产生。
我认为真正让人们发疯的是:你不容许导入你不应用的库。这对咱们来说十分重要,因为咱们花了很多工夫用大量二进制文件进行迟缓构建,确保程序的依赖项正是您须要的,仅此而已;这对咱们来说十分重要,但对很多人来说,每次你进行编辑并删除打印语句或其余货色时,编译器都会说“你没有应用这个库。我不会再持续编译你了。”
而后 Brad 写了一个叫做 goimports 的货色,它是 gofmt 的一个变种,能够为你治理导入,这简直打消了这类埋怨。
通常状况下,自动化能够解决很多埋怨。
“
文章继续更新,能够微信搜【脑子进煎鱼了】浏览,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言能够看 Go 学习地图和路线,欢送 Star 催更。
Go 图书系列
- Go 语言入门系列:初探 Go 我的项目实战
- Go 语言编程之旅:深刻用 Go 做我的项目
- Go 语言设计哲学:理解 Go 的为什么和设计思考
- Go 语言进阶之旅:进一步深刻 Go 源码
举荐浏览
- goto 语句让 Go 代码变成意大利面条?
- 太疯狂了,Go 程序说 nil 不是 nil…