C++是一門引起無數(shù)爭(zhēng)議的語言。
眼下最常聽到的聲音則是C++將趨于沒落,會(huì)被某某語言取代。
我很懷疑這種論調(diào)的起點(diǎn)是商業(yè)宣傳,C++的真實(shí)趨勢(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++衰落了,而是原本人們對(duì)C++的期望過高了。
早在1995年,美國(guó)的調(diào)查機(jī)構(gòu)就曾經(jīng)預(yù)測(cè):“終端用戶”編程從從業(yè)人員比率上將占94%,而“基礎(chǔ)結(jié)構(gòu)”編程從業(yè)人員只占1.5%不到。
?。▍⒁姟盾浖杀竟浪悖篊OCOMOII模型方法》)
C++本來就不適合“終端用戶”這種涉眾很多的項(xiàng)目,比如物流程序,而適合對(duì)性能要求較高的基礎(chǔ)結(jié)構(gòu)項(xiàng)目,比如OS,大型數(shù)據(jù)庫等。
(根據(jù)Google的測(cè)試,C++的performance遠(yuǎn)高于其他語言)
只是當(dāng)年OO很火的時(shí)候,大家又沒有什么別的選擇,就一窩蜂的用,實(shí)際上很多程序確實(shí)不適合用一個(gè)沒有垃圾收集的程序來寫。
這里有一份統(tǒng)計(jì)列表,大家可以自己看看,當(dāng)前C++的主戰(zhàn)場(chǎng)是那里。
The Programming Languages Beacon(這個(gè)表告訴我們:IT行業(yè)的骨頭是C/C++做的)
這導(dǎo)致的結(jié)果就是修煉C++的程序員必須往高端走,你要么找不到工作,要么就找到很好的工作。
而不像其他語言,大差不差還能混口飯吃。
這個(gè)趨勢(shì)不好絕對(duì)化,但估計(jì)在未來會(huì)被強(qiáng)化。TIOBE上C++的份額跌得越多,這個(gè)趨勢(shì)強(qiáng)化的越厲害。
短時(shí)間完全看不到C++退出歷史舞臺(tái)的可能性,只要硬件還是軟件的基礎(chǔ):
例1:網(wǎng)站A和網(wǎng)站B類似,用C++可以讓速度提升30%,你感覺這個(gè)網(wǎng)站會(huì)選擇語言的易用性,還是會(huì)選擇速度?
例2:公司A要開發(fā)一個(gè)新的軟硬結(jié)合的產(chǎn)品,你感覺他會(huì)先開發(fā)一個(gè)虛擬機(jī),再開發(fā)產(chǎn)品,還是會(huì)直接基于硬件上封裝驅(qū)動(dòng)后開發(fā)程序?
兩個(gè)關(guān)鍵缺陷
這兩個(gè)關(guān)鍵缺陷分別是語言的過度復(fù)雜和標(biāo)準(zhǔn)庫的過度蒼白。
C++語言過于復(fù)雜在業(yè)界是共識(shí)。
一個(gè)指針就使C++比關(guān)鍵字?jǐn)?shù)目相同的語言復(fù)雜許多,導(dǎo)入模板后各種應(yīng)用精巧的應(yīng)用使這門語言進(jìn)一步復(fù)雜化,個(gè)人感覺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雅思答案 雅思代考
這里也就不多說了,但貼幾個(gè)好玩的句子:
"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++的人是否能想象,這個(gè)世界上還有一門語言的標(biāo)準(zhǔn)庫里甚至不覆蓋正則表達(dá)式和XML. C++就這樣,并且還將持續(xù)這樣。我專門查了一下,C++0x里好像終于有正則了,但還沒有XML的庫托福代考 托福答案
?。ú挥锰嵝?,我也知道boost里有,但boost不是標(biāo)準(zhǔn)庫。)
C++本身不缺庫,并且還都是大佬級(jí)的,如:OpenCV,OpenMP,ACE,MPICH2等。
隨便那一個(gè)都是一方諸侯,如果你沒用過OpenCV和OpenMP這些東西,第一次用一定會(huì)有點(diǎn)震撼,但關(guān)鍵是標(biāo)準(zhǔn)庫不太行。
從這個(gè)角度看C++0x方向走錯(cuò)了:錦上添花的事做了不少,雪中送炭的事上不太給力。
感想C++語言已經(jīng)無法簡(jiǎn)化,如果編譯器能夠提供可定制編譯也許對(duì)這個(gè)語言會(huì)有幫助。
比如:設(shè)定某個(gè)選項(xiàng)后,C++就變成了有對(duì)象的C.設(shè)置某個(gè)選項(xiàng)后,多重繼承就不支持了。
也許有編譯器可以這樣,但我確實(shí)還不知道。
再不行,自己定個(gè)規(guī)則使用C++的特定子集吧。