【转帖】Why C++?王者归来

[复制链接]
3765|20
手机看帖
扫描二维码
随时随地手机跟帖
john_lee|  楼主 | 2013-9-5 09:51 | 显示全部楼层 |阅读模式
(作者:陈皓原文链接
又有人邀请我去 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。Herb 说了几个事:
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”看看。另外,该视频的讲议可以在这里下载

相关帖子

李富贵| | 2013-9-5 10:26 | 显示全部楼层
李老湿的帖子不能不顶!

使用特权

评论回复
tee.| | 2013-9-5 13:56 | 显示全部楼层
前排,留名。

使用特权

评论回复
duckduckgo| | 2013-9-5 15:01 | 显示全部楼层
这种**现在看来很可笑。

使用特权

评论回复
huangxz| | 2013-9-5 15:01 | 显示全部楼层
楼主如果看youtube的,我怎么也看不了

使用特权

评论回复
lzlz70707| | 2013-9-5 16:46 | 显示全部楼层
一直在用C和C++

使用特权

评论回复
dong_abc| | 2013-9-5 18:13 | 显示全部楼层
C++在保证效率的基础上靠拢JAVA、C#  。

使用特权

评论回复
小白变大白| | 2013-9-5 21:19 | 显示全部楼层

使用特权

评论回复
Super_| | 2013-9-5 22:26 | 显示全部楼层
C++刚接触。

使用特权

评论回复
q2717780038| | 2013-9-5 22:54 | 显示全部楼层
呃,顶一个....

使用特权

评论回复
outstanding| | 2013-9-5 23:27 | 显示全部楼层

使用特权

评论回复
sedatefire| | 2013-9-5 23:43 | 显示全部楼层
去msdn上发这个帖子比较有共鸣
在mcu里面折腾c++,资料太少,ram,flash资源也消耗得厉害

使用特权

评论回复
john_lee|  楼主 | 2013-9-6 00:10 | 显示全部楼层
sedatefire 发表于 2013-9-5 23:43
去msdn上发这个帖子比较有共鸣
在mcu里面折腾c++,资料太少,ram,flash资源也消耗得厉害 ...


这里有几个 C++ 的工程示例,版主可以看看:
https://bbs.21ic.com/icview-551016-1-1.html
https://bbs.21ic.com/icview-551444-1-1.html
https://bbs.21ic.com/icview-551716-1-1.html
对于这些只有 2K 左右空间开销的代码,版主认为有哪个 C 语言实现的协议栈能够达到?

使用特权

评论回复
xyz549040622| | 2013-9-6 06:48 | 显示全部楼层
支持李老师

使用特权

评论回复
elec921| | 2013-9-6 08:30 | 显示全部楼层
李老师,支持,必须地!

使用特权

评论回复
ygl968| | 2013-9-6 08:40 | 显示全部楼层
收藏

使用特权

评论回复
sedatefire| | 2013-9-6 08:52 | 显示全部楼层
john_lee 发表于 2013-9-6 00:10
这里有几个 C++ 的工程示例,版主可以看看:
https://bbs.21ic.com/icview-551016-1-1.html
http://bbs.21 ...

不错,我非常希望你能成为我嵌入式C++启蒙者
对于代码复用,我思考多年,只在库的创建、接口抽象方面有些心得而已。
自己用用感觉很爽利,但库提供给新人,发现没那么顺利
还研究了下lua脚本,却一直没有时间深入。
也许c++真的是一条康庄道

使用特权

评论回复
aimie| | 2013-9-6 09:33 | 显示全部楼层
好像很强悍

使用特权

评论回复
icecut| | 2013-9-6 09:38 | 显示全部楼层
有时候编译器不支持是最大的困难.例如iar的lpc芯片
当然现在用Linux嵌入式必然换c++

使用特权

评论回复
john_lee|  楼主 | 2013-9-6 22:22 | 显示全部楼层
sedatefire 发表于 2013-9-6 08:52
不错,我非常希望你能成为我嵌入式C++启蒙者
对于代码复用,我思考多年,只在库的创建、接口抽象方面有些 ...

版主客气,我也是走在 C++ 漫漫旅途上的一个探索者,说什么启蒙,那是不敢当的,大家同路而已。
请看站内信。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:坚持使用 GCC 一百年不动摇!

33

主题

1466

帖子

21

粉丝