关于golang:Google-大佬们为什么要开发-Go-这门新语言

45次阅读

共计 2018 个字符,预计需要花费 6 分钟才能阅读完成。

大家好,我是煎鱼。

大家平时都是在用 Go 语言,那以往曾经有了 C、C++、Java、PHP。Google 的大佬们为什么还要再开发一门新的语言呢?

难不成是造轮子,其余语言不香吗?

背景

Go 编程语言构思于 2007 年底,构思的目标是:为了解决在 Google 开发软件基础设施时遇到的一些问题。

图上三位是 Go 语言最后的设计者,功力都十分的深厚,按序从左起别离是:

  • Robert Griesemer:参加过 Google V8 JavaScript 引擎和 Java HotSpot 虚拟机的研发。
  • Rob Pike:Unix 操作系统晚期开发者之一,UTF-8 创始人之一,Go 语言吉祥物设计者是 Rob Pike 的媳妇。
  • Ken Thompson:图灵奖得主,Unix 操作系统晚期开发者之一,UTF-8 创始人之一,C 语言(前身 B 语言)的设计者。

遇到的问题

已经在晚期的采访中,Google 大佬们反馈感觉 “ 编程 ” 太麻烦了,他们很不喜爱 C++,对于当初工作所用的语言和环境感觉比拟丧气,充斥着许多不怎么好用的个性。

具体遭逢到的问题。如下:

  • 软件简单:多核处理器、网络系统、大规模计算集群和网络编程模型所带来的问题只能临时绕开,没法侧面解决。
  • 软件规模:软件规模也产生了变动,明天的服务器程序由数千万行代码组成,由数百甚至数千名程序员进行工作,而且每天都在更新(据闻 Go 就是在等编译的 45 分钟中想进去的)。
  • 编译耗时:在大型编译集群中,构建工夫也缩短到了几分钟,甚至几小时。

设计目标

为了实现上述指标,在既有语言上革新的话,须要解决许多根本性的问题,因而须要一种新的语言。

这门新语言须要合乎以下需要:

  • 目标:设计和开发 Go 是为了使在这种环境下可能进步工作效率
  • 设计:在 Go 的设计上,除了比拟出名的方面:如内置并发和垃圾收集。还思考到:严格的依赖性治理,随着零碎的倒退,软件架构的适应性,以及逾越组件之间边界的健壮性。

这门新语言就是当初的 Go。

Go 在 Google

Go 是 Google 设计的一种编程语言,用于帮忙解决谷歌的问题,而 Google 的问题很大。

Google 整体的应用软件很宏大,硬件也很宏大,有数百万行的软件,服务器次要是 C++ 语言,其余局部则是大量的 Java 和 Python。

数以千计的工程师在代码上工作,在一个由所有软件组成的繁多树的 “ 头 ” 上工作,所以每天都会对该树的所有档次进行重大扭转。

一个大型的定制设计的分布式构建零碎使得这种规模的开发是可行的,但它依然很大。

当然,所有这些软件都在几十亿台机器上运行,这些机器被视为数量不多的独立、联网的计算集群。

简而言之,Google 的开发规模很大,速度可能是迟缓的,而且往往是蠢笨的。但它是无效的。

Go 我的项目的指标是:打消 Google 软件开发的迟缓和蠢笨,从而使这个过程更富有成效和可扩大。这门语言是由编写、浏览、调试和保护大型软件系统的人设计的,也是为他们设计的

因而 Go 的目标不是为了钻研编程语言的设计,而是为了改善其设计者及其共事的工作环境。

Go 更多的是对于软件工程而不是编程语言钻研。或者换个说法,它是为软件工程服务的语言设计。

痛点

当 Go 公布时,有些人宣称它短少被认为是古代语言的必要条件的特定性能或办法。在不足这些设施的状况下,Go 怎么可能有价值?

咱们的答案是:Go 所领有的个性能够解决那些使大规模软件开发变得艰难的问题。

这些问题包含:

  • 构建速度迟缓。
  • 不受管制的依赖关系。
  • 每个程序员应用不同的语言子集。
  • 对程序的了解不透彻(代码可读性差,文档不全等)。
  • 工作的重复性。
  • 更新的老本。
  • 版本偏移(version skew)。
  • 编写主动工具的难度。
  • 跨语言的构建。

纯正一门语言的单个性能并不能解决这些问题,咱们须要对软件工程有一个更大的认识。因而在 Go 的设计中,咱们试图把重点放在这些问题的解决方案上。

总结

软件工程领导了 Go 的设计。

与大多数通用编程语言相比,Go 的设计是为了解决咱们在构建大型服务器软件时接触到的一系列软件工程问题。这可能会使 Go 听起来相当爽朗和工业化。

但事实上,整个设计过程中对清晰、简略和可组合性的关注反而导致了一种高效、乏味的语言,许多程序员发现它的表现力和力量。

为此产生的 Go 个性包含:

  • 清晰的依赖关系。
  • 清晰的语法。
  • 清晰的语义。
  • 绝对于继承的组合。
  • 编程模型提供的简略性(垃圾收集、并发)。
  • 简略的工具(Go 工具、gofmt、godoc、gofix)。

这就是为什么要开发 Go 的由来,以及为什么会产生如此的设计和个性的起因。

你学会了吗?:)

若有任何疑难欢送评论区反馈和交换,最好的关系是相互成就 ,各位的 点赞 就是煎鱼创作的最大能源,感激反对。

文章继续更新,能够微信搜【脑子进煎鱼了】浏览,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言能够看 Go 学习地图和路线,欢送 Star 催更。

参考

  • 翻译和修整《Go at Google: Language Design in the Service of Software Engineering》
正文完
 0