2012 QCon:Go是互联网时代的C语言

由InfoQ主办的全球顶级技术盛会QCon 2012 于4月18日到4月20日在北京隆重召开,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。本次大会上,上海七牛信息技术有限公司创始人许式伟发表了主题为“Go,互联网时代的C语言”的专题演讲。
  语言的选择已经非常之多。偏系统级的语言大多为静态类型语言,例如C,C++,Java,C#,Delphi;也有偏快速业务开发的语言,大都为动态类型,例如PHP,Python,Perl,Ruby,JavaScript;还有面向特定领域的,例如R和Matlab。

  那么,为什么我们需要Go这样一门新语言呢?这门语言究竟肩负着怎样的使命而面世?最初,Go语言官方自称是一门系统级语言。之所以开发Go语言,是因为“近10年左右开发程序之难让我们有点沮丧”。Go语言这一定位暗示了希望取代C和Java地位,成为最流行的语言。在 2000年前的单机时代,C语言是编程之王。随着机器性能的提升,软件规模与复杂度的提高,Java逐步取代了C的位置。尽管看起来Java已经深获人心,但Java编程的体验并未尽如人意。历年来的编程语言排行榜显示,Java语言的市场份额在逐步下跌,并趋近于 C 语言的水平。这对于Java来说是非常尴尬的。作为一个现代化的语言,拥有众多C语言无法企及的特性,但似乎市场并不买账。也许挺Java的公司非常之多,有钱的如 IBM、Oracle(Sun)之类,亦无法改变这个局势。
      Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。Go是谷歌2009发布的第二款编程语言.2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用 Go Logo的一种BASIC语言.
  Go语言的作者们很清楚,C++真的没啥值得参考的,他们要学习的是C语言。C语言经久不衰的根源是它足够简单。Go语言也要足够得简单。那么,互联网时代的C语言需要哪些东西呢?
  首先,并行与分布式支持。多核化和集群化是互联网时代的典型特征。作为一个互联网时代的C语言,必须要让这门语言操作多核与计算机集群如单机一样容易。其次是软件工程支持,工程规模不断扩大是产业发展的必然趋势。单机时代语言可以只关心问题本身的解决。互联网时代的C语言还需要考虑软件品质保障、团队协作相关的话题。最后,编程哲学的重塑。计算机软件经历了数十年的发展,形成了多种学术流派,有面向过程编程、面向对象编程,函数式编程、面向消息编程等等。这些思想究竟孰优孰劣,众说纷纭。什么才是最佳的编程实践?
  在本次演讲中,我们将来看下Go作为互联网时代的C语言,是如何应对这些问题的。
  Go语言在服务器上的标准库是最多的。在谈及并行与分布式支持时,许式伟表示,多核化和集群化是互联网时代的典型特征,作为一个互联网时代的Go语言,必须要让这门语言操作计算机集群如单机一样容易。
  轻量级进程应成为语言最重要的执行单元
  通讯
  在软件工程方面,Go是第二个将代码风格强制统一的语言。
  If expression
  {
  }
  在错误处理规范方面,函数允许返回多个值、error类型
  Go的特性列表
  Go目前为止有两个编译器,一个是按照Plan 9 风格编写的,另一个是Gcc Go,尽管两个编译器相较其他语言的编译器已经非常快了,但是其中Plan 9风格的速度比Gcc Go还要快上5倍。
  Go语言支持类、类成员方法、类的组合、反对集成、反对虚函数、放弃构造函数和析构函数、更好的接口.Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
  从编程哲学角度来看,Go语言是变革派,不是改良派。面向过程编程、面向对象编程、函数式编码、面向消息编程等等、Go语言融合众家之长、极力维持语言特性的简洁。Go语言和C++、Java、C#有着完全不同的设计哲学。既然函数重载带来了负担、并且这个特性并不对解决任何问题有显著的价值,那么Go就不提供它。