在一个关于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更多的一些看法,其实任何编程语言都有他自身的魅力,你要选择一门你所喜欢的编程语言并且迎合它,也就是想办法将他的魅力发挥到极致。