现在的位置: 首页 > 编程 > 正文

Why C++ ? 王者归来 |

2016年05月10日 编程 ⁄ 共 5750字 ⁄ 字号 暂无评论

因为又有人邀请我去Quora的C2C网站去回答问题去了,这回是 关于 @laiyonghao 的这篇有点争议的博文《2012 不宜进入的三个技术点》ActionScript,Thread 和 C++, C++争议的争议最大。(要我说,.NET比C++更需要慎重进入,呵)。我就在这里回复一下这个问题吧。

正好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C++ C++ Coding Standards 的作者,还是ISO C++ 委员会的Chair,C++/CLI首席架构师,还是Microsoft的软件架构师,他叫Herb Sutter,他的这个演讲视频是 C++ and Beyond 2011上的一次公开演讲,题目是——Why C++? (如果你觉得那里的视频比较慢,你可以看优酷上的视频)(英文听力好的同学可以看一样,因为都没有中文字幕)

我觉得这篇文章就足够可以说明很多问题了,所以,我把Herb的演讲幻灯片截了几页放到这里,并做上一些注释,算是一个演讲内容摘要吧。

1) 为什么C++?因为 Performance per $,也就是说performance 就是钱,这个分成三个方面,

  • 耗电,芯片的耗电量,移动设备的耗电量,家用电脑的耗电量都和钱有关系。
  • 资源,家用电脑和移动设备上的处理器资源有限,因为要让一般消费者买的起。
  • 体验,在更小的设备上会有更好的体验,有更好的体验就可以挣更多的钱。

移动设备上的耗电量相信用过智能手机的人都知道吧,Android手机的耗电量实在是太大了。就算是iPhone在开启Wifi和3G的情况下耗电量也很快。

2)C++的进化分成三个时代:

  • 1979 – 1989:研究C的对象能力。主要是为C++做准备
  • 1989 – 1999:C++成了主流。
  • 1999 – 2009:Coffee-based语言(Java, .NET)出现了,极大的提高了开发生产力。

对于第三个时代,Herb说了很多,他说这个并没有什么错,因为这个时候我们非常关注开发的生产力,这个非常重要,这就是为什么C++一下就失去优势的地方。但是是否这些Coffee-Based的语言可以做任重要的事呢?不行,很多时候,这是一个Trade-Off的事,也就是生产力不是免费的是需要你用别的东西去交换的。

3)第四个时期。

Herb认为,2009-2019是第四个时期,因为我们又喜欢Native Code了,C++从被驱逐后又被请回来了。因为网站的性能越来越是个问题,移动端的设备非常流行。但主要是因为Performance就是钱,因为前面的三个因素,性能影响的是dollar,不尊重性能的公司都会发现花钱的速度太快了。(比如去年大家热炒的京东促销和12306.cn的问题,12306给整个社会造成了巨大的金钱浪费)

Herb把这个时期比做 The Return of the King。(指环王的第三部:王者归来) 性能为王!

这就好像我在“软件开发的三重门”里说的,开垦时代需要的是快和生产力,而开垦完后就得保证其稳定性。

4)Herb还给了一张幻灯片问,“The World is built on ….”,后面例出了多个语言。然后Herb说,世界是由C和C++构成的。

5)Herb给了一张表格,这张表可相当形像。如果把我们的对编程语言的需求总结为四个:效率,灵活,抽象,生产率。那么,C语言玩的是前两个,而C++玩的是前三个,Java和C#玩的是后两个(抽象和生产率)

任保一种设计都不可能让你什么都要的,这就是Trade-Off——什么事都需要交换的。

6)Herb举了一个微软内的例子,用C++ 和 ATL 来开发IE工具条的报告,意思是你可以用脚本在IE的工具条上加按钮,但是作者建议使用C++,因为用.NET或是脚本有重大的limitation,尤其是性能上的问题。

7)接下来,我们来看看移动设备。

下图中,第一个是iOS,第二个是Android,第三个是WinPhone。Herd说了几个事:

a)比Web APP,人们更喜欢Native的APP,这个在用移动设备上可以得到验证。

b)iOS也好,Android也好,WinPhone也好,他们不是在搞操作系统,而是在搞应用,为的是让智能手机更好。手机就是一个App。

c)这三个手机在第一版出来时都不支持C++,而第二版出来时都支持C++了。因为他们要兼顾性能和一定程度上的开发效率。WinPhone还没有到第二版,让我们拭目以待。(我以前写过一篇调侃Android支持C++开发的文章,这也只是一年前的事,说明C++全面回归了)

8)如果你还是不相信的话,我们可以看看为什么Apple和Google都在搞C++的编译器,因为他们觉得g++性能不行。所以,基于LLVM的编译器正在领导潮流,因为我们关注Natvie Code的性能优化。

9)接下来,Herb说了一下数据中心,你知道数据中心最花钱的是什么吗?三个事:

  • 57% 花在了硬件上。
  • 18% 花在了配电和降温上。
  • 13% 花在了耗电上。

88%的钱花在了硬件和电力上。这可是很大一笔费用啊。(还有人说硬件比软件便宜吗?)我记得我上一个公司的数据中心每年要花的电费就在百万美元以上。

10)昨天在微博上有个笑话,说是某咨询师要求程序员把代码打印出来走查,程序员问是不是要用彩打?哈哈。我说,这至少不环保嘛。消耗太大了。是的,C++是可以省电的,以及于C++之父都在YouTube 说C++是可以减轻全球变暖的问题。哇,C++开始真正造福人类了。

11)我还需要重温一下老大的这句话——

My contribution to the fight against global warming is C++’s efficiency: Just think if Google had to have twice as many server farms! Each uses as much energy as a small town. And it’s not just a factor of two… Efficiency is not just running fast or running bigger programs, it’s also running using less resources.

Bjarne Stroustrup, June 2011

最后一句说的非常好!效率不仅仅只是跑得,跑得多,更是可以使用更少的资源

12)下面让我们再来看一张表,一张把钱投到哪里的表格,这样我们可以看到一些趋势。

  • 70年代80年代,资源不够,主要是把钱投在性能上。
  • 80年代到90代,主要是90年代开始有一半的投次到了抽象和生产率上。
  • 00年代,完全都在抽象和生产率上。
  • 10年代,80%的钱都要回头来解决性能问题。这就是C/C++的王者归来。

13)当然,不是C++不注重 开发效率,看看C++0X的标准引入了多少东西我们就知道了。但是本质上,C++还是致力于性能和抽象的完全平衡

那么,我们还会觉得C++要被淘汰了,不适合进入了吗?看完这个演讲,你应该有答案的。

后面讲了C++的文艺复兴,你可以在Google 搜索 “C++ Renaissance”看看。另外,该视频的讲议可以在这里下载

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell.cn ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——
















var jiathis_config={
data_track_clickback:true,
summary:"",
hideMore:false
}

好烂啊有点差凑合看看还不错很精彩 (24 人打了分,平均分: 4.58 )
Loading...Loading...

  1. TEST

    2012年6月14日15:40 | #1

    @梦中的暹罗猫

  2. 2012年8月15日08:27 | #2

    C++的复杂性被习惯性遗忘。
    @剑神一笑 +1 ,支持“撸啊”程序员。

  3. ZongxingH

    2012年9月10日12:39 | #3

    我是个初学者,先不说自己的体会了,不过还是有很多不了解。

  4. 2012年12月28日22:48 | #4

    感觉自己上对了船

  5. haskell

    2013年2月3日12:24 | #5

    永远的王者,何谈归来。
    唯一一门传承历史与时俱进的语言。
    纯IT之外的世界大着呢!

  6. momognu

    2013年2月18日15:38 | #6

    不存在的王者归来,因为c++从未离开

  7. Kanato

    2013年3月23日15:47 | #7

    Why not Vala? Why not Go?

  8. 我是鱼饵

    2013年4月23日18:11 | #8

    buhui912 :争论这些有什么意思啊,单纯搞技术就是追求那些奇淫技巧,我倒建议陈皓先生应该多讲讲中国特色软件开发环境如何,跟美国有什么差距。没有任何一项技术可以孤零零地一直辉煌,只有通过把技术融入事业,融入到企业发展中,才是正确的发展。我讨厌孤零零的谈论什么语言优劣,什么语言的一些细节东西。我觉得陈皓应该多说说国内那些企业,比如一流的,腾讯百度开发环境如何,二流的如中兴华为开发环境如何。明白这些,比过多的了解语言细节,技术细节是强多的。

    喜欢这句

  9. jacob

    2013年6月4日22:58 | #9

    @我是鱼饵
    额,这和博主的文章没啥关系,人家讨论技术,你这讨论环境,都要讨论的。技术讨论利于研究和学习,环境讨论利于生存。搞学术研究的人都是讨论技术不会过多讨论环境的。

  10. shady

    2013年12月10日18:22 | #10

    初级使用者路过,渴望深入了解

  11. turtlejiang

    2014年7月2日14:27 | #11

    @sunner
    居然在这里看到孙老师

  12. 赵铁锤

    2014年10月18日15:58 | #12

    的确是c++ 是最要慎重进入的语言

评论分页


1
2
3 6548

  1. 2012年2月3日21:57 | #1
  2. 2012年2月5日22:53 | #2
  3. 2012年2月7日13:18 | #3
  4. 2012年2月11日14:04 | #4
  5. 2012年2月11日18:55 | #5
  6. 2012年2月26日01:11 | #6
  7. 2012年4月9日11:15 | #7
  8. 2012年4月27日09:07 | #8
  9. 2012年4月28日08:45 | #9
  10. 2012年6月29日23:19 | #10
  11. 2012年7月5日10:16 | #11
  12. 2012年8月6日09:51 | #12
  13. 2012年8月6日13:08 | #13
  14. 2012年8月6日18:49 | #14
  15. 2012年8月7日08:58 | #15
  16. 2012年8月8日09:02 | #16
  17. 2012年8月12日03:26 | #17
  18. 2012年12月28日05:24 | #18
  19. 2013年1月30日13:04 | #19
  20. 2013年3月27日09:21 | #20
  21. 2013年3月29日09:20 | #21
  22. 2013年7月4日09:51 | #22
  23. 2014年1月31日11:26 | #23
  24. 2014年5月3日03:10 | #24

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-7486123-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();