【pansz的回答(111票)】: 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感兴趣可以找来看看。 【刘项的回答(9票)】: 这个真不知道, 因为实在找不到他写过的C++代码。 【知乎用户的回答(10票)】: 内核到处是OO思想,水平自然在你我之上。 【元亮的回答(8票)】: 这个问题好像是在问 达摩祖师 枪法咋样? 当然如果觉得他不够达摩祖师的级别 也可以问 乔峰 用刀会不会很厉害?真正内力深厚的稻草都可以杀人 扫地僧用的是扫把 轻松制服慕容复他爹和乔峰他爹 语言只是工具 编程思想最重要 能解决实际问题最重要 如觉得无关请 无情的折叠我吧:) 【曾大维的回答(3票)】: windows,linux,unix,mac osx,内核都是c语言、汇编写的。有一种系统是c++写的内核,就是诺基亚的塞班系统,现在已经死掉了,据说代码量比win xp还大,连他们自己的程序员都无法维护,最后就死掉了。 所以c++不是做内核的料,c++可能是最复杂的语言,但是绝对不是最牛逼的语言。 Linus Torvalds不用c++绝对不是他技术不行的问题。 【知乎用户的回答(1票)】: 大神只喜欢用C 至今都找不到他写过其他语言的代码 linux kernel自然不必说 git也是纯C代码 他应该写过一点shell脚本 【蔡磊的回答(0票)】: 没有“老是炮轰吧”,就炮轰过一次,而且轰的是“C++标准太复杂导致不合格使用者太多,容易误用和滥用语言特性”。 你列了一些C++的“好特性”,但作为一个10多年C++用户,我在用其它语言时“唯一”十分想念的C++特性是确定性析构与RAII,其它都可有可无 【龙韵的回答(0票)】: 我不知道连Linux Kernel都能写出来的人, C++的编译器看不懂。 【蒋小冬的回答(0票)】: 其实题主更应该问C++比C到底高明多少? 答案是在相当多领域引入C++除了装逼没有什么积极作用 【刘建东的回答(0票)】: 题主的编程水平如何,竟敢质疑linus炮轰C++!! 【NickQi的回答(1票)】: 为什么不找出他对C++攻击的原话呢?或许他没有喷过C++语言本身,只是C++确实不适合他和他的团队做内核呢? 【nonocast的回答(2票)】: C写成这样,C++会差?语言本身只是工具啊,人家早就是大师了。 【杨欣的回答(0票)】: 用什么工具做的不重要,关键是他做了什么。 【vczh的回答(11票)】: 虽然我没看过他写的C++代码,但是我觉得他的水平不足以跟猪一样的队友一起用C++写linux,所以干脆禁止了(逃 原文地址:知乎 |
|