您的位置:首頁>設計>正文

最完美的語言C++?大牛來帶你解讀真正的C++是否為完美的語言

C++很複雜, 這門語言有太多的誘惑, 程式師需要極度的自律。 而C++設計成這樣也是因為Bjarne說過他不希望把自己任何的喜惡都加在語言上, 他希望程式師自己去判定, 完全信任程式師。 然而, 資訊時代發展到現在了, 程式師也已經不像80, 90時代一樣, 似乎是少數人才可以做得事情, 現在可以寫冒泡排序都可以找到一個程式設計開發工作, 不需要理解電腦組織, 不需要理解作業系統等等。 而由於電腦基礎的缺失, 這樣的程式師卻往往是需要語言來説明規範的, 需要語言幫他選擇, 而非他來選擇語言的特性。

而這樣的發展也是必然, 如互聯網時代, 很多時候就是需要可以快速構建搶佔市場, 所以需要很快的搭建出來可運行的業務, 而這時候很多情況下會選擇動態語言。 當然, 這樣很多時候也會有代價, 當達到很大規模時, 會回過頭借助Native的語言, 如C++。

也正是這樣, C++具有著很大的複雜性, 融合OOP, GP等各種程式設計范式於一身, 而這也是對新手不利的地方。 雖然現在的C++已經進化了, C++11/14對於新手來說已經算友善了, 少了很多歷史殘留的坑, 但是C++發展的路途增加新特性也是對新手的更大學習負擔, 如增加的右值引用, std::move, std::forward到底又是什麼東西?

學程式設計最重要的是實踐, 就是寫代碼、看別人寫的代碼、再寫代碼, 你看再多的書, 不寫代碼, 你還是不會程式設計。 但是寫代碼也要講究方法循序漸進, 不能剛學了幾天語法, 就想寫個作業系統什麼的, 樹立這種不切實際的目標只會讓你的自信受到嚴重打擊迷失自我。 同時小編推薦一個學C/C++的學習群627819188無論你是大牛還是小白, 是想轉行還是想入行都可以來瞭解一起進步一起學習!群內有很多乾貨和技術分享!

C++的複雜性也體現在類型系統上, 不知道多少人都被C++的隱式類型轉換給弄的頭昏腦脹, 如為什麼會有bool轉換這樣的東西。 同時, 加入了泛型程式設計和右值引用後, 那麼類型推導也變得複雜。 如:

為什麼明明是T&&, 卻會讓我的類型推導出不同的類型, 這個時候對於初次接觸的人都是不解。 以前有句話叫做沒有讀過Effective C++的C++程式師不應該讓他開發, 我覺得這句話現在也可以引申為沒有讀過Effective Modern C++的C++程式師不應該讓他開發, 因為這本書寫的真的很好很透徹, 而這本書就詳細解釋了這個例子的原因。

下面我想說說上面幾個用戶提到的問題, 如模組化系統, 編譯慢,

ABI, 異常等問題。

的確, C++在不斷的進化, 在不斷的改善, 也同時增加了新手的學習。 如上面有人談到C++沒有模組系統, 編譯慢的問題, 而C++17有一篇提案講述的正是這個, 叫做Module System, 簡單的語法:

而這篇提案也提到了有用戶答的私有成員問題, 如在Module M聲明的foo是可見的, 而bar則是完全不可見,

而遠非私有成員的不可訪問, 但可見。

而其實大家痛苦的很多地方, C++標準委員會的人也不是不知道, 如ABI的問題, 也有提案說想要做一個標準, 這篇提案是微軟的Herb提出的: https://isocpp.org/files/papers/n4028.pdf 而前一篇的Module System深得Bjarne的喜歡, 而通過的幾率其實也是蠻大的了, 而Herb這篇我不知道, 說不定也已經被斃了, 只是我不知道。

對於異常, 大家都在討論用不用。 可是, 對於使用者來說, 是否真的需要異常呢?我曾在一個回答中說C++的異常是很雞肋的東西, 或者說的更直白點, 要用好C++的異常不容易, 不是無腦的try throw就好, C++也不會像Java一樣會強制要求你, C++的設計就是程式師自己做主。

而上面同樣說到沒有Metadata, 沒有反射。 而C++17也在考慮加入反射。 是的, 正如C++標準委員會之前定的計畫一樣, C++11是大改動,C++14小修改,C++17又是大改動。

總體來說,C++真的很複雜,或許現階段還有ABI,還有編譯連結模型,還有類型系統,模組系統等的問題,其實C++也許都可以解決,但是解決完後又變複雜了,因為要保持與之前的相容,還要保證高性能這一根本立足點,這真是對智力的一大考驗啊,所以我一直在說C++標準委員會的人都蠻碉的,比如C++11提出的Memory Model,真是把能抽象剝離的都抽象剝離出來了,很精細。

我是很喜愛C++的,更是Bjarne的腦殘粉,也靠著C++在吃飯。我很欣喜的看著C++不斷的變好,但是也必須承認C++還有很多不足,如很多小夥伴和我上面提到的很多問題都的確是客觀存在的。

C++11是大改動,C++14小修改,C++17又是大改動。

總體來說,C++真的很複雜,或許現階段還有ABI,還有編譯連結模型,還有類型系統,模組系統等的問題,其實C++也許都可以解決,但是解決完後又變複雜了,因為要保持與之前的相容,還要保證高性能這一根本立足點,這真是對智力的一大考驗啊,所以我一直在說C++標準委員會的人都蠻碉的,比如C++11提出的Memory Model,真是把能抽象剝離的都抽象剝離出來了,很精細。

我是很喜愛C++的,更是Bjarne的腦殘粉,也靠著C++在吃飯。我很欣喜的看著C++不斷的變好,但是也必須承認C++還有很多不足,如很多小夥伴和我上面提到的很多問題都的確是客觀存在的。

Next Article
喜欢就按个赞吧!!!
点击关闭提示