C++是一門引起無數(shù)爭議的語言。
眼下最常聽到的聲音則是C++將趨于沒落,會被某某語言取代。
我很懷疑這種論調(diào)的起點(diǎn)是商業(yè)宣傳,C++的真實(shí)趨勢應(yīng)該是越來越傾向于精英化。
精英化是指在可用可不用C++的領(lǐng)域中,C++將逐漸退出,
而所有剩下必須用C++的領(lǐng)域通常都是附加值比較高,難度較高的領(lǐng)域,比如:操作系統(tǒng),數(shù)據(jù)庫,大型網(wǎng)站后端等。
這一過程造成的現(xiàn)象就是在TIOBE上,C++的份額逐步下降。
但就像經(jīng)濟(jì)上擠泡沫一樣,這倒不是C++衰落了,而是原本人們對C++的期望過高了。
早在1995年,美國的調(diào)查機(jī)構(gòu)就曾經(jīng)預(yù)測:“終端用戶”編程從從業(yè)人員比率上將占94%,而“基礎(chǔ)結(jié)構(gòu)”編程從業(yè)人員只占1.5%不到。
(參見《軟件成本估算:COCOMOII模型方法》)
C++本來就不適合“終端用戶”這種涉眾很多的項(xiàng)目,比如物流程序,而適合對性能要求較高的基礎(chǔ)結(jié)構(gòu)項(xiàng)目,比如OS,大型數(shù)據(jù)庫等。
(根據(jù)Google的測試,C++的performance遠(yuǎn)高于其他語言)
只是當(dāng)年OO很火的時候,大家又沒有什么別的選擇,就一窩蜂的用,實(shí)際上很多程序確實(shí)不適合用一個沒有垃圾收集的程序來寫。
這里有一份統(tǒng)計列表,大家可以自己看看,當(dāng)前C++的主戰(zhàn)場是那里。
The Programming Languages Beacon(這個表告訴我們:IT行業(yè)的骨頭是C/C++做的)
這導(dǎo)致的結(jié)果就是修煉C++的程序員必須往高端走,你要么找不到工作,要么就找到很好的工作。
而不像其他語言,大差不差還能混口飯吃。
這個趨勢不好絕對化,但估計在未來會被強(qiáng)化。TIOBE上C++的份額跌得越多,這個趨勢強(qiáng)化的越厲害。
短時間完全看不到C++退出歷史舞臺的可能性,只要硬件還是軟件的基礎(chǔ):
例1:網(wǎng)站A和網(wǎng)站B類似,用C++可以讓速度提升30%,你感覺這個網(wǎng)站會選擇語言的易用性,還是會選擇速度?
例2:公司A要開發(fā)一個新的軟硬結(jié)合的產(chǎn)品,你感覺他會先開發(fā)一個虛擬機(jī),再開發(fā)產(chǎn)品,還是會直接基于硬件上封裝驅(qū)動后開發(fā)程序?
兩個關(guān)鍵缺陷
這兩個關(guān)鍵缺陷分別是語言的過度復(fù)雜和標(biāo)準(zhǔn)庫的過度蒼白。
C++語言過于復(fù)雜在業(yè)界是共識。
一個指針就使C++比關(guān)鍵字?jǐn)?shù)目相同的語言復(fù)雜許多,導(dǎo)入模板后各種應(yīng)用精巧的應(yīng)用使這門語言進(jìn)一步復(fù)雜化,個人感覺C++0x使這復(fù)雜性又升華了。
Google在公布的C++ Coding Rule開篇就說:
As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain雅思答案 雅思代考
這里也就不多說了,但貼幾個好玩的句子:
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." —— Bjarne Stroustrup(Stroustrup還是挺搞的,意譯下:C語言讓人很容易開槍走火打到自己的腳,C++讓走火發(fā)生的可能性降低,但一旦走火,你的腿就沒了職稱英語代考 職稱英語答案
"IMO, good C++ code is better than good C code, but bad C++ can be much, much worse than bad C code." —— John Carmack.
C++標(biāo)準(zhǔn)庫的蒼白倒值得多說一點(diǎn)不知道沒用過C++的人是否能想象,這個世界上還有一門語言的標(biāo)準(zhǔn)庫里甚至不覆蓋正則表達(dá)式和XML. C++就這樣,并且還將持續(xù)這樣。我專門查了一下,C++0x里好像終于有正則了,但還沒有XML的庫托福代考 托福答案
(不用提醒,我也知道boost里有,但boost不是標(biāo)準(zhǔn)庫。)
C++本身不缺庫,并且還都是大佬級的,如:OpenCV,OpenMP,ACE,MPICH2等。
隨便那一個都是一方諸侯,如果你沒用過OpenCV和OpenMP這些東西,第一次用一定會有點(diǎn)震撼,但關(guān)鍵是標(biāo)準(zhǔn)庫不太行。
從這個角度看C++0x方向走錯了:錦上添花的事做了不少,雪中送炭的事上不太給力。
感想C++語言已經(jīng)無法簡化,如果編譯器能夠提供可定制編譯也許對這個語言會有幫助。
比如:設(shè)定某個選項(xiàng)后,C++就變成了有對象的C.設(shè)置某個選項(xiàng)后,多重繼承就不支持了。
也許有編譯器可以這樣,但我確實(shí)還不知道。
再不行,自己定個規(guī)則使用C++的特定子集吧。