C++老矣,尚能飯否?
原創(chuàng)【51CTO獨(dú)家特稿】中國人讀“C++”時(shí)存在兩種讀音,一種讀作“C加加”,另一種讀作“C plus plus”。兩種讀音似乎都沒錯(cuò),只是遵從不同的標(biāo)準(zhǔn)罷了。如同C++有兩種讀法一樣,目前C++陣營甚至沒有一個(gè)完整的標(biāo)準(zhǔn),只有最符合和接近C++標(biāo)準(zhǔn)的編譯器GNU GCC 4.6.1和微軟的Visual Studio 2010 SP1。C++這個(gè)在Tiobe編程語言排行榜中躋身三甲的語言,為何連完整的標(biāo)準(zhǔn)都沒有?
C++之父 Bjarne Stroustrup
C++之父Bjarne Stroustrup的簡歷上只有一句話“C++締造者”,這樣的成就是榮耀無比的。但似乎C++似乎過于低調(diào),讓很多C++程序員都沒有新消息可以接收。Java有Oracle等大公司推動(dòng)、.NET有微軟推動(dòng)、HTML 5有Google等推動(dòng)、包括PHP有眾多用戶和社區(qū)推動(dòng),那C++有誰在推動(dòng)呢?
C++從20世紀(jì)80年代面世,經(jīng)歷了以下三個(gè)階段的發(fā)展
第一階段從1980年代到1995年。這一階段C++語言基本上是傳統(tǒng)類型上的面向?qū)ο笳Z言,并且憑借著接近C語言的效率,在工業(yè)界使用的開發(fā)語言中占據(jù)了相當(dāng)大份額;
第二階段從1995年到2000年,這一階段由于標(biāo)準(zhǔn)模板庫(STL)和后來的Boost等程序庫的出現(xiàn),泛型程序設(shè)計(jì)在C++中占據(jù)了越來越多的比重性。當(dāng)然,同時(shí)由于Java、C#等語言的出現(xiàn)和硬件價(jià)格的大規(guī)模下降,C++受到了一定的沖擊;
第三階段從2000年至今,由于以Loki、MPL等程序庫為代表的產(chǎn)生式編程和模板元編程的出現(xiàn),C++出現(xiàn)了發(fā)展歷史上又一個(gè)新的高峰,這些新技術(shù)的出現(xiàn)以及和原有技術(shù)的融合,使C++已經(jīng)成為當(dāng)今主流程序設(shè)計(jì)語言中最復(fù)雜的一員。
Borland已隕落
相信很多程序員跟51CTO記者一樣,在大學(xué)里學(xué)習(xí)過《C++語言程序設(shè)計(jì)基礎(chǔ)》。聽著老師們指著譚浩強(qiáng)的《C++程序設(shè)計(jì)》,不厭其煩的講解char、int等數(shù)據(jù)類型的取值范圍,指針指向地址取值的問題。在這過程中我們接觸的第一個(gè)IDE(編譯器)是Borland公司的C++ Builder,盡管他已經(jīng)淪落到被人收購的境地。2009年5月6日,英國軟件商Micro Focus宣布,公司將以7500萬美元現(xiàn)金收購Borland軟件公司,一代軟件開發(fā)工具先驅(qū)者隕落了。
不管我們用的是Borland公司還是微軟的VC環(huán)境,很少有程序員關(guān)心C++的標(biāo)準(zhǔn)和版本問題。我們經(jīng)常能聽到Java或.NET程序員談?wù)揓ava 7或者.NET 3.5等版本的新特性,但有誰關(guān)心過C++的新版本?
51CTO記者隨機(jī)對(duì)一些C++程序員進(jìn)行了調(diào)查,有50%的程序員表示對(duì)開發(fā)語言的新版本有興趣,但不會(huì)用到實(shí)際工作中。只有當(dāng)所在公司要求他們統(tǒng)一進(jìn)化到新版本時(shí),才會(huì)使用新版本。有10%的程序員會(huì)從繁忙的工作中抽出時(shí)間來學(xué)習(xí)新版本,并獨(dú)自運(yùn)用到開發(fā)工作中。剩下40%的程序員表示天天加班,根本沒有時(shí)間看所謂的新版本,到時(shí)候現(xiàn)學(xué)吧。
這樣的調(diào)查結(jié)果讓我們了解了國內(nèi)程序員對(duì)編程語言新版本的態(tài)度。從51CTO發(fā)布的新聞《掀起C++ 11的神秘面紗》中,我們聽到了不少C++的程序員對(duì)于C++ 11的悲觀論調(diào),甚至預(yù)言未來的C++ 11進(jìn)不了編程語言排行榜的前十。
C++真的老了?
現(xiàn)在最好找工作的程序員是哪一類?根據(jù)51CTO編輯在智聯(lián)招聘網(wǎng)站,以北京地區(qū)為范圍,搜索到不同開發(fā)語言工作崗位數(shù)量如下:
PHP | 5212 |
Java | 11824 |
C++ | 9252 |
ASP.NET | 2383 |
可以看出C++程序員的需求是旺盛的,甚至超越了因電子商務(wù)而紅火的PHP程序員。C++并不因?yàn)榘姹镜膯栴}而遭到拋棄,廉頗老矣,尚能飯否的應(yīng)該是VB這樣的語言。因?yàn)樵谥锹?lián)招聘里,VB這個(gè)關(guān)鍵詞只有可憐巴巴的827個(gè)職位。
看來C++還是很多程序員的飯碗,大家一致用行動(dòng)證明C++并沒有老去,并沒有被人所遺忘。只是我們身在C++中,并不太關(guān)心它的進(jìn)步和發(fā)展,只要用C++能處理好手頭上的工作,哪管C++ 11的未來?
為什么新手不選擇C++?
很多新人喜歡Java或者.NET,因?yàn)樗麄冮_發(fā)起來相對(duì)簡單,甚至說高效。以往C++的優(yōu)勢(shì)在于對(duì)硬件資源的合理分配,特別是代碼行超過三萬以后,C++的系統(tǒng)消耗優(yōu)勢(shì)更加明顯,這也是為什么很多大公司熱衷于C++做大型開發(fā)的原因。
但隨著內(nèi)存和CPU等硬件設(shè)備的降價(jià),硬件資源和性能問題似乎不再成為程序員們考慮的問題。就好像386、486時(shí)代的PC用戶還要為那幾十K的內(nèi)存優(yōu)化費(fèi)勁一樣,C++程序員那窮盡極致的節(jié)約系統(tǒng)資源,已經(jīng)被看做是費(fèi)力不討好,新手們自然不選擇C++了。
其實(shí)百度和《魔獸世界》都是C++寫出來的。
看C++ 11的新特性
C++沒有垃圾回收機(jī)制,未來似乎也沒有。如果你不小心沒管住內(nèi)存,那么就要對(duì)不起了,內(nèi)存崩潰的情況不是不可能。在Java和.NET都支持垃圾回收之后,C++ 11還是顯得有些另類。當(dāng)然我們也是猜測(cè),這樣對(duì)內(nèi)存的精確控制,是不是出于對(duì)程序開發(fā)更加精確的考慮?
新的C++ 11里將會(huì)支持多線程開發(fā),這個(gè)與目前多核CPU技術(shù)的發(fā)展密切相關(guān),能極大的提高C++開發(fā)成品的效率。這個(gè)新特性應(yīng)該是與時(shí)俱進(jìn)的改變,還是沒有多少創(chuàng)新性。Visual Studio 2010也已經(jīng)實(shí)現(xiàn)C++并行構(gòu)建的功能。
Lambda表達(dá)式也是此次C++ 11標(biāo)準(zhǔn)中最為人詬病的特性,甚至有C++程序員直言“這Lambda太丑陋了,還不如Java,盡管Java的Lambda也是極其丑陋。”也有清醒的C++程序員認(rèn)為Lambda表達(dá)式在大型項(xiàng)目中的應(yīng)用還是不錯(cuò)的,新的語言機(jī)制會(huì)帶來新的效率,盡管這會(huì)有些陣痛。關(guān)于Java 7與C#中Lambda表達(dá)式的優(yōu)劣,請(qǐng)點(diǎn)擊這里。
借用一位C++程序員的例子來說明Lambda的正面作用,在C++中,STL的很多算法都要求使用者提供一個(gè)函數(shù)對(duì)象。例如for_each函數(shù),會(huì)要求用戶提供一個(gè)表明“行為”的函數(shù)對(duì)象。以vector<bool>為例,如果想使用for_each對(duì)其中的各元素全部賦值為true,一般需要這么一個(gè)函數(shù)對(duì)象,
- class filler
- {
- public :
- void operator ()( bool & i) const {i = true ;}
- } ;
這樣實(shí)現(xiàn)不但麻煩,而且不直觀。而如果使用lambda,則允許用戶使用一種直觀和見解的方式來處理這個(gè)問題。以boost.lambda為例,剛才的問題可以這么解決:
- for_each(v.begin(), v.end(), _1 = true );
面對(duì)Java和.NET這樣的后起之秀,C++的轉(zhuǎn)身似乎顯得慢了一些。在移動(dòng)開發(fā)和WEB應(yīng)用紅火的今天,C++的聲音似乎小了一些,希望這次C++ 11的新聞不會(huì)被Java 7和HTML 5給淹沒了。
C++ 11標(biāo)準(zhǔn)放出,罵的人比捧的人要多。一是認(rèn)為原有的C++老標(biāo)準(zhǔn)已經(jīng)滿足需要,二是認(rèn)為新標(biāo)準(zhǔn)加入的新功能讓初學(xué)者更不能適應(yīng)。這兩種意見有道理,就如同Windows XP已經(jīng)很方便了,Windows 7全新的操作讓很多人不適應(yīng)一樣。
搞C++要有革命熱情
一切只能等C++ 11真正出臺(tái),讓更多的C++程序員用到C++ 11才能有說服力。僅憑媒體放出的一些新特性恐怕還不足以讓大家完全了解C++ 11的真面目。51CTO編輯認(rèn)為,C++ 11能把C++這款“老”編程語言帶到一個(gè)新的高度,C++還會(huì)是排名三甲的編程語言。
【編輯推薦】
- 一個(gè)實(shí)用主義者的觀點(diǎn):如何學(xué)習(xí)使用C++
- 程序員新招:Java與C++混合編程
- C++和Java 的缺省初始化問題
- 淺析C++數(shù)據(jù)類型取值范圍
- Visual Studio 2010中C++的四大變化