本文內容摘自http://blog.csdn.net/turingbook/article/details/1775488程序員
C++是一種糟糕的(horrible)語言。並且由於有大量不夠標準的程序員在使用而使狀況更糟,以致於極容易產生徹頭徹尾的垃圾(total and utter crap)。老實說,選擇C就是爲了把C++程序員踢出去。……我有這樣的結論,任何喜歡用C++而不是C開發項目的程序員可能都是我但願踢出去的人,省得他們來搞亂我參與的項目。C++會致使很是很是糟糕的設計選擇。大家這些C++程序員老是一上來就用語言的那些"漂亮的"庫特性好比STL、Boost和其餘徹頭徹尾的垃圾,這可能對大家的程序有所"幫助",可是卻會致使:算法
——當庫沒法工做時無窮無盡的折磨(別跟我說什麼STL尤爲是Boost很穩定並且可移植性很好,那全是屁話,並且一點都不好笑)shell
——低效的抽象編程模型,可能在兩年以後你會注意到有些抽象效果不怎麼樣,可是全部代碼已經依賴於圍繞它設計的‘漂亮’對象模型了,若是不重寫應用程序,就沒法改正。數據庫
也就是說,使用優秀的、高效的、系統級的和可移植的C++的惟一方式,最終仍是限於使用C自己具備的全部特性。項目限制只用C,意味着參與的人不會搗亂,也意味着會獲得許多真正懂得底層問題,而不會折騰那些白癡"對象模型"垃圾的程序員。編程
因此,我很抱歉,可是對於Git這樣效率是主要目標的軟件,C++的所謂優勢只是巨大的錯誤。而咱們將看不到這一點的人排除在外卻成了一個巨大的附加優點。數據結構
若是你想要用C++寫的版本控制系統,去玩Monotone吧。他們確實使用了"真格的數據庫",使用了"漂亮的面向對象庫"、使用了"漂亮的C++抽象"。但是說老實話,全部這些對某些計算機專業人士而言富於吸引力的設計決定,其最終結果確是一堆可怕、難以維護的垃圾。數據結構和算法
事實上,Git比其餘軟件配置管理軟件都要好,而好的品味(taste)和C正是緣由之一。說得更具體一些:編程語言
——簡單和清晰的核心數據結構, 很是精益(lean)且頗具雄心的代碼管理着它們,將」簡單勝於花哨」這一方法發揮到極致。
——有意識地不抽象數據結構和算法,由於它們偏偏是Git核心的所有要素(whole point)。ide
若是你想用更花哨的語言,C++絕對是最糟糕的選擇。若是想要真正的高級特性,那就選擇有垃圾回收或者好的系統集成的,而不是既缺少C的簡約(sparseness)又缺少C的直接並且沒有重要概念的高層 綁定(high-level bindings to important concepts)的東西。優化
一言以蔽之,C++正處在困境當中,它既沒法幫助原型化或者簡單的GUI編程足夠簡化從而真正可用,又 不是C那樣積極地鼓勵你使用簡單和直接的語言構造的精益系統編程語言。
好的品味永遠不會過期。將C與彙編語言相提並論,偏偏說明你對本身所討論的問題缺少起碼的概念(don't have a friggin idea)。"
字符串/內存管理根本可有可無。仍是去看看源代碼吧(我敢打賭你沒有看過)。這不是重要的部分,並且也不復雜。惟一真正重要的部分是設計。有些部分之因此是用 "原型化語言"編寫,偏偏是由於它們不是核心部分,並且會被C慢慢地替換掉。C++可沒有辦法替換shell腳本或者Perl代碼。並且C++也沒辦法讓真正核心的部分變得更好。
C在不少方面都遠遠優於C++(更優於C#),包括可移植性,還有接口和低層支持。
你固然能夠用任何語言編寫糟糕的代碼。可是,有些語言,尤爲是帶有一些心理(mental)包袱的語言自己就很是糟糕。你這樣的新手跑來指出一些絕對可有可無的補丁特性(此處應該指C++對C的加強特性),用它們做爲一種語言優越的論據(這些東西語言原做者都不喜歡),這一事實自己偏偏說明你滿腦子都是糊塗概念,應該好好醒悟一下了。
對於Git核心代碼真正重要的,是諸如這樣的事情:編寫本身的對象分配代碼,使內存佔用儘量小,從而可以高效地記錄百萬對象的標誌。這其實是爲樹形關係的多個對象編寫本質上很是優化的分析程序,由於這裏沒有任何抽象。這絕對是在原始內存字節一級上的。
這些事情可以用C以外的語言編寫嗎?固然能夠。可是那些認爲C++字符串處理這樣的高級特性很重要的人確定是寫不出來的。
事實上,這正是C擅長的事情。不只指語言自己,還包括一種必需的心態(mentality)。C最大的優勢之一,就是它不會使你認爲程序是什麼高層的東西。正是後一種心態會使你明顯偏向其餘語言,但實際上從Git的角度看來,所謂「高層」偏偏是錯誤的。