`
妖妖然
  • 浏览: 47655 次
  • 性别: Icon_minigender_2
  • 来自: 大连
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Linux之父炮轰C++:糟糕程序员垃圾语言

阅读更多

  "Linux内核的创始人Linus Torvalds最近在一封邮件中说明了内核开发需要使用C语言而非C++的理由。在庞大的项目中,人们对不是自己开发的模块并不了解,能快速理解其他模块中函数的 确切含义才能提高开发效率,而C++引入的各种抽象则使代码变得晦涩难读。

  另外Linus还认为C++的内存管理方式很弱智(that idiotic "new" keyword in C++)。邮件最后的总结是:很显然C并不适合所有项目,不过C++?还是算了吧。垃圾回收和并发等等,这些才是真正重要的特性。

  那么他所期待的C++替代会是什么呢?是方兴未艾的Go语言?还是即将迎来2.0的D语言?或是用 Java, .net这些基于虚拟机的语言去代替?"

  此文贴出后,引起了大家的较多关注,是意料之中的事情。毕竟,C、C++、Linux之父,都是大家最最熟悉的东西。但是许多同学把精力放在纯粹语言优劣的争论上,就没有太大意思了。这场争论的主角之一,微软的Dmitry Kakurin有一句话非常正确:"这是一种信仰问题。因此,任何讲道理和争论都会无穷无尽,而且也毫无意义……"

  我想,正确的态度,应该是从高手们的争论中汲取营养,提高和深化自己对相关语言的认识,结合自己的实际环境,想想应该怎么学,怎么用。孟岩和云风、pongba在这方面都有"有营养的"文字,大家可以看看。

  各种语言都是有自己的局限性的,也都有自己最擅长的用武之地。今天,软件项目中越来越倾向于采用多语言开发,所以与其花精力做口舌之争,不如多学学对方的语言。写《程序员修炼之路》的Andy Hunt和David Thomas大师早就教导我们,要在软件开发这个行当立于不败之地,应该"每年学一种新的语言"。

  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++ 抽象'。可是说老实话,所有这些对某些计算机专业人士而言富于吸引力的设计决定,其最终结果确是一堆可怕、难以维护的垃圾。"

  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)。"
分享到:
评论

相关推荐

    Linux之父炮轰C++是糟糕程序员的垃圾语言

    Linux 之父 Linus Torvalds 在最近的一篇文章中炮轰 C++,称其为糟糕的语言,认为它会导致非常糟糕的设计选择和低效的抽象编程模型。Torvalds 认为,C++ 的所谓优点只是巨大的错误,并且会导致项目中的混乱和垃圾...

    该是普及G语言的时候了——LabVIEW学习

    Linux之父炮轰C++:糟糕程序员的垃圾语言 C语言已经死了,5个需要忘却它的理由 看看9种编程语言的发明者是怎么说的 顺应时代没有不好,但是时代在变,大家在顺应着的“时代”是真正的时代吗? 模糊!就停下来,停...

    LINUX之父炮轰说

    ### Linux之父炮轰C++:一场关于编程语言选择的争议 #### 背景介绍 Linus Torvalds,作为Linux操作系统的创始人,在技术界享有极高的声誉。他在开发过程中对各种技术的选择和评估也一直备受关注。本文将探讨Linus ...

    用类封装的战舰小游戏

    本程序模拟了一个炮轰战舰的小游戏,战舰由三块组成,随机生成,炮弹由用户输入。击沉则告之,并显示最终分数,仅作为C++入门新手对类的封装的熟悉之用

    devbox:我用作开发箱的 Docker 映像

    我用以下方法炮轰它: docker run -i -t --volumes-from michiel-data devbox /bin/bash 在我完成了我想做的工作并将我的更改推送到 github 之后,我再次输入“exit”退出。 在我的数据容器(在我的 VPS 上称为...

    二十三种设计模式【PDF版】

    GoF 的《设计模式》是所有面向对象语言(C++ Java C#)的基础,只不过不同的语言将之实现得更方便地使用。 GOF 的设计模式是一座"桥" 就 Java 语言体系来说,GOF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一...

    星辰急便总裁陈平炮轰电商自建物流.docx

    ### 星辰急便总裁陈平批评电商自建物流现象分析 #### 一、背景概述 随着电子商务行业的迅速发展,物流作为支撑电商运作的重要环节,其地位愈发凸显。近年来,电商平台与传统物流服务商之间的关系变得微妙,特别是...

    javaeye月刊2008年4月 总第2期.pdf

    2. **PHP语言创造者Gutmans炮轰Java已经输掉Web之战** PHP的创始人Dmitry Stogov(Gutmans)认为Java在Web开发领域的竞争中落后于PHP。他可能基于PHP的易用性、部署速度以及社区支持等方面的优势来做出这个论断,但...

    大炮轰小鸟

    一个flash as2.0编写的小游戏,可以提供给需要的朋友参考

    真正免费,好用的SD、TF卡数据恢复软件,带注册文件,不能用炮轰我。

    值得注意的是,MediaRecovery的注册文件是其亮点之一。注册文件通常用于解除软件的试用限制或功能限制,使得用户能够无限制地使用软件的所有功能。这意味着用户可以长期依赖MediaRecovery进行数据恢复,而不用担心...

    iPhone 17或将首次在印度研发;余承东炮轰车企一把手不懂AEB;谷歌聊天机器人“背叛”公司,

    互联网快讯、AI,发展态势,互联网快讯、AI,发展态势互联网快讯、AI,发展态势互联网快讯、AI,发展态势互联网快讯、AI,发展态势互联网快讯、AI,发展态势互联网快讯、AI,发展态势互联网快讯、AI,发展态势互联网...

    最新 部编人教版八年级历史上册期中考试前复习提纲.doc

    - 过程:1856年英军炮轰广州,1858年攻陷大沽,逼近北京。 - 条约:1858年的《天津条约》开放汉口、南京等十处为通商口岸,外国商船和军舰可在长江各口岸自由航行。 - 火烧圆明园:1860年英法联军洗劫并烧毁...

    KC网络电话辅助呼叫

    KC网路电话辅助呼叫 软件自动重播,挂断KC网路电话

    闪电蜂口碑传播战役-115页.pdf

    - 利用社交媒体平台发布炮轰行业“潜”规则的微漫画等内容。 - 增强品牌的互动性和话题性。 #### 3.3 病毒视频 - **内容创意**: - 《维修手机奇葩记》系列视频,通过幽默的方式揭示手机维修中的问题。 - 视频...

    水浒传108好汉及其主要英雄事迹.doc

    《水浒传》是中国四大古典小说之一,作者是明朝的施耐庵,讲述了北宋末年以宋江为首的一百零八位好汉在梁山起义的故事。这些好汉各具特色,他们的事迹和性格特点成为了中国传统文化中的经典形象。以下是其中部分好汉...

    高中历史-第二次鸦片战争PPT课件.ppt

    - 爆发:1856年10月,英国率先挑起战争,炮轰广州,标志着第二次鸦片战争的开始。 - 英法联军攻陷大沽、天津:1858年,英法联军攻占大沽口,随后攻陷天津,迫使清政府签订《天津条约》。 - 大沽之战与英法联军...

    authorware7.0 作品--士兵突击

    这是我们课本附赠光盘的 精品赏析 士兵突击的 绝对好资源 如果下了感觉资源不好 你可以直接加我QQ:451092524 来炮轰我

    岳麓版历史八年级上册第2课《第二次鸦片战争》教案(三).docx

    - 1856年,英军炮轰广州,引发战争,随后英法联军攻陷广州。 - 1858年,清政府被迫与英、法、美、俄签订《天津条约》,开放更多通商口岸,并允许外国公使驻京。 3. 《天津条约》主要内容: - 外国公使进驻北京。...

Global site tag (gtag.js) - Google Analytics