Linus对C/C++的评论,真是骂的太爽了
曾经很久以前.我在CSDN上就批评过C++ 学习坡度太陡,内容太多,相互之间又毫无关联 而之后Raymond的[U...
扫描右侧二维码阅读全文
20
2008/10

Linus对C/C++的评论,真是骂的太爽了

曾经很久以前.我在CSDN上就批评过C++
学习坡度太陡,内容太多,相互之间又毫无关联
而之后Raymond的[UNIX编程艺术]出版.
之间发现Raymond对C++也是颇有微词
然后我也写了一篇[C与现代语言和刀与自动切片器]
其实其中矛头指向的便是C++
而最近Linus对C++也是"破口大骂"
Linux之父炮轰C++:糟糕程序员的垃圾语言
很多人对C++敬若神明
但是我现在越来越觉得C++只是个中间的试验品
C++当出现的时候.是OO概念刚刚萌发没多久
smalltalk开始使用OO的概念.而B.S想将OO的概念引入C,
所以出现了C++
而这个时候即便是美国那边使用OO
也还都没有发展出设计模式的概念
而当后来的JAVA等纯OO语言出现时
已经是OO用了很久了.许多概念真正成熟了.
JAVA之类的属于瓜熟蒂落的产品
而C++只是个半吊子.更不用说又加入模板等等
造成了C++内部心智模式的不统一.
而函数式编程,真正瓜熟蒂落的应该是属于Erlang
C++没有一个根本性的统一概念.而且一切新兴概念的杂合.
我不能说它是集合.因为它根本不是这些概念的有机组合.而只是堆砌.
我向来推崇简单风格.而C++可以给你3种甚至更多种完全不同的编程思想去完成一件事
这不是优势.恰恰这点导致了项目上面风格不统一乃至于项目维护难度高.
要知道一个项目哪怕只要有2个人,就会导致细微的风格不统一
更不要想象要是几个个人用一个拥有好几种编程思想的语言
期间出现的差异可能会有多大!(即便是简单的PHP网站,程序员换了两批之后,你就会在里面分别找到面向过程和面向对象的代码)
最终.C++只能是编程语言里程碑上重要的一环.它承上启下,为OO的实验以及函数式编程铺平了道路.但是其本身绝不值得顶礼膜拜.要么用C.要么用更高级的语言.用C++只能是让你更加痛苦而已.

Last modification:November 26th, 2018 at 04:16 pm
If you think my article is useful to you, please feel free to appreciate

8 comments

  1. st

    我想起了B.S的一句话“世界上只有两种语言:一种是整天被人骂的,另一种是没人用的。”

  2. agentzh

    许多 C++ 程序员中把简单问题复杂化的风气确实不正(Java 社区中此风亦盛),不过在 C++ 中使用 STL 容器和算法还是挺方便的,C 缺乏标准的数据结构库可供使用(我们多从 Linux kernel 中扣出好用的)。

    C++ 语言本身设计得确实远非完美,但也不失为一种比较优秀的语言。好的 C++ 程序员还是可以写出好的 C++ 代码的,不是么?呵呵

  3. est

    > 其实C++和Python这样的语言的区别,我认为在于:C++是强类型的,所以用C++要多把玩这个Type,利用模板构造无穷无尽的Types。

    很可惜。Python也是强类型语言。。

    ActivePython 2.5.2.2 (ActiveState Software Inc.) based on
    Python 2.5.2 (r252:60911, Mar 27 2008, 17:57:18) [MSC v.1310 32 bit (Intel)] on
    win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 1 + '1'
    Traceback (most recent call last):
    File "", line 1, in
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    >>>

    Python是强类型、动态类型语言。。。

    我觉得真正成熟的FP语言是haskell。。。

    其实国内大多数人说的C++其实是指VC++,甚至是指MFC。。。

  4. Johnny Woo

    这涉及一个社区氛围的问题
    如果你在PERL里面用面向过程,不会有人责难你或者嘲笑你
    但是C++社区不同.轻松愉快的编程氛围离C++越来越远.
    貌似只有越复杂的用法.才能得到别人越多的尊重
    哪怕为了一次性用途而写的程序
    也要套上诸多模式
    否则就会被人指责什么设计不良等等.

  5. noname

    "而C++可以给你3种甚至更多种完全不同的编程思想去完成一件事" 那perl怎么办?

  6. Johnny Woo

    简单来说.C++违反了UNIX的只做一件事,并把它做好的原则.

  7. 老所

    简单看了下,大意就是这个Linus在一个新开发的软件商选择了ANSI C而不是C++。

    其实一个项目到底选用什么语言,这在我看来一是和项目本身的特性有关,二是和项目负责人的语言倾向有关。

    Linus选择C,那是他的选择,因为C的内容很小,库函数也比较少,且稳定。这样,好处就是,可以尽快地掌握这种语言,然后把心思放到软件功能上去。

    C++完全不同了,我就几乎不用C写程序,要么使用C++,要么使用其它高级语言,诸如Python。用C++现在也很少用OO的虚函数和继承了,更多地使用模板。

    其实C++和Python这样的语言的区别,我认为在于:C++是强类型的,所以用C++要多把玩这个Type,利用模板构造无穷无尽的Types。

    另外,Boost库其实是很棒的,诸如其中的boost.fusion, boost.python等都是很不错的。

  8. FinalBSD

    Linus是有名的大嘴,见谁骂谁。

Leave a Comment