【pansz的回答(111票)】: Linus 只炮轟過一次,那是因為 git 選擇了 C 語言,很多人「選擇性無視了這段話的由來」。這段話的來由是因為有一位大炮在郵件列表中公開說 Linus 在 git 項目中使用 C 語言進行開發(fā)的理由是 「BULLSHIT」,所以 Linus 才開炮說「你才是 BULLSHIT 」,然后明確說明了(大意),因為 C++ 有一群豬隊友,為了避免使用 C++ 的豬隊友來搞亂代碼,所以 git 項目使用純 C 寫作。 各位簡單的思考一下,你開發(fā)一個軟件,人家罵人的都跑到你的郵件列表(國人可以理解為這就是官方論壇)里面來開罵了,你還不發(fā)飚能行? 是否炮轟,與他本人的 C++ 水平?jīng)]有關(guān)系,而且他炮轟的只是那個大炮,以及一部分豬隊友,而非所有的 C++ 程序員。這只與他能接觸到的那些 C++ 程序員的水平有關(guān)系。作為非商業(yè)的開源軟件,其實他并不能選擇誰來參與他的項目。不能夠根據(jù)項目的技術(shù)需求來挑選人,而只能通過現(xiàn)有人才的力量來選擇項目技術(shù)。 事實上,他的觀點沒什么大問題。Linus 自稱在 Linux 團隊中的主要職責是代碼審查。換句話說他評估什么代碼是好的,什么是不好的,什么該進入代碼,什么不該進入。 他明白哪些人會來參加他的項目,哪些人會為他的項目貢獻代碼,如果這些人的 C++ 能力都不如 C 能力,那么他就絕對不能選擇 C++ ,這與他本人的 C++ 能力沒有關(guān)系,也與 C++ 本身沒有關(guān)系,而是作為代碼審查者,他太清楚與他合作的那些人寫 C++ 程序的能力水平了。 【李劼的回答(25票)】: Linus專注的領(lǐng)域是os kernel,在這個領(lǐng)域里目前沒有任何一個語言可以撼動C語言的主導(dǎo)地位,世界上使用最廣泛的操作系統(tǒng)kernel——linux和windows NT都是用C語言寫的。 我總結(jié)其原因有這么幾點: 第一,C語言的性能模型和控制流非常簡單清晰,更接近硬件、更接近匯編。C++會引入不必要的復(fù)雜性。 具體說: 1) 性能模型變得不直觀 首先明確一點,內(nèi)核是對性能的要求非常嚴格。C++很多語言特性是犧牲性能tradeoff開發(fā)效率的,不適用于內(nèi)核開發(fā)。C++聲明一個棧上類變量的開銷很可能因為一個復(fù)雜的構(gòu)造函數(shù)變得非常大,而且一眼還看不出來。另外拷貝構(gòu)造函數(shù)、運算符重載、STL這些都會帶來同樣的問題,結(jié)果就是制造很多額外的profiling工作(想想C++11里move語義為了解決什么問題)。 2) 控制流變得不直觀 這個問題的原因是C++引入了構(gòu)造函數(shù)和析構(gòu)函數(shù)。大家應(yīng)該都見過,C++會引入全局類變量的,使得模塊載入的時候會有一些全局變量的constructor被調(diào)用,這些constructor可能還會調(diào)用一些別的東西,這會導(dǎo)致控制流變得不直觀,尤其內(nèi)核對順序非常敏感,這會帶來很多麻煩的問題。 第二,Kernel里用不上繼承 內(nèi)核很少會用到inheritance,反而狀態(tài)機用的會比較多。內(nèi)核會涉及到很多概念,比如VM、Thread、Process、Schedule、FS等等,每個概念都是相對獨立和完整的概念,很難也沒有必要抽象成繼承鏈。復(fù)雜的繼承關(guān)系出現(xiàn)在應(yīng)用層。OO是一種模塊化代碼的方式,但是并不適合所有的場景。無論是linux還是nt kernel的代碼模塊化都做的非常好,尤其是nt kernel,微內(nèi)核代碼非常少,LZ感興趣可以找來看看。 【劉項的回答(9票)】: 這個真不知道, 因為實在找不到他寫過的C++代碼。 【知乎用戶的回答(10票)】: 內(nèi)核到處是OO思想,水平自然在你我之上。 【元亮的回答(8票)】: 這個問題好像是在問 達摩祖師 槍法咋樣? 當然如果覺得他不夠達摩祖師的級別 也可以問 喬峰 用刀會不會很厲害?真正內(nèi)力深厚的稻草都可以殺人 掃地僧用的是掃把 輕松制服慕容復(fù)他爹和喬峰他爹 語言只是工具 編程思想最重要 能解決實際問題最重要 如覺得無關(guān)請 無情的折疊我吧:) 【曾大維的回答(3票)】: windows,linux,unix,mac osx,內(nèi)核都是c語言、匯編寫的。有一種系統(tǒng)是c++寫的內(nèi)核,就是諾基亞的塞班系統(tǒng),現(xiàn)在已經(jīng)死掉了,據(jù)說代碼量比win xp還大,連他們自己的程序員都無法維護,最后就死掉了。 所以c++不是做內(nèi)核的料,c++可能是最復(fù)雜的語言,但是絕對不是最牛逼的語言。 Linus Torvalds不用c++絕對不是他技術(shù)不行的問題。 【知乎用戶的回答(1票)】: 大神只喜歡用C 至今都找不到他寫過其他語言的代碼 linux kernel自然不必說 git也是純C代碼 他應(yīng)該寫過一點shell腳本 【蔡磊的回答(0票)】: 沒有“老是炮轟吧”,就炮轟過一次,而且轟的是“C++標準太復(fù)雜導(dǎo)致不合格使用者太多,容易誤用和濫用語言特性”。 你列了一些C++的“好特性”,但作為一個10多年C++用戶,我在用其它語言時“唯一”十分想念的C++特性是確定性析構(gòu)與RAII,其它都可有可無 【龍韻的回答(0票)】: 我不知道連Linux Kernel都能寫出來的人, C++的編譯器看不懂。 【蔣小冬的回答(0票)】: 其實題主更應(yīng)該問C++比C到底高明多少? 答案是在相當多領(lǐng)域引入C++除了裝逼沒有什么積極作用 【劉建東的回答(0票)】: 題主的編程水平如何,竟敢質(zhì)疑linus炮轟C++?。?/p> 【NickQi的回答(1票)】: 為什么不找出他對C++攻擊的原話呢?或許他沒有噴過C++語言本身,只是C++確實不適合他和他的團隊做內(nèi)核呢? 【nonocast的回答(2票)】: C寫成這樣,C++會差?語言本身只是工具啊,人家早就是大師了。 【楊欣的回答(0票)】: 用什么工具做的不重要,關(guān)鍵是他做了什么。 【vczh的回答(11票)】: 雖然我沒看過他寫的C++代碼,但是我覺得他的水平不足以跟豬一樣的隊友一起用C++寫linux,所以干脆禁止了(逃 原文地址:知乎 |
|