BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #40036同步于 2010/6/2
CPP机器人发帖

[合集] 【转帖】Linux之父炮轰C++:糟糕程序员的垃圾语言

shenlei
2010/6/2镜像同步0 回复
☆─────────────────────────────────────☆ aFox (一狐) 于 (Fri Dec 11 12:04:25 2009) 提到: 个人观点是:没有最好的语言,只有最喜欢的语言。 以下内容为转载部分。 ------ Linux之父Linus Torvalds为了Linux内核开发而专门打造的版本控制软件Git已经引起了业界的广泛关注。昨天,有一位Dmitry Kakurin老兄在查看了源代码之后,发现使用的是纯C而非C++,表示不可理解,他直言:“别拿可移植性说事儿,这是屁话(BS,bullshit)。“(此外,他还批评Git蛮力地直接操作文本,既啰嗦又易错,而且很难跟上高层代码逻辑。)” 这个BS引起了Torvalds的强烈反应,他用“*YOU* are full of bullshit.”(你才满嘴屁话呢)作为自己反驳的开场白。接着,他先转向了对C++的罕见的火药味十足的炮轰: “C++是一种糟糕的(horrible)语言。而且因为有大量不够标准的程序员在使用而使情况更糟,以至于极容易产生彻头彻尾的垃圾(total and utter crap)。老实说,选择C就是为了把C++程序员踢出去。……我有这样的结论,任何喜欢用C++而不是C开发项目的程序员可能都是我希望踢出去的人,免得他们来搞乱我参与的项目。C++会导致非常非常糟糕的设计选择。你们这些C++程序员总是一上来就用语言的那些‘漂亮的’库特性比如STL、Boost 和其他彻头彻尾的垃圾,这可能对你们的程序有所‘帮助’,但是却会导致: ——当库无法工作时无穷无尽的折磨(别跟我说什么STL尤其是Boost很稳定而且可移植性很好,那全是屁话,而且一点都不可笑) ——低效的抽象编程模型,可能在两年之后你会注意到有些抽象效果不怎么样,但是所有代码已经依赖于围绕它设计的‘漂亮’对象模型了,如果不重写应用程序,就无法改正。 也就是说,使用优秀的、高效的、系统级的和可移植的C++的唯一方式,最终还是限于使用C本身具有的所有特性。项目限制只用C,意味着参与的人不会捣乱,也意味着会得到许多真正懂得底层问题,而不会折腾那些白痴‘对象模型’垃圾的程序员。 所以,我很抱歉,但是对于Git这样效率是主要目标的软件,C++的所谓优点只是巨大的错误。而我们将看不到这一点的人排除在外却成了一个巨大的附加优势。如果你想要用C++写的版本控制系统,去玩Monotone吧。他们确实使用了‘真格的数据库’,使用了‘漂亮的面向对象库’、使用了‘漂亮的C++抽象 ’。可是说老实话,所有这些对某些计算机专业人士而言富于吸引力的设计决定,其最终结果确是一堆可怕、难以维护的垃圾。” 【070907更新】Torvalds和Dmitry Kakurin争论继续中。对Torvalds的回击,Dmitry反唇相讥: “随着只用C编程的恐龙们逐渐灭绝,你很快就会发现只剩下自己一个人在固执己见。用Git贡献者的数量是说明不了问题的。<显然C++开发者也能够贡献C代码。但是以为他们喜欢这种方式,那可就错了。 没有C的时候我用汇编编程。然后在C++诞生之前,我转向了C。现在我使用C++和C#,而且不再走回头路。差劲的程序员用任何语言都写不出好程序。但是为了将差劲的贡献者拒之门外这样一个没谱的理由而惩罚优秀的开发者,这简直是胡闹。” 只过了10几分钟,Torvalds就回贴了: “和你不同的是,我实实在在地给出了不喜欢C++的原因,而且指出了它可能导致的各种问题的一些例子。而你呢,没有给出一条像样的使用C++的理由。事实上,Git比其他软件配置管理软件都要好,而好的品味(taste)和C正是原因之一。” 对上面的最后一句话,Torvalds后来又做了如下补充: “说得更具体一些: ——简单和清晰的核心数据结构, 非常精益(lean)且颇具雄心的暧昧管理着它们,将“简单胜于花哨”这一方法发挥到极致。 ——有意识地不抽象数据结构和算法,因为它们恰恰是Git核心的全部要素(whole point)。 如果你想用更花哨的语言,C++绝对是最糟糕的选择。如果想要真正的高级特性,那就选择有垃圾回收或者好的系统集成的,而不是既缺乏C的简约(sparseness)又缺乏C的直接而且没有重要概念的高层 绑定(high-level bindings to important concepts)的东西。 一言以蔽之,C++正处在困境当中,它既无法帮助原型化或者简单的GUI编程足够简化从而真正可用,不是C那样积极地鼓励你使用简单和直接的语言构造的精益系统编程语言。” (另一位同学插了一句:这还没有提到很难找到两个C++编译器支持同样的特性。) “这与什么恐龙毫无关系。好的品味永远不会过时。将C与汇编语言相提并论,恰恰说明你对自己所讨论的问题缺乏起码的概念(don't have a friggin idea)。” 争论还在继续。半个小时之后,半小时后,Dmitry回帖: “我说过,这是一种信仰问题。因此,任何讲道理和争论都会无穷无尽,而且也毫无意义,就像任何其他宗教问题一样。 我来讲讲Git开发应该使用C++的理由(而不是一般意义上C++对任何项目都更好的理由,这种说法同样也是毫无意义的): 1. 好的String类能够大大提高代码的可读性(而且代码也会显著减少) 2. 好的Buffer类——理由同上 3. 管理内存和文件/套接字/锁句柄的智能指针和智能句柄 就目前而言,通过这种繁琐的宏管理字符串和内存,很难看出高层逻辑。” 接下来他的语气变得缓和,甚至最后还用了一个笑脸: “以我之见,Git具有非常漂亮的高层设计(对象数据库,使用散列,数据和元数据的简单而且容易访问的存储。)向你赞一个! 但是具体实现方式——C和shell脚本的混合、自底向上发展出来的命令行界面就很一般了。 我可没有将C与汇编语言相提并论。我只是要指出我曾经用许多不同的语言编程,目睹了糟糕的程序员用任何语言都会写出差劲的代码。因此这实际上是与语言无关的。” Torvalds则依然怒气未消,他反驳Dmitry对Git用宏管理字符串和内存的批评: “完全是屁话。字符串/内存管理根本无关紧要。还是去看看源代码吧(我敢打赌你没有看过)。这不是重要的部分,而且也不复杂。唯一真正重要的部分是设计。有些部分之所以是用 ' 原型化语言 ' 编写,恰恰是因为它们不是核心部分,而且会被C慢慢地替换掉。C++可没有办法替换shell脚本或者Perl代码。而且C++也没办法让真正核心的部分变得更好。 显然你这一辈子已经经历了 ' 汇编-> C -> C++/C# ' 的转变过程,你将我这样一直坚持用C的比作 ' 恐龙 ',似乎这是一种向更好/更现代的语言不可避免的演进。这是毫无根据的,因为C在很多方面都远远优于C++(更优于C#),包括可移植性,还有接口和低层支持。 你当然可以用任何语言编写糟糕的代码。但是,有些语言,尤其是带有一些心理(mental)包袱的语言本身就非常糟糕。你这样的新手跑来指出一些绝对无关紧要的补丁特性(此处应该指C++对C的增强特性),用它们作为一种语言优越的论据(这些东西语言原作者都不喜欢),这一事实本身恰恰说明你满脑子都是糊涂概念,应该好好醒悟一下了。 对于Git核心代码真正重要的,是诸如这样的事情:编写自己的对象分配代码,使内存占用尽可能小,从而能够高效地记录百万对象的标志。这实际上是为树形关系的多个对象编写本质上非常优化的分析程序,因为这里没有任何抽象。这绝对是在原始内存字节一级上的。 这些事情能够用C之外的语言编写吗?当然可以。但是那些认为C++字符串处理这样的高级特性很重要的人肯定是写不出来的。 事实上,这正是C擅长的事情。不仅指语言本身,还包括一种必需的心态(mentality)。C最大的优点之一,就是它不会使你认为程序是什么高层的东西。正是后一种心态会使你明显偏向其他语言,但实际上从Git的角度看来,所谓 ' 高层 ' 恰恰是错误的。” ☆─────────────────────────────────────☆ jokerlee (Jackal The Dire) 于 (Fri Dec 11 12:29:55 2009) 提到: 咋又是这篇..... ☆─────────────────────────────────────☆ jmpesp (无止境思索下去...) 于 (Fri Dec 11 12:36:46 2009) 提到: 其实c和c++让我选 我自然而然的选择了c。。。 ☆─────────────────────────────────────☆ jokerlee (Jackal The Dire) 于 (Fri Dec 11 12:45:12 2009) 提到: 去跟一个底层系统程序员争论C好还是C++好,这哥们确实有点脑残 ☆─────────────────────────────────────☆ ericyosho (ericyosho) 于 (Fri Dec 11 12:57:00 2009) 提到: 哥们儿找的是寂寞…… ☆─────────────────────────────────────☆ Yamauchi (山内) 于 (Fri Dec 11 13:05:42 2009) 提到: 不知道是第几次看到这个了 ☆─────────────────────────────────────☆ zebraSecond (雪箭) 于 (Fri Dec 11 13:20:14 2009) 提到: 又看到了一个更详细点的版本 ☆─────────────────────────────────────☆ evertime0007 (消失在风中) 于 (Fri Dec 11 14:48:13 2009) 提到: 大神怒了 ☆─────────────────────────────────────☆ Guilt (恶魔) 于 (Fri Dec 11 15:12:49 2009) 提到: 挖坟么 ☆─────────────────────────────────────☆ Dealer (Dealer) 于 (Fri Dec 11 15:27:55 2009) 提到: 这。。。。 ☆─────────────────────────────────────☆ String (Walking in Memphis) 于 (Fri Dec 11 15:43:54 2009) 提到: 万年老帖。。。。 ☆─────────────────────────────────────☆ FadeToBlack (拜萝卜教 | gfw nmb) 于 (Fri Dec 11 15:49:54 2009) 提到: lz无聊死了,既然说“个人观点是:没有最好的语言,只有最喜欢的语言”还转...而且还是这么老的帖子 做点有意义的事情不好吗 ☆─────────────────────────────────────☆ DrJan ( DrJan) 于 (Fri Dec 11 15:51:57 2009) 提到: 呃 其实看着挺好玩的 偶尔娱乐 我觉得挺好 咱们这种火星的就没看过。。 【 在 FadeToBlack 的大作中提到: 】 : lz无聊死了,既然说“个人观点是:没有最好的语言,只有最喜欢的语言”还转...而且还是这么老的帖子 : 做点有意义的事情不好吗 ☆─────────────────────────────────────☆ a403961185 (堕落不是罪) 于 (Fri Dec 11 15:56:38 2009) 提到: 我没看过,也不想看,好长 ☆─────────────────────────────────────☆ wuunicorn (-Q小分队|飞啦) 于 (Fri Dec 11 16:40:02 2009) 提到: 我很不想说lz火星~但是也不能挖这么老的坟出来吧 ☆─────────────────────────────────────☆ yyiinn1 (冷清的冬天) 于 (Fri Dec 11 16:46:47 2009) 提到: 我也没看过 ☆─────────────────────────────────────☆ PtwCJ (鲜的每日C|女共产党员的男朋友) 于 (Fri Dec 11 16:55:14 2009) 提到: 转贴的时候看看原文时间,1年以上就不要转了...自个欣赏一下就好 【 在 aFox (一狐) 的大作中提到: 】 : 个人观点是:没有最好的语言,只有最喜欢的语言。 : 以下内容为转载部分。 : ------ : ................... ☆─────────────────────────────────────☆ LoveRose (Ericlub|路过团镇团正太) 于 (Fri Dec 11 17:49:13 2009) 提到: 这个有点不是一般实在太火星了吧 【 在 aFox (一狐) 的大作中提到: 】 : 个人观点是:没有最好的语言,只有最喜欢的语言。 : 以下内容为转载部分。 : ------ : ................... ☆─────────────────────────────────────☆ edious (fledging) 于 (Fri Dec 11 18:20:16 2009) 提到: 火星了 我没看过啊 ☆─────────────────────────────────────☆ potatossss (薯仔) 于 (Fri Dec 11 19:00:01 2009) 提到: 火星帖。 ☆─────────────────────────────────────☆ zxsword (一切,一切都会变好的) 于 (Fri Dec 11 19:13:50 2009) 提到: 这是第几次了。。。 ☆─────────────────────────────────────☆ happyhbbey (飞非菲) 于 (Fri Dec 11 19:42:43 2009) 提到: 呃…… ☆─────────────────────────────────────☆ Dark (The Star of Darkness) 于 (Fri Dec 11 20:38:00 2009) 提到: 惊现老克!!哈哈 又上班看网页 【 在 potatossss 的大作中提到: 】 : 火星帖。 ☆─────────────────────────────────────☆ dawendong (达文西的兄弟) 于 (Fri Dec 11 22:33:21 2009) 提到: 又见它…… 【 在 aFox 的大作中提到: 】 : 个人观点是:没有最好的语言,只有最喜欢的语言。 : 以下内容为转载部分。 : ------ : ................... ☆─────────────────────────────────────☆ hydralisk001 (hydralisk001) 于 (Fri Dec 11 22:38:16 2009) 提到: 没看过,所以我不是火星人? ☆─────────────────────────────────────☆ lichehuo (忧郁门门主) 于 (Fri Dec 11 23:51:33 2009) 提到: naocan ☆─────────────────────────────────────☆ aFox (一狐) 于 (Fri Dec 11 23:54:29 2009) 提到: 初来乍到,请多指教。 【 在 aFox 的大作中提到: 】 : 个人观点是:没有最好的语言,只有最喜欢的语言。 : 以下内容为转载部分。 : ------ : ................... ☆─────────────────────────────────────☆ ltmit (ltmit) 于 (Sat Dec 12 17:14:22 2009) 提到: 咱C/c++/asm混着使。。。这个真打不得仗的。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。