C++的精英化趨勢與兩個關鍵缺陷

來源:互聯網
上載者:User

精英化趨勢

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要開發一個新的軟硬結合的產品,你感覺他會先開發一個虛擬機器,再開發產品,還是會直接基於硬體上封裝驅動後開發程式?

 

兩個關鍵缺陷

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

 

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.

 

C++標準庫的蒼白倒值得多說一點

不知道沒用過C++的人是否能想象,這個世界上還有一門語言的標準庫裡甚至不覆蓋Regex和XML。

C++就這樣,並且還將持續這樣。我專門查了一下,C++0x裡好像有正則了,但沒有XML的。

(不用提醒,我也知道boost裡有,但boost不是標準庫。)

 

C++本身不缺庫,並且還都是大佬級的,如:OpenCV,OpenMP,ACE,MPICH2等。

隨便那一個都是一方諸侯,如果你沒用過OpenCV和OpenMP這些東西,第一次用一定會有點震撼,但關鍵是標準庫不太行。

從這個角度看C++0x方向走錯了:錦上添花的事做了不少,雪中送炭的事上不太給力。

 

感想

C++語言已經無法簡化,如果編譯器能夠提供可定製編譯也許對這個語言會有協助。

比如:設定某個選項後,C++就變成了有對象的C。設定某個選項後,多重繼承就不支援了。

也許有編譯器可以這樣,但我確實還不知道。

 

再不行,自己定個規則使用C++的特定子集吧。

 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.