Linus Torvalds 的 C++ 水平如何,为什么他敢炮轰此编程语言

 我来答
匿名用户
推荐于2016-01-03
展开全部
Linus 只炮轰过一次,那是因为 git 选择了 C 语言,很多人「选择性无视了这段话的由来」。这段话的来由是因为有一位大炮在邮件列表中公开说 Linus 在 git 项目中使用 C 语言进行开发的理由是 「BULLSHIT」,所以 Linus 才开炮说「你才是 BULLSHIT 」,然后明确说明了(大意),因为 C++ 有一群猪队友,为了避免使用 C++ 的猪队友来搞乱代码,所以 git 项目使用纯 C 写作。
各位简单的思考一下,你开发一个软件,人家骂人的都跑到你的邮件列表(国人可以理解为这就是官方论坛)里面来开骂了,你还不发飚能行?
是否炮轰,与他本人的 C++ 水平没有关系,而且他炮轰的只是那个大炮,以及一部分猪队友,而非所有的 C++ 程序员。这只与他能接触到的那些 C++ 程序员的水平有关系。作为非商业的开源软件,其实他并不能选择谁来参与他的项目。不能够根据项目的技术需求来挑选人,而只能通过现有人才的力量来选择项目技术。
事实上,他的观点没什么大问题。Linus 自称在 Linux 团队中的主要职责是代码审查。换句话说他评估什么代码是好的,什么是不好的,什么该进入代码,什么不该进入。
他明白哪些人会来参加他的项目,哪些人会为他的项目贡献代码,如果这些人的 C++ 能力都不如 C 能力,那么他就绝对不能选择 C++ ,这与他本人的 C++ 能力没有关系,也与 C++ 本身没有关系,而是作为代码审查者,他太清楚与他合作的那些人写 C++ 程序的能力水平了。
【李劼的回答(25票)】:
Linus专注的领域是os kernel,在这个领域里目前没有任何一个语言可以撼动C语言的主导地位,世界上使用最广泛的操作系统kernel——linux和windows NT都是用C语言写的。
我总结其原因有这么几点:
第一,C语言的性能模型和控制流非常简单清晰,更接近硬件、更接近汇编。C++会引入不必要的复杂性。
具体说:
1) 性能模型变得不直观
首先明确一点,内核是对性能的要求非常严格。C++很多语言特性是牺牲性能tradeoff开发效率的,不适用于内核开发。C++声明一个栈上类变量的开销很可能因为一个复杂的构造函数变得非常大,而且一眼还看不出来。另外拷贝构造函数、运算符重载、STL这些都会带来同样的问题,结果就是制造很多额外的profiling工作(想想C++11里move语义为了解决什么问题)。
2) 控制流变得不直观
这个问题的原因是C++引入了构造函数和析构函数。大家应该都见过,C++会引入全局类变量的,使得模块载入的时候会有一些全局变量的constructor被调用,这些constructor可能还会调用一些别的东西,这会导致控制流变得不直观,尤其内核对顺序非常敏感,这会带来很多麻烦的问题。
第二,Kernel里用不上继承
内核很少会用到inheritance,反而状态机用的会比较多。内核会涉及到很多概念,比如VM、Thread、Process、Schedule、FS等等,每个概念都是相对独立和完整的概念,很难也没有必要抽象成继承链。复杂的继承关系出现在应用层。OO是一种模块化代码的方式,但是并不适合所有的场景。无论是linux还是nt kernel的代码模块化都做的非常好,尤其是nt kernel,微内核代码非常少,LZ感兴趣可以找来看看。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式