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正是原因之一。

  “这与什么恐龙毫无关系。好的品味永远不会过时。将C与汇编语言相提并论,恰恰说明你对自己所讨论的问题缺乏起码的概念(don't have a friggin idea)。”

C++是一种糟糕的语言 Linux之父炮轰C++相关推荐

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

    原文地址为: Linux之父炮轰C++:糟糕程序员的垃圾语言 [图灵图书推荐]Linux程序设计(第3版)  众所期待的程序设计圣经 [写在前面] 此文贴出后,引起了大家的较多关注,是意料之中的事情. ...

  2. Linux作者批评英特尔指令集,Linux之父炮轰英特尔:ECC内存很重要,不好买都怪你胡搞...

    原标题:Linux之父炮轰英特尔:ECC内存很重要,不好买都怪你胡搞 Linux之父炮轰英特尔:ECC内存很重要,不好买都怪你胡搞 原创PCEVA评测室2021-01-06 11:31:08 很多人认 ...

  3. Linux之父炮轰:C++是一门很烂的语言,不会用其重写Linux内核

    Linux是一套免费使用和自由传播的操作系统,目前人们所熟知的安卓.统信UOS等都是基于该系统打造,诞生于1991年,由Linus Torvalds发布,他也被成为Linux之父. 近期,Linux之 ...

  4. python模板语言_你应该(或许)没使用过的 3 种 Python 模板语言 | Linux 中国

    包括这 3 个模板语言在内,Python 积累了许多模板语言. 当需要使用模板语言来编写 Python Web 应用时,有很多健壮的解决方案. Python 已经存在了很长时间.此时,在系统的深处,它 ...

  5. c语言 linux系统 delay,Linux下实现秒级定时任务的两种方案

    Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command s ...

  6. 继 Linux 之父之后,独立开发者 Jonathan Blow 再次炮轰 C++ 是可怕的语言

    Jonathan Blow 是著名独立解密游戏<Braid>和<The Witness>的作者,近日,他表示 C++ 真的是一种可怕的语言,可怕到他要停下手中的工作发明一种新语 ...

  7. 《C++覆辙录》——1.9:使用糟糕的语言

    摘要: 本节书摘来自异步社区出版社<C++覆辙录>一书中的第1章,第1.9节,作者: [美]Stephen C. Dewhurst(史蒂芬 C. 杜赫斯特),更多章节内容可以访问云栖社区& ...

  8. 用C语言Linux下打印带颜色的字符串

    用C语言Linux下打印带颜色的字符串 字背景颜色范围:40----49 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色  字颜色:30---------- ...

  9. c语言linux TCP长连接 socket收发范例 断开自动重连

    原文链接:https://blog.csdn.net/chenhao0568/article/details/103420615 c语言linux TCP长连接 socket收发范例 断开自动重连 改 ...

最新文章

  1. Oracle10g.CentOS6安装
  2. 禅道826版本SQL注入,登录绕过以及禅道826后台GetShell的小技巧
  3. Dubbo 跨语言调用神兽:dubbo-go-pixiu
  4. Java中JFrame怎样控制闪烁_在JFrame Java中闪烁
  5. System Center Technical Preview DPM(2016)对Exchange2016的灾难恢复
  6. [转]如何处理机器学习中的不平衡类别
  7. Java NIO与IO的差别和比較
  8. c语言打程序时会遇到什么问题,Sublime text3 实现C语言编译运行以及过程中可能遇到的问题...
  9. 3. static file process
  10. java ee 酒店管理系统,基于jsp的小型酒店管理系统-JavaEE实现小型酒店管理系统 - java项目源码...
  11. emacs在windowxp下的一些配置
  12. 全面剖析《自己动手写操作系统》第五章---makefile文件
  13. 计算机三级网络技术上机,计算机三级网络技术上机部分(南开100题题库)
  14. 愤怒的小鸟是如何长大的
  15. 安利App介绍及下载(含二维码)
  16. 冒泡排序 - 数据结构和算法88
  17. [ 笔记 ] 操作系统复习笔记
  18. arch配置之百度网盘
  19. 80端口、443端口、8080端口、8000端口的区别
  20. WordCloud库的安装教程

热门文章

  1. Java 8 中的哈希表
  2. 消息队列RabbitMQ入门与5种模式详解
  3. 如何召开一次无效的会议?
  4. 【干货】打造优秀B端产品需求分析流程要点
  5. 2020中国民营企业500强调研分析报告
  6. 基于生成对抗网络的医学数据域适应研究
  7. 数据库系统实训——实验四——视图
  8. 【算法分析与设计】海盗分硬币问题
  9. 【MySQL】命令行遇到 ‘> 而无法结束语句编辑的解决方案
  10. 神奇的幻方(洛谷P2615题题解,Java语言描述)