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

2022-07-04 14:42:11 字數 2420 閱讀 2732

精英化趨勢

c++是一門引起無數爭議的語言。

眼下最常聽到的聲音則是c++將趨於沒落,會被某某語言取代。

我很懷疑這種論調的起點是商業宣傳,c++的真實趨勢應該是越來越傾向於精英化。

精英化是指在可用可不用c++的領域中,c++將逐漸退出,

這一過程造成的現象就是在tiobe上,c++的份額逐步下降。

但就像經濟上擠泡沫一樣,這倒不是c++衰落了,而是原本人們對c++的期望過高了。

早在2023年,美國的調查機構就曾經**:「終端使用者」程式設計從從業人員比率上將佔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++的人是否能想象,這個世界上還有一門語言的標準庫里甚至不覆蓋正規表示式和xml。

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

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

c++本身不缺庫,並且還都是大佬級的,如:opencv,openmp,ace,mpich2等。

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

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

感想

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

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

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

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

理想流 + 軟體 = 《完美軟體開發:方法與邏輯》

理想流 + 人生 = ??

理想流 + 管理 = ??

理想流 = 以概念和邏輯推演本質,追求真理。

一周熱文推薦 C 的精英化趨勢與兩個關鍵缺陷

c 是一門引起無數爭議的語言。眼下最常聽到的聲音則是c 將趨於沒落,會被某某語言取代。我很懷疑這種論調的起點是商業宣傳,c 的真實趨勢應該是越來越傾向於精英化。精英化是指在可用可不用c 的領域中,c 將逐漸退出,而所有剩下必須用c 的領域通常都是附加值比較高,難度較高的領域,比如 作業系統,資料庫,...

C 的兩個感悟

今天,用到memset void char c,size t 用的時候,突然發現不明白其對應的型別要求。就是void 是什麼要求呢?我看了一下msdn,該函式功能是對每個byte進行賦值,所賦的值就是c,個數是size t的值。那麼,其它型別能不能呼叫這個函式呢?我是了一下。int main 發現,...

C 的兩個感悟

今天,用到memset void char c,size t 用的時候,突然發現不明白其對應的型別要求。就是void 是什麼要求呢?我看了一下msdn,該函式功能是對每個byte進行賦值,所賦的值就是c,個數是size t的值。那麼,其它型別能不能呼叫這個函式呢?我是了一下。int main 發現,...