Why C++ ? 王者归来

jopen 13年前
     <p>因为又有人我去Quora的C2C站去回答问题去了,这回是 关于 <a href="/misc/goto?guid=4958327663941695052">@laiyonghao</a> 的这篇有点争议的博文《2012 不宜进入的三个技术点》ActionScript,Thread 和 C++,<a href="/misc/goto?guid=4958327664735134273" target="_blank"> C++争议的争议最大</a>。(要我说,.NET比C++更需要慎重进入,呵)。我就在这里回复一下这个问题吧。</p>    <p>正好我前段时间看到一个视频,这个演讲视频还比较著名,这个演讲者是<em>Exceptional C++ </em>和 <em>C++ Coding Standards</em> 的作者,还是ISO C++ 委员会的Chair,C++/CLI首席架构师,还是Microsoft的软件架构师,他叫<a href="/misc/goto?guid=4958327665534035495" target="_blank">Herb Sutter</a>,他的这个演讲视频是 <a href="/misc/goto?guid=4958327666326167162" target="_blank">C++ and Beyond 2011</a>上的一次公开演讲,题目是——<a href="/misc/goto?guid=4958327667114192920" target="_blank">Why C++</a>? (如果你觉得那里的视频比较慢,你可以看<a href="/misc/goto?guid=4958327667905713514" target="_blank">优酷上的视频</a>)(英文听力好的同学可以看一样,因为都没有中文字幕)</p>    <p>我觉得这篇文章就足够可以说明很多问题了,所以,我把Herb的演讲幻灯片截了几页放到这里,并做上一些注释,算是一个演讲内容摘要吧。</p>    <p>1) 为什么C++?因为 Performance per $,也就是说performance 就是钱,这个分成三个方面,</p>    <ul>     <li>电源,芯片的耗电量,移动设备的耗电量,家用电脑的耗电量都和钱有关系。</li>     <li>资源,家用电脑和移动设备上的处理器资源有限,因为要让一般消费者买的起。</li>     <li>体验,在更小的设备上会有更好的体验,有更好的体验就可以挣更多的钱。</li>    </ul>    <p><img class="aligncenter size-full wp-image-6550" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.01.png" width="566" height="319" /></p>    <p><span id="more-6548"> </span></p>    <p>2)C++的进化分成三个时代:</p>    <ul>     <li>1979 – 1989:研究C的对象能力。主要是为C++做准备</li>     <li>1989 – 1999:C++成了主流。</li>     <li>1999 – 2009:Coffee-based语言(Java, .NET)出现了,极大的提高了开发生产力。</li>    </ul>    <p style="padding-left:30px;">对于第三个时代,Herb说了很多,他说这个并没有什么错,因为这个时候我们非常关注开 发的生产力,这个非常重要,这就是为什么C++一下就失去优势的地方。但是是否这些Coffee-Based的语言可以做任重要的事呢?不行,很多时候, 这是一个Trade-Off的事,也就是生产力不是免费的是需要你用别的东西去交换的。</p>    <p><img class="aligncenter size-full wp-image-6551" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.02.png" width="567" height="319" /></p>    <p>3)第四个时期。</p>    <p style="padding-left:30px;">Herb认为,2009-2019是第四个时期,因为我们又喜欢Native Code了,C++从被驱逐后又被请回来了。因为网站的性能越来越是个问题,移动端的设备非常流行。但主要是因为Performance就是钱,因为前面 的三个因素,性能影响的是dollar,不尊重性能的公司都会发现花钱的速度太快了。(比如去年大家热炒的京东促销和12306.cn的问题,12306 给整个社会造成了巨大的金钱浪费)</p>    <p style="padding-left:30px;">Herb把这个时期比做 The Return of the King。(指环王的第三部:王者归来)</p>    <p style="padding-left:30px;">这就好像我在“<a title="软件开发的“三重门”" href="/misc/goto?guid=4958327032253923697" target="_blank">软件开发的三重门</a>”里说的,开垦时代需要的是快和生产力,而开垦完后就得保证其稳定性。</p>    <p><img class="aligncenter size-full wp-image-6552" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.03.png" width="567" height="318" /></p>    <p>4)Herb还给了一张幻灯片问,“The World is built on ….”,后面例出了多个语言。然后Herb说,世界是由C和C++构成的。</p>    <p style="text-align:center;"><img class="aligncenter wp-image-6562" title="WhyCPP.03.01" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.03.01.png" width="397" height="224" /></p>    <p>5)Herb给了一张表格,这张表可相当形像。如果把我们的对编程语言的需求总结为四个:<strong>效率,灵活,抽象,生产率</strong>。那么,C语言玩的是前两个,而C++玩的是前三个,Java和C#玩的是后两个(抽象和生产率)</p>    <p>任保一种设计都不可能让你什么都要的,这就是Trade-Off——什么事都需要交换的。</p>    <p><img class="aligncenter size-full wp-image-6553" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.04.png" width="567" height="318" /></p>    <p>6)Herb举了一个微软内的例子,用C++ 和 ATL 来开发IE工具条的报告,因为用.NET或是脚本有重大的limitation,也就是性能问题。</p>    <p style="text-align:center;"><img class="aligncenter wp-image-6554" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.05.png" width="637" height="360" /></p>    <p style="text-align:left;">7)接下来,我们来看看移动设备。</p>    <p style="text-align:left;padding-left:30px;">下图中,第一个是iOS,第二个是Android,第三个是WinPhone。Herd说了几个事:</p>    <p style="text-align:left;padding-left:30px;">a)比Web APP,人们更喜欢Native的APP</p>    <p style="text-align:left;padding-left:30px;">b)iOS也好,Android也好,WinPhone也好,他们不是在搞操作系统,而是在搞应用,为的是让智能手机更好。</p>    <p style="text-align:left;padding-left:30px;">c)这三个手机在第一片出来时都不支持C++,而第二版出来时都支持C++了。因为他们要兼顾性能和一定程度上的开发效率。WinPhone还没有到第二版,让我们拭目以待。(我以前写过一篇<a title="Android将允许纯C/C++开发应用" href="/misc/goto?guid=4958327669434828230" target="_blank">调侃Android支持C++开发</a>的文章,这也只是一年前的事,说明C++全面回归了)</p>    <p><img class="aligncenter size-full wp-image-6555" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.06.png" width="567" height="319" /></p>    <p>8)如果你还是不相信的话,我们可以看看为什么Apple和Google都在搞C++的编译器,因为他们觉得G++性能不行。所以,基于LLVM的编译器正在领导潮流,因为我们关注Natvie Code的性能优化。</p>    <p><img class="aligncenter size-full wp-image-6556" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.07.png" width="539" height="615" /></p>    <p>9)接下来,Herb说了一下数据中心,你知道数据中心最花钱的是什么吗?三个事:</p>    <blockquote>     <ul>      <li>57%花在了硬件上。</li>      <li>18% 花在了配电和降温上。</li>      <li>13%花在了耗电上。</li>     </ul>    </blockquote>    <p style="padding-left:30px;">88%的钱花在了硬件和电力上。这可是很大一笔费用啊。(还有人说硬件比软件便宜吗?)我记得我上一个公司的数据中心每年要花的电费就在百万美元以上。</p>    <p><img class="aligncenter size-full wp-image-6557" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.08.png" width="566" height="319" /></p>    <p>10)昨天在<a href="/misc/goto?guid=4958327670232678911" target="_blank">微博上有个笑话</a>,说是某咨询师要求程序员把代码打印出来走查,程序员问是不是要用彩打?哈哈。我说,这至少不环保嘛。消耗太大了。是的,C++是可以省电的,以及于C++之父都在油Tube 说C++是可以减轻全球变暖的问题。哇,C++开始真正造福人类了。</p>    <p><img class="aligncenter size-full wp-image-6558" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.09.png" width="516" height="397" /></p>    <p>11)我还需要重温一下老大的这句话——</p>    <blockquote>     <p><strong>My contribution to the fight against global warming is C++’s efficiency</strong>: 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…<strong> Efficiency is not just running fast or running bigger programs, it’s also running using less resources</strong>.</p>     <p style="text-align:right;">Bjarne Stroustrup, June 2011</p>    </blockquote>    <p style="text-align:left;padding-left:30px;">最后一句说的非常好!<strong>效率不仅仅只是跑得,跑得多,更是可以使用更少的资源</strong>。</p>    <p style="text-align:left;">12)下面让我们再来看一张表,一张把钱投到哪里的表格。</p>    <ul>     <li>70年代80年代,资源不够,主要是把钱投在性能上。</li>     <li>80年代到90代,主要是90年代开始有一半的投次到了抽象和生产率上。</li>     <li>00年代,完全都在抽象和生产率上。</li>     <li>10年代,80%的钱都要回头来解决性能问题。这就是C/C++的王者归来。</li>    </ul>    <p><img class="aligncenter size-full wp-image-6559" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.10.png" width="567" height="319" /></p>    <p>13)当然,不是C++不注重 开发效率,看看C++0X的标准引入了多少东西我们就知道了。但是本质上,<strong>C++还是致力于性能和抽象的完全平衡</strong>。</p>    <p><img class="aligncenter size-full wp-image-6560" alt="" src="http://coolshell.cn/wp-content/uploads/2012/02/WhyCPP.11.png" width="567" height="319" /></p>    <p>那么,我们还会觉得C++要被淘汰了,不适合进入了吗?</p>    <p>后面讲了C++的文艺复兴,你可以在Google 搜索 “C++ Renaissance”看看。另外,<strong>该视频的讲议可以在<a href="/misc/goto?guid=4958327671025803655" target="_blank">这里下载</a></strong>。<br /> <br /> 本文转载自: <a href="/misc/goto?guid=4958327671807480475" rel="nofollow" target="_blank">http://coolshell.cn/articles/6548.html</a> </p>