精英化趨勢html
C++ 是一門引發無數爭議的語言。眼下最常聽到的聲音則是 C++ 將趨於沒落,會被某某語言取代。我很懷疑這種論調的起點是商業宣傳,C++ 的真實趨勢應該是愈來愈傾向於精英化。程序員
精英化是指在可用可不用 C++ 的領域中,C++ 將逐漸退出,而全部剩下必須用 C++ 的領域一般都是附加值比較高,難度較高的領域,好比:操做系統,數據庫,大型網站後端等。正則表達式
這一過程形成的現象就是在 TIOBE 上,C++ 的份額逐步降低。但就像經濟上擠泡沫同樣,這倒不是 C++ 衰落了,而是本來人們對 C++ 的指望太高了。數據庫
早在1995年,美國的調查機構就曾經預測:「終端用戶」編程從從業人員比率上將佔94%,而「基礎結構」編程從業人員只佔1.5%不到。(參見《軟件成本估算:COCOMOII模型方法》)編程
C++ 原本就不適合「終端用戶」這種涉衆不少的項目,好比物流程序,而適合對性能要求較高的基礎結構項目,好比 OS,大型數據庫等。根據 Google 的測試,C++ 的 performance 遠高於其餘語言
後端
只是當年 OO 很火的時候,你們又沒有什麼別的選擇,就一窩蜂的用,實際上不少程序確實不適合用一個沒有垃圾收集的程序來寫。這裏有一份統計列表,你們能夠本身看看,當前 C++ 的主戰場是那裏。The Programming Languages Beacon(這個表告訴咱們:IT 行業的骨頭是 C/C++ 作的)網絡
這致使的結果就是修煉 C++ 的程序員必須往高端走,你要麼找不到工做,要麼就找到很好的工做。而不像其餘語言,太差不差還能混口飯吃。這個趨勢很差絕對化,但估計在將來會被強化。TIOBE 上 C++ 的份額跌得越多,這個趨勢強化的越厲害。性能
短期徹底看不到 C++ 退出歷史舞臺的可能性:測試
這兩個關鍵缺陷分別是語言的過分複雜和標準庫的過分蒼白。網站
1. C++ 語言過於複雜在業界是共識。
一個指針就使 C++ 比關鍵字數目相同的語言複雜許多,導入模板後各類應用精巧的應用使這門語言進一步複雜化,我的感受 C++ 0x 使這複雜性又昇華了。
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++ 讓走火發生的可能性下降,但一旦走火,你的腿就沒了。)
"IMO, good C++ code is better than good C code, but bad C++ can be much, much worse than bad C code." -- John Carmack.
2. C++ 標準庫的蒼白倒值得多說一點
不知道沒用過 C++ 的人是否能想象,這個世界上還有一門語言的標準庫裏甚至不覆蓋正則表達式和 XML。C++ 就這樣,而且還將持續這樣。我專門查了一下,C++0x 裏好像有正則了,但沒有 XML 的。(不用提醒,我也知道 boost 裏有,但boost 不是標準庫。)
C++ 自己不缺庫,而且還都是大佬級的,如:OpenCV,OpenMP,ACE,MPICH2 等。隨便那一個都是一方諸侯,若是你沒用過 OpenCV 和 OpenMP 這些東西,第一次用必定會有點震撼,但關鍵是標準庫不太行。
從這個角度看 C++0x 方向走錯了:錦上添花的事作了很多,雪中送炭的事上不太給力。
C++ 語言已經沒法簡化,若是編譯器可以提供可定製編譯也許對這個語言會有幫助。好比:設定某個選項後,C++ 變成了有對象的 C。設置某個選項後,多重繼承就不支持了。
也許有編譯器能夠這樣,但我確實還不知道。再不行,本身定個規則使用 C++ 的特定子集吧。
==================================
網絡摘抄