天极传媒:
天极网
比特网
IT专家网
52PK游戏网
极客修
全国分站

北京上海广州深港南京福建沈阳成都杭州西安长春重庆大庆合肥惠州青岛郑州泰州厦门淄博天津无锡哈尔滨

产品
  • 网页
  • 产品
  • 图片
  • 报价
  • 下载
全高清投影机 净化器 4K电视曲面电视小家电滚筒洗衣机
您现在的位置: 天极网 > 开发>新闻>为什么C++程序员不想改用Go语言

为什么C++程序员不想改用Go语言

论坛2013-10-03 06:00我要吐槽

  下面是我在2012年六月旧金山Go SF会议上的发言。

  这是一个私人谈话。我不单是对在这坐的Go开发团队成员说,我要感谢团队在推动Go发展上所做的一切。我还想感谢Go SF组织者给了我跟大家交流的机会。

  几个星期前我被问道这个问题:“你被鼓励转到Go后遇到最大的惊喜是什么?”。我立刻知道了答案:虽然我们预期C++程序员会将Go当做一个替代者,然而转到Go的程序员更多来自于如Python和Ruby等语言,很少有来自C++。

  Ken、Robert和我,当我们还是C++程序员时我们设计了一种新的语言来解决我们认为需要用这门新语言来解决的问题。这好像是自相矛盾的,其他C++程序员并不在乎。

  下面是我在2012年六月旧金山Go SF会议上的发言。

  这是一个私人谈话。我不单是对在这坐的Go开发团队成员说,我要感谢团队在推动Go发展上所做的一切。我还想感谢Go SF组织者给了我跟大家交流的机会。

  几个星期前我被问道这个问题:“你被鼓励转到Go后遇到最大的惊喜是什么?”。我立刻知道了答案:虽然我们预期C++程序员会将Go当做一个替代者,然而转到Go的程序员更多来自于如Python和Ruby等语言,很少有来自C++。

  Ken、Robert和我,当我们还是C++程序员时我们设计了一种新的语言来解决我们认为需要用这门新语言来解决的问题。这好像是自相矛盾的,其他C++程序员并不在乎。

  今天我想来说说是什么激发我们创建 Go 语言,以及为什么得出这样的结论应该是意料之中的事情。我承诺这将是一段更倾向于 Go 语言而不是 C++ 语言的发言,所以即使你不了解 C++ 语言,你也可以从这篇文章中了解一二。

  实际上,这篇文章的结论可以概括如下:你认为 less is more (少即多),还是 less is less(少即少)?

  这里我用一个真实的案例作为比喻。Bell 实验室中心原来是用 3 位数字来命名的:111 是物理研究所、127 是计算科学研究所等等。在 20 世纪 80 年代,随着我们对研究的深入了解,已经不足以用 3 位数字来简单地命名研究所了。所以,我们的研究中心编号变成了 1127 。 Ron Hardin 半开玩笑地说如果我们真的了解了这个世界,我们可以去掉编号前面的 1 位,从 127 变为 27。当然,管理层不会采纳这个玩笑,也并没有被期望他们这么做。但是,我认为,Ron 的说法是有道理的。 Less can be more (精简反而有更深的内涵)。你了解得越深入,你就能够用更精炼的语言来概括。

  记住这个道理。

  回到 2007 年 9 月,我正在做一些为一个大型的 Google C++ 项目做一些琐碎而中心的工作。你可能接触过这样的程序,在我们大型分布式编译集群上编译这个程序就用了大概 45 分钟。后来,听说了在 C++ 标准委员会的 Google 工程师将会进行 C++0x(即现在的 C++11)新特性的演讲。

  在这场 1 个小时的演讲里,我们听说了 C++0x 计划中的 35 项新特性。实际上,或许还有更多的,但演讲中只描述了其中的 35 项。当然,一些新特性可能很微小,但是演讲中的特性却都十分重要。一些特性非常精妙而难以理解,像右值引用(rvalue-reference);但同时 也有很多 C++ 特色语法,像可变参数模板(variadic templates);而其他一些则非常疯狂,像用户定义数据标志(user-defined literals)

  此刻我问了自己一个问题:C++委员会真的相信C++因为没有足够的特性而出问题吗?当然,作为Ron Hardin玩笑话的变种,简化编程语言相比于增加语言是更大的进步。这想法是有些可笑,但先记住它。

  在那次C++演讲前几个月,我曾给自己一个演讲,你可以去YouTube上看,内容是关于我在1980年间创造的一个娱乐性质的并发语言。那个语言叫做Newsqueak,当然它是Go的前驱。

  我做那个演讲是因为Newsqueak中的一些想法是我在Google工作时错过的,而我又重新对这些想法进行了思考。我确信它们将使得写服务器代码更加简单,而且Google将会从中受益。

  事实上我曾经尝试去寻找一个方法把这些想法引入C++,但是失败了。把并发操作和C++的控制结构连接起来太难了,反过来这样也很难看到真正的优势。再加上C++让自己看起来非常难处理,尽管我承认很难使语言真正易用。所以我遗弃了这个想法。

  但C++0x演讲让我重新思考。真正困扰我的——我认为也困扰着Ken和Robert——是具有原子类型的新C++内存模型。在一个已经超负荷的类型系统 中加入这样一个定义微观细节的集合,让人感觉是错的。这看起来也非常短时,因为硬件很可能在下一个十年里有明显的变化,把语言和今天的硬件结合这么紧密将 是不明智的。

  会议结束后,我们回到办公室。继续开始了新一轮的编译,然后转过桌子面对着 Robert,开始询问那些关注的问题。在编译结束以前,我们说服了 Ken ,决定自己动手做点什么。我们并不希望一直用 C++ 写程序,我们,特别是我,希望在为 Google 写代码的时候能够自然地使用并发编程技术。我们也希望强调“Programming in large”的方向。

  我们在白板上写了很多我们想要的特性。我们从大方向出发,忽略详细的语法和语义只关注事物的主要部分。

  我还保留着在那周里一个邮件列表,下面是一些节选:

  Robert:起点: C语言,解决一些明显的瑕疵、删除杂质、增加一些缺少的特性。

  Rob:命名为 Go 语言吧,你可以为这个名字想一些原因。但是它已经有不少美好的属性了。简单地说,易于书写。工具命名也容易:goc、gol、goa。如果有一个交互的调试器、解释器的话,它可以就叫“go”。文件名后缀就是“.go”。

  Robert:空接口:interface {}。可以被所有接口实现,所以,这个接口可以代替 void* 的位置。

  这时候,我们并没有完全弄清楚这种语言。举例来说,我们用了大概一年时间才弄清楚 array 和 slice 的结构。但是在最初的那几天,很多重要的特性就已经出现了。

  注意到 Robert 说 C 语言是起始点,而不是 C++ 语言。我不确定,但我相信他指的是 C 语言,因为当时 Ken 也在。但是实际上,最后我们并不是真的从 C 语言开始扩展。我们完全重新开始了这门语言,稍微从 C 语言借鉴了操作符、括号以及一些普遍的关键字。(当然,我们也从其他我们所知道的语言中借鉴了很多想法。)在任何情况下,在我看来,我们从基础上、打破一 切的思路以及重新开始来回应 C++ 语言。我们并不是尝试设计一个更好的 C++ 、甚至说一个更好的 C 语言。它只是一个对我们所关注的软件更好的语言。


【点击进入“天极网企业频道”认证微博】

分页导航
作者:开源中国责任编辑:王玉平)
请关注天极网天极新媒体 最酷科技资讯
扫码赢大奖
评论
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
办公软件IT新闻整机