本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 1641|回复: 2
打印 上一主题 下一主题

采访:Go 语言编程

[复制链接]
跳转到指定楼层
1#
发表于 2013-1-18 11:39:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

作者 Jeff Martin译者侯伯薇发布于 2012年12月21日

领域语言 & 开发主题Google Go

Go语言是由Google在2009年11月份公布的,它的目标是要应对软件开发所面临的最新挑战Go语言特别被设计为快速(包括在编译时)、支持多核的语言,并且兼顾了动态语言的简单性和静态类型语言的安全性Mark Summerfield最近出版了《Go语言编程》一书,目的是要帮助当前的程序员学习Go语言。InfoQ最近有幸和Mark一起讨论了Go语言和他的著作

InfoQ:你喜欢Go语言的哪些特点?

Mark Summerfield: Go语言有很多特点我都非常喜欢,其中最主要的是:
  • 像闪电一样快的编译这使得编辑/编译/运行的周期和Python的编辑/运行周期一样快
  • 非常高级的并发。你可以很轻松地使用Go语言编写并发程序,而不会有任何显式的锁另外,goroutine通过操作系统线程多路传输的方式,这意味着,如果你的算法最好以成千上万个并发线程来表示,那么你就可以创建那么多goroutine——而对于线程,通常最好不要创建过多
  • 无初始化和垃圾回收。这让我们避免了整整两类错误的发生,让编码更简单。
  • 语言本身非常小,让一般的程序员就可以掌握当考虑模板语言的时候,C++98/03已经不是一般程序员所能接受的, 而C++11更大,也更复杂。与它们相比,Go语言:
  • 使用了新奇的方式来实现面向对象我发现这种方法很有趣。
  • 对Unicode的支持我非常喜欢Go语言让你可以使用原生UTF-8或者使用根据你想要的来使用Unicode字符的方式。

InfoQ:你不喜欢Go语言的哪些特点?

Mark: 最初我不喜欢它的错误处理方法(返回错误值作为唯一或者最后一个返回值),因为我不习惯使用这样的异常处理方式然而,现在我非常乐于使用它了。
我还忘了说操作符重载IMO这个大程序包(针对big.Int和big.Rat类型)很难使用,因为你无法对操作符重载另外,尽管Go缺少泛型,但那只是针对于类库编写者的问题由于Go拥有其它语言特性,所以不太需要泛型,比方说它对“<”的操作符重载对于定义自定义的数据类型就非常好

InfoQ:从你作为作者的经历看,我发现你已经撰写了好几本关于Python的书这两种语言相比,你的感觉如何? Go的那些方面让你想念Python? 相对而言,Go的哪些方面让你可以忘记Python?

Mark: 我要说,总体上看来,Python 3是我最喜爱的语言然而,Go是我最喜欢的编译型语言
我知道很多Python程序员都已经试过Go,但是从个人来说,如果他们想要的是更好的性能,那么最好使用numpy,如果想要快速的算法,可以使用Cython
Go想要成为21世纪的C语言,当然我认为时间会验证,Go会成为一种非常有影响力的语言我确信它会导致其他语言至少增加CSP类库来支持Go样式的并发。
在语言和标准库方面,Go已经比C更令人惊奇了然而,C拥有很多很多第三方类库(尽管使用cgo包我们也可以在Go中使用它们)。
我认为Go拥有足够的高级特性,可以吸引那些想要更高性能更好的并发模型以及更自由许可的Java程序员。
我还认为Go可以替换C++ 11,为C++程序员提供很多内容Go的标准类库比C++更小——但是实际上包含了更多实用的现实功能。当然,C++程序员会发现Go语言没有它们所习惯的一些东西——但是在几秒钟或者几分钟内完成编译,而不是花费几十分钟甚至几个小时会让我们更有生产力,并且Go要比C++更易于维护,因为它是一种更小更易于理解的语言。当然,Go并不是C++,在三点上还是有区别的(C预处理程序,它没有scope的概念;C++运行时语言;C++编译时语言,即模板)
此外,Go程序会编译成单一的可执行文件,而没有任何外部依赖。这使得部署——比方说,在一个组织中所有计算机上——更容易,不需要担心所有计算机是否都拥有相同的类库
Go语言即让大家感到熟悉(在C家族中),并且还在关键问题上(面向对象、并发错误处理、轻量级语法)采取了非常先进的标准,这使得Go非常值得学习,至少我认为是主流编程中可选的一种方法

InfoQ:非常感谢你对Go做出的与其他语言的比较,特别是描述了与C++11相比,它是如何降低了复杂度你是否发现C++11也做出了足够重大的变化,会导致现有的程序员在拥有足够自由度的时候考虑转换到Go语言?

Mark: 尽管我认为从C++98/03到C++11的发展历程表示有机会可以重新评估并转换到Go语言,但是我认为大多数人实际上不会那么做C++需要在学习上投入很多。我猜想很多程序员会继续使用C++11的子集,而不是更换语言,特别是对于比C++11小的语言(那样看起来特性也比较少)当然也会有些人转换到Go语言,特别是那些拥有能够从Go的高级并发模型中受益的应用程序的人。
使用C++98/03我们已经有一种形势,很多程序员使用语言的特定子集,让他们感到很舒服当两位或更多使用不同子集的C++程序员必须一起工作,或者维护不是他们编写的C++代码的时候,就会导致问题我认为C++11会显著地放大这个问题
Java的设计要比C++更简单,并在很多方面都很成功。Go是要设计成更好的C,所以我期望它会赢得更多C程序员(对他们来说全都是收获)而不是C++程序员(对他们来说既有收获,也会失去一些特性,像泛型)

InfoQ: 你对Go语言的简洁性大加赞赏,但是否有一些你认为应该增加的特性呢? (可能会期望增加操作符重载和泛型

Mark: 我认为你可能需要操作符重载,而不需要泛型但是我认为唯一真正缺少的是排序的映射表(ordered map)(尽管我在书中提供了对左倾红黑树的Go实现作为例子,它也填补了特定的空白)

InfoQ: 你在书的目录中还特别说明了专利流氓的危险是什么让你包含这项内容呢? 你是否认为有必要提醒大家意识到这个问题,或者是特定的什么事情?

Mark: 我一点儿也不喜欢专利:我认为那是反竞争的,并且大公司会比小公司更喜欢它对于软件,版权就已经足够了。我之所以包含了附录,是因为现在我已经开始听说有些程序员开始从美国的市场(例如编写iOS程序的人们)撤回软件,因为不那么做的话,就需要给专利流氓支付“保护费”软件专利使得个人程序员或者小团队更难竞争,我认为这不仅仅是可耻,而且在道德上是错误的。
在过去的几年间,我对商业化软件有一些看法:利基(niche)产品会很有用,而不是大规模的销售团队然而,我并不准备付出时间,因为我主要的市场还是美国,对于我来说冒着花费时间和精力的风险,而只是让专利流氓能够“偷到”更多东西,是非常不经济的

原文:http://www.infoq.com/cn/articles ... C8C8B0362120BDD7958

ChinaGDG.com
回复

使用道具 举报

2#
发表于 2013-1-18 21:42:23 | 只看该作者
话说你有没有学Go语言。。
ChinaGDG.com
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2013-1-19 10:56:43 | 只看该作者
Duking 发表于 2013-1-18 21:42
话说你有没有学Go语言。。


准备从SAE转到GAE,Go还木有
ChinaGDG.com
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表