為什么Linux下編程很少用C++,而是用C更多?


在一個關於LKML的討論中,Linus給出了為什么不用C++來寫Linux內核的理由:

“事實上,我們曾經嘗試過用C++來寫,是在1992年的時候。很糟糕。相信我--用C++來寫內核代碼是一個非常愚蠢的想法。”


 

“實際上,C++編譯器是很不可靠的。在1992年的時候情況就很差了,而且一些基礎的東西到現在還沒有改變:(1)整個C++對Exception的處理根本就是不完整的,特別是在寫內核的時候。(2)任何喜歡把跟內存分配有關的功能匿藏起來的編譯器或者程序語言對於編寫內核來說都是錯誤的選擇。(3)在C里面你也可以寫面向對象的代碼(寫文件系統的時候很有用),是不需要C++的。”


 

從技術角度猜測一下:從對編譯的機器代碼的把握度,C比C++好多了。系統程序員幾乎看着c就沒知道編譯器里出來的匯編代碼的樣子。而c++編譯器出來的就復雜多了,一個對象this指針,再加上各種虛表,當然還有各種拷貝構造等等。要完全把控確實不容易。

從c++的高級語言特性來說,模板,多態等特性,到底在系統開發中用還是不用呢?這是一個很現實的問題。除非能夠很好的把控這些高級特性,否則輕導致編譯出來的代碼膨脹,重則導致奇怪的問題。而且內核調試和應用程序調試完全不是一回事啊…所以bochs雖然都轉成c++了,但開發說明里明確要求不允許使用模板。


 

最后還有一點不能忽略,linux內核是跨平台的,所有的平台都有對應的c語言編譯器,而且應該都優化的不錯。而不是所有的平台都有c++編譯器,即使有也不一定優化的效率很高。

當然還有其他因素。。。


 

感謝您的閱讀,以上就是對為什么Linux下編程很少用C++,而是用C更多的一些看法,其實任何編程語言都有他自身的魅力,你要選擇一門你所喜歡的編程語言並且迎合它,也就是想辦法將他的魅力發揮到極致。

好了,更多 C/C++相關的內容盡在C語言/C++學習君羊,“點擊鏈接”,敬請關注!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM