陳皓:Why C++? 王者歸來(lái)
因?yàn)橛钟腥私形胰uora的C2C站去回答問(wèn)題了,這回是 關(guān)于 @laiyonghao 的這篇有點(diǎn)爭(zhēng)議的博文《2012 不宜進(jìn)入的三個(gè)技術(shù)點(diǎn)》ActionScript,Thread 和 C++, C++爭(zhēng)議的爭(zhēng)議最大。(要我說(shuō),.NET比C++更需要慎重進(jìn)入,呵)。我就在這里回復(fù)一下這個(gè)問(wèn)題吧。
正好我前段時(shí)間看到一個(gè)視頻,這個(gè)演講視頻還比較著名,這個(gè)演講者是Exceptional C++ 和 C++ Coding Standards 的作者,還是ISO C++ 委員會(huì)的Chair,C++/CLI首席架構(gòu)師,還是Microsoft的軟件架構(gòu)師,他叫Herb Sutter,他的這個(gè)演講視頻是 C++ and Beyond 2011上的一次公開(kāi)演講,題目是——Why C++? (如果你覺(jué)得那里的視頻比較慢,你可以看優(yōu)酷上的視頻)(英文聽(tīng)力好的同學(xué)可以看一樣,因?yàn)槎紱](méi)有中文字幕)
我覺(jué)得這篇文章就足夠可以說(shuō)明很多問(wèn)題了,所以,我把Herb的演講幻燈片截了幾頁(yè)放到這里,并做上一些注釋,算是一個(gè)演講內(nèi)容摘要吧。
1) 為什么C++?因?yàn)?Performance per $,也就是說(shuō)performance 就是錢(qián),這個(gè)分成三個(gè)方面,
◆ 電源,芯片的耗電量,移動(dòng)設(shè)備的耗電量,家用電腦的耗電量都和錢(qián)有關(guān)系。
◆ 資源,家用電腦和移動(dòng)設(shè)備上的處理器資源有限,因?yàn)橐屢话阆M(fèi)者買(mǎi)的起。
◆ 體驗(yàn),在更小的設(shè)備上會(huì)有更好的體驗(yàn),有更好的體驗(yàn)就可以掙更多的錢(qián)。
2)C++的進(jìn)化分成三個(gè)時(shí)代:
1979 – 1989:研究C的對(duì)象能力。主要是為C++做準(zhǔn)備
1989 – 1999:C++成了主流。
1999 – 2009:Coffee-based語(yǔ)言(Java, .NET)出現(xiàn)了,極大的提高了開(kāi)發(fā)生產(chǎn)力。
對(duì)于第三個(gè)時(shí)代,Herb說(shuō)了很多,他說(shuō)這個(gè)并沒(méi)有什么錯(cuò),因?yàn)檫@個(gè)時(shí)候我們非常關(guān)注開(kāi)發(fā)的生產(chǎn)力,這個(gè)非常重要,這就是為什么C++一下就失去優(yōu)勢(shì)的地方。但是是否這些Coffee-Based的語(yǔ)言可以做任重要的事呢?不行,很多時(shí)候,這是一個(gè)Trade-Off的事,也就是生產(chǎn)力不是免費(fèi)的是需要你用別的東西去交換的。
3)第四個(gè)時(shí)期。
Herb認(rèn)為,2009-2019是第四個(gè)時(shí)期,因?yàn)槲覀冇窒矚gNative Code了,C++從被驅(qū)逐后又被請(qǐng)回來(lái)了。因?yàn)榫W(wǎng)站的性能越來(lái)越是個(gè)問(wèn)題,移動(dòng)端的設(shè)備非常流行。但主要是因?yàn)镻erformance就是錢(qián),因?yàn)榍懊娴娜齻€(gè)因素,性能影響的是dollar,不尊重性能的公司都會(huì)發(fā)現(xiàn)花錢(qián)的速度太快了。(比如去年大家熱炒的京東促銷和12306.cn的問(wèn)題,12306給整個(gè)社會(huì)造成了巨大的金錢(qián)浪費(fèi))
Herb把這個(gè)時(shí)期比做 The Return of the King。(指環(huán)王的第三部:王者歸來(lái))
這就好像我在“軟件開(kāi)發(fā)的三重門(mén)”里說(shuō)的,開(kāi)墾時(shí)代需要的是快和生產(chǎn)力,而開(kāi)墾完后就得保證其穩(wěn)定性。
4)Herb還給了一張幻燈片問(wèn),“The World is built on ….”,后面例出了多個(gè)語(yǔ)言。然后Herb說(shuō),世界是由C和C++構(gòu)成的。
5)Herb給了一張表格,這張表可相當(dāng)形像。如果把我們的對(duì)編程語(yǔ)言的需求總結(jié)為四個(gè):效率,靈活,抽象,生產(chǎn)率。那么,C語(yǔ)言玩的是前兩個(gè),而C++玩的是前三個(gè),Java和C#玩的是后兩個(gè)(抽象和生產(chǎn)率)
任保一種設(shè)計(jì)都不可能讓你什么都要的,這就是Trade-Off——什么事都需要交換的。
6)Herb舉了一個(gè)微軟內(nèi)的例子,用C++ 和 ATL 來(lái)開(kāi)發(fā)IE工具條的報(bào)告,因?yàn)橛?NET或是腳本有重大的limitation,也就是性能問(wèn)題。
#p#
7)接下來(lái),我們來(lái)看看移動(dòng)設(shè)備。
下圖中,第一個(gè)是iOS,第二個(gè)是Android,第三個(gè)是WinPhone。Herd說(shuō)了幾個(gè)事:
a)比Web APP,人們更喜歡Native的APP
b)iOS也好,Android也好,WinPhone也好,他們不是在搞操作系統(tǒng),而是在搞應(yīng)用,為的是讓智能手機(jī)更好。
c)這三個(gè)手機(jī)在第一片出來(lái)時(shí)都不支持C++,而第二版出來(lái)時(shí)都支持C++了。因?yàn)樗麄円骖櫺阅芎鸵欢ǔ潭壬系拈_(kāi)發(fā)效率。WinPhone還沒(méi)有到第二版,讓我們拭目以待。(我以前寫(xiě)過(guò)一篇調(diào)侃Android支持C++開(kāi)發(fā)的文章,這也只是一年前的事,說(shuō)明C++全面回歸了)
8)如果你還是不相信的話,我們可以看看為什么Apple和Google都在搞C++的編譯器,因?yàn)樗麄冇X(jué)得G++性能不行。所以,基于LLVM的編譯器正在領(lǐng)導(dǎo)潮流,因?yàn)槲覀冴P(guān)注Natvie Code的性能優(yōu)化。
9)接下來(lái),Herb說(shuō)了一下數(shù)據(jù)中心,你知道數(shù)據(jù)中心最花錢(qián)的是什么嗎?三個(gè)事:
57%花在了硬件上。
18% 花在了配電和降溫上。
13%花在了耗電上。
88%的錢(qián)花在了硬件和電力上。這可是很大一筆費(fèi)用啊。(還有人說(shuō)硬件比軟件便宜嗎?)我記得我上一個(gè)公司的數(shù)據(jù)中心每年要花的電費(fèi)就在百萬(wàn)美元以上。
10)昨天在微博上有個(gè)笑話,說(shuō)是某咨詢師要求程序員把代碼打印出來(lái)走查,程序員問(wèn)是不是要用彩打?哈哈。我說(shuō),這至少不環(huán)保嘛。消耗太大了。是的,C++是可以省電的,以及于C++之父都在YouTube 說(shuō)C++是可以減輕全球變暖的問(wèn)題。哇,C++開(kāi)始真正造福人類了。
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
最后一句說(shuō)的非常好!效率不僅僅只是跑得,跑得多,更是可以使用更少的資源。
12)下面讓我們?cè)賮?lái)看一張表,一張把錢(qián)投到哪里的表格。
70年代80年代,資源不夠,主要是把錢(qián)投在性能上。
80年代到90代,主要是90年代開(kāi)始有一半的投次到了抽象和生產(chǎn)率上。
00年代,完全都在抽象和生產(chǎn)率上。
10年代,80%的錢(qián)都要回頭來(lái)解決性能問(wèn)題。這就是C/C++的王者歸來(lái)。
13)當(dāng)然,不是C++不注重 開(kāi)發(fā)效率,看看C++0X的標(biāo)準(zhǔn)引入了多少東西我們就知道了。但是本質(zhì)上,C++還是致力于性能和抽象的完全平衡。
那么,我們還會(huì)覺(jué)得C++要被淘汰了,不適合進(jìn)入了嗎?
后面講了C++的文藝復(fù)興,你可以在Google 搜索 “C++ Renaissance”看看。另外,該視頻的講議可以在這里下載。
原文:http://www.oschina.net/news/25266/why-c-back
作者:陳皓
【編輯推薦】