C++ 精英化趨勢

 

  精英化趨勢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. 網站 A 和網站 B 相似,用 C++ 可讓速度提高 30%,你感受這個網站會選擇語言的易用性,仍是會選擇速度?
  2. 公司 A 要開發一個新的軟硬結合的產品,你感受他會先開發一個虛擬機,再開發產品,仍是會直接基於硬件上封裝驅動後開發程序?

  

  兩個關鍵缺陷

 

  這兩個關鍵缺陷分別是語言的過分複雜和標準庫的過分蒼白。網站

 

  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++ 的特定子集吧。

 

==================================

 網絡摘抄 

相關文章
相關標籤/搜索