刘江@图灵

书 人 事

刘江ID:turingbook
[修改头像]
461026次访问,排名84好友8人,关注者14
人民邮电出版社图灵公司总编
turingbook的文章
原创 124 篇
翻译 47 篇
转载 39 篇
评论 619 篇
turingbook的公告
欢迎转载,转载请注明出处“图灵评论”和原文链接。

图灵公司常年招聘兼职计算机图书编辑。让我们共同为出好书而努力。联系邮件:contact ##turingbook dot com

Locations of visitors to this page
最近评论
y66881472:请问embedded linux primer的中文版什么时候上市?还有编程珠玑的中文版?谢谢
cangzhuo_com:2008年全宇宙最耀眼的技术
-----藏拙视频全文检索闪亮登场了!
真正的全文检索、纯C语言开发的全文检索、400万中文词汇分词不超过 5毫秒,任意检索不超过 0.5秒,并且运行在一台普通PC和 1G内存的环境上照样奔腾如飞!
http://cangzhuo.com/v?w=%D2%F4%C0%D6&pn=4&t1=1&am……
ua114:刘江总编,你好!

贵出版社出版的。NET 3。5图书,比如C# 2008,ASP。NET 3。5等,年内有望上市吗?希望加快进度,很期待呢!
pppppp2:图灵怎么不引进java开发领域的圣经 Effective Java 2nd Ed. (Addison Wesley) ?
indexchen:怎么畅销书中没有scala的书籍
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    图灵图书
    读过
    aimingoo
    cber(好像不更新久矣)
    Dazern
    dlee
    g9老大
    Goncely:编译器,C++
    Henry
    HTMLOR
    InfoQ中文站泰稳
    LinuxForum
    Nuo Yan
    Terence Tao
    Web 2.0工作组
    Web Design Portal
    何毓琦
    内核之旅
    刘铁猛
    北大中文论坛
    图灵网站
    左轻侯
    月光
    李戈
    老谢的博客
    胡百敬
    菲尔兹奖得主Tim Gowers
    飞猪
    存档

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

    新一篇: Web开发与设计新手十大必知必会



    【图灵图书推荐】Linux程序设计(3

    众所期待的程序设计圣经



    【写在前面】
    此文贴出后,引起了大家的较多关注,是意料之中的事情。毕竟,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很稳定而且可移植性很好,那全是屁话,而且一点都不可笑)

    "——低效的抽象编程模型,可能在两年之后你会注意到有些抽象效果不怎么样,但是所有代码已经依赖于围绕它设计的‘漂亮’对象模型了,如果不重写应用程序,就无法改正。


    【图灵图书推荐】近10年来最好的C语言图书,哈佛、MIT教材:K.N.KingC语言程序设计:现代方法即将出版!!
                                    C语言摇篮贝尔实验室培训秘笈《C语言解惑》热卖中                                                             


    ”也就是说,使用优秀的、高效的、系统级的和可移植的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)。"


    【图灵图书推荐】 不容错过的C++圣经《C++ Primer中文版》习题集
                                    凝聚C++业界专家智慧的《C++编程规范》
                                   

    【070908继续更新】
    争论还在继续。半个小时之后,半小时后,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的角度看来,所谓 ' 高层 ' 恰恰是错误的。"


    Dmitry回帖:
    我不仅看过源代码,而且还做过很多调试工作。我发现的问题大多数都与处理Windows上的路径(也就是字符串处理)有关。

    他表示不再纠缠于“C与C++孰优孰劣”的讨论,而是介绍了一下自己的出发点:

    我的目的是使用Git。当有些功能无法使用时,我想能够在尽可能最短时间和花费最小的力气进行改正并贡献改正的代码。对我来说,这只是我主要工作的一种消遣而已。

    而Git用C编写这一事实,对这一目的毫无好处。建议使用C++是现有C代码基础的唯一出路。所以,虽然C++可能从学术上来讲并非最佳选择,但是唯一切合实际的选择。

    “除了其他已经尝试过了的政体之外,民主是政体的最差形式。”
    ——温斯顿 丘吉尔

    现在,我认识到自己只是一个不太活跃的贡献者,但我希望自己的声音能够被人听到。而那些承担开发和维护Git主要重任的人也应该发出自己的声音。


    此后,Torvalds没有再发言,大概是认为自己已经大获全胜。而另外一些Git贡献者继续对Dmitry进行反驳,可以看出,Torvalds的看法并不是他的私见。Theodore Tso说

    “我认为字符串处理是C++会找来大麻烦的地方之一。糟糕的程序员(原文为idiot)会这样写代码:
    	a = b + "/share/" + c + serial_num;

    “其中你肯定无法弄清到底分配了多少内存,因为有类型强制转换、重载的操作符(感谢上帝,在C++中你可以重载逗号操作符!),而当这种东西出现在内循环中,结果将是性能上的大灾难,而且原因还不明显!

    另外还有同学讽刺,说的确有不少C++程序员贡献代码,但是反而需要核心的C程序员花费更多时间去修改和删除。

     


    【刘江按】以下是我的一点门外之见,做引玉的砖头之用。

    Dmitry有一点是肯定正确的,语言之争更多的是一种类似宗教信仰上的,所以很难有结果,也没有太多实际意义。这种争论因为出自高手之间,所以还是会透露出很多重要的信息。比如:

    1. 对于要求性能高的系统编程领域,C++其实未必胜过C,而且事实上,也确实有很多此类项目是选择C作为主要语言的。C的生命力目前仍然毋庸置疑。更多的信息可以读这里

    2. C++目前确实处于一种被夹攻的态势,一方面在企业级系统开发(数据密集、业务规则复杂多变)中,C++已经基本被Java和C#等淘汰出局,另一方面在系统编程和嵌入式等更接近硬件的领域,又遭到C的强烈狙击。

    3. OO技术并非one-size-fits-all。
    ……(大家补充)

    必须看到的是,C语言作为一种古老的语言,其局限性也是很明显的,比如已经成为安全问题渊薮的缓冲区溢出。C的标准库也存在各种各样的问题。对于更加贴近现实世界的众多项目,没有面向对象机制,显然会影响开发效率。(有关C标准库源码层次的分析,图灵将出版著名C/C++专家Plauger的《C标准库》一书。)而且,即使是C程序员所引以为豪的性能优势,现在也岌岌可危了(参见C++之父Stroustrup的文章中相关的比较)。

    C++目前的困境,很大程度上是由于此前的图书和文献曾经一度倾向于炫技,陶醉于对语言各种细节的深入探索,有华丽化、复杂化的趋势,语言设计者们苦心设计出来各种丰富的特性和多范型的编程风格,却成了学习者和使用者的负担,加上微软等开发工具又用MFC之类的糖衣,结果造就了大批基础不牢、半桶水叮当响的C++程序员,而且因为自以为掌握了世上最难的语言,往往有目空一切的傲气。这样开发出来的代码质量,可想而知。对C++的各种误解和不良使用习惯,可以说是漫天飞舞。而这种局面继而造成C++逐渐成为一般人心目中望而生畏、学不好教不好更用不好的“专家语言”,越来越无法吸引新入行的程序员。老人毛病多多,新人青黄不接,C++社区的确面临危机。

    这几年,C++界的核心人物,包括Bjarne Stroustrup、Herb Sutter、Stan Lippman、Andrei Alexandrescu和Andrew Koenig、Stephen Dewhurst等,对此局面有过较多的反思,痛定思痛之后,写作了Learning C++ as a New Language中译文)、《C++ Primer》第四版《C++编程规范》、《Accelerated C++》和《C++必知必会》等返璞归真的文章和图书。其核心变化,是对标准库(Torvalds语气中对STL和Boost也很不屑,不知是何原因,请方家告我)、规范化、领域概念和设计的强调,弱化底层语言细节,或者说强调更规范地选择使用语言特性。

    比较同一作者的《C++ Primer》第四版和第三版、《C++编程规范》和《Modern C++ Design》以及Exceptional C++系列,可以清楚地看到这一点。

    比如Primer第三版一上来就突出C++的多种编程风格(过程式编程、基于对象编程、面向对象编程、泛型编程),并且以此作为布局谋篇的主线,很容易使初学者晕倒。到了第四版,则更多地把力气花在打好扎实的基础,介绍那些实际开发中通用的、行之有效的编程技术,在特定场合,C++提供的丰富“武器库”中应该选择哪些设施、应该注意哪些问题、业界已经总结了哪些优秀的编程实践和易犯的错误等,成了书中的主干。这使此书成为目前最适合的C++学习和使用的百科全书。

    与此配套的,当然应属《C++编程规范》,用条款形式说明了C++各种语言设施的正确用法和适用场合。如果你在学习C++的时候,就能结合其中的相关条款,了解所学特性的正确用法,当然是最理想的。而《C++必知必会》则选取了对C++程序员非常重要的知识点,进行一番贴近实际的讨论。

    C++图书推荐请参见:
    C++藏书阁(上)

    最后八卦一下,
    Dmitry Kakurin同学经查应该是一位微软公司的工程师(参考这里最后的Thanks to),致力于Git on Windows的开发。——但是不许联想啊,免得又引起另外一个门派之争。


    【070909更新】好像是和Linus Torvalds呼应似的,有相当权威性的TIOBE的编程语言指数最近一期的结果显示,C++下降了两名,落后于(Visual) Basic和PHP,成了老五。而C则稳居第二。

    Position
    Sep 2007
    Position
    Sep 2006
    Delta in Position Programming Language Ratings
    Sep 2007
    Delta
    Sep 2006
    Status
    1 1 Java 21.701% +0.17%   A
    2 2 C 14.908% -3.15%   A
    3 4 (Visual) Basic 10.748% +0.12%   A
    4 5 PHP 10.204% +1.08%   A
    5 3 C++ 9.938% -0.82%   A
    6 6 Perl 5.416% -0.01%   A
    7 8 C# 3.583% +0.59%   A
    8 7 Python 3.025% -0.12%   A
    9 9 JavaScript 2.722% +0.28%   A
    10 13 Ruby 2.065% +1.13%   A


    【070910更新】
    刚才看到,有两位资深同学写了相关的讨论文章,用姜文的话说,属于“有营养”的好文字,大家可以去看看:
    孟岩:Linux之父话糙理不糙
    云风:C的回归

    【070910夜更新】
    今天偶然翻到《Unix编程艺术》一书,其中第4章中“Compactness”(紧凑性)部分里,Eric Raymond写道:

    在通用编程语言中,C和Python是半紧凑的;Perl、Java、Emacs Lisp和shell则不是(尤其是真正的shell编程要求你知道半打sed和awk这样的其他工具)。C++是反紧凑的——语言的设计者承认,他并不指望任何一个程序员能够完全理解这一语言。

    【070911更新】
    刚才看到一张Linux内核开发者峰会照的全家福,有历史价值,给大家分享一下。上面有Torvalds(大致在中间)、Andrew Morton(目前的内核主要维护者,第二排右数第二个)、Alan Cox(Linux贡献最大的黑客之一,为《Linux程序设计》写序的老大,两个柱子之间个子不高的大胡子)、Jonathan Corbet(《Linux设备驱动程序》一书的作者,第一排左数第一个)和写书的伙伴Greg Kroah-Hartman(中间的柱子
    左边)、上面发言的Tso(中间的柱子右边,看简历也是个大牛呢,IBM的)、Olaf Kirch(《Linux网络管理员指南》的作者)等等。有位中国人Yang Li,飞思卡尔的。Herbert Xu是澳洲的,那个坐在地上的华人女士Mingming Cao是IBM美国的。




    Monotone也是一个自由的CVS,网站在这里

    C和C++的比较是一个非常有趣的话题。你怎么看呢?
    【延伸阅读】
    C标准中的一些新术语
    C语言入选十大已死和垂死IT技术和职业
    C++失去竞争力了吗?《C/C++ User's Journal》停刊有感
    销量超过10万册Amazon第一PHP图书出版
    新闻:Linux内核支持团队裁员,CEO离开
    2007开源大奖揭晓

    发表于 @ 2007年09月07日 03:24:00|评论(loading...)|编辑

    旧一篇: Java秘史——名字的来历

    评论

    #shanghendelei 发表于2007-09-07 09:52:08  IP: 124.72.43.*
    要不用D语言重写linux内核试试,,
    #mrcd2000 发表于2007-09-07 10:04:07  IP: 222.210.221.*
    “也就是说,使用优秀的、高效的、系统级的和可移植的C++的唯一方式,最终还是限于使用C本身具有的所有特性”

    C++有了C的功能,所以也可以说用了C的特性或是说用了C++的部分特性。

    这个所谓“Linux之父炮轰C++”没有说明个问题,好像在吵架哈。
    #sjf331 发表于2007-09-07 10:55:08  IP: 219.141.233.*
    C++太麻烦,使用它所要引入的乱七八糟的东西太多,很多可能对你的项目一点用也没有。要做真正的容易维护的东西还是简单号。C是符合的。
    #wishfly 发表于2007-09-07 11:04:49  IP: 221.216.152.*
    基本同意!
    感觉当编写系统级软件时,c在程序效率,可扩张性,可维护性上作了最好的平衡!
    #cn_yuhongwei 发表于2007-09-07 11:29:36  IP: 60.26.131.*
    中级语言C好!!
    #Tianobios 发表于2007-09-07 12:41:22  IP: 202.101.8.*
    EFI BIOS 内核就是用纯C写的,性能和执行文件大小是主要的考虑。
    #kwer 发表于2007-09-07 12:48:59  IP: 219.128.62.*
    C++并不优雅,还在上面堆新的东西。是到了推倒重新设计的时候了。
    #vcnewer 发表于2007-09-07 13:30:01  IP: 222.85.75.*
    有点意思,支持一下
    #Viweei 发表于2007-09-07 13:33:06  IP: 222.172.163.*
    我并不觉得C++差在那里...它本来就是一种开放式的语言,要引入的东西自然很多.难免让某些人学起来很吃力....如果你觉得你的项目使用C++写出来确很难维护.并不能说明C++就是 垃圾.最多说明你的设计是个垃圾.
    C++本来很简单.只是和平台接合后提升了他的复杂度.C和C++我没法说出谁好谁坏."本是同根生, 相煎何太急!"
    #Viweei 发表于2007-09-07 13:52:03  IP: 222.172.163.*
    补一句: 人云亦云,是悲哀!
    #yuanmu 发表于2007-09-07 13:52:15  IP: 61.135.152.*
    C++ 比汇编还麻烦?如果是的话,真该反思一下了。
    #axaw 发表于2007-09-07 15:54:21  IP: 222.77.56.*
    我不是黄龙我不懂武功
    #pongba 发表于2007-09-07 16:01:50  IP: 222.94.3.*
    Dmitry的反击更火爆,哈哈,这个帖子真娱乐呀真娱乐:)

    As dinosaurs (who code exclusively in C) are becoming extinct, you will soon find yourself alone with attitude like this.
    #wk99239 发表于2007-09-07 16:21:34  IP: 59.45.30.*
    C++还是有它存在的道理,当然他和其他的更优秀的语言比较是不太优雅,但是试想象如果没有它,也是不现实的。
    #nick_shen 发表于2007-09-07 16:37:37  IP: 210.13.103.*
    这未免太片面了,c++的诞生自然有它的生存之道,否则早就消失了。照Linus Torvalds的说法,所有的程序都应该用汇编或者机器码写,因为那样效率最高,c也不应该存在。。。。
    #domoc 发表于2007-09-07 16:39:47  IP: 122.70.8.*
    难以置信,看来这个linux作者是抱残守缺,廉颇老矣。沉舟侧畔千帆过,病树前头万木春,技术总是在发展,照他的说法,C就是语言的终结者?C++不如smalltalk纯OO,不如lisp有学术气质,不如java后起之秀优雅,不如C简练,但纯,学术,优雅,简练从来不是C++追求的目标和存在的价值。数千亿美金的微软帝国就是建立在C++上的,不知道liunx作者怎么解释?STL怎么会不工作呢?除非你非要使用古老的不支持STL的C++编译器,你有什么理由这么做呢?
    #thirdapple 发表于2007-09-07 16:43:25  IP: 219.142.228.*
    说得没错啊,他说的就是把代码规模维护在可控制范围内,这样对于BUG的控制就方便多了。如果是用c++和一堆库来开发的话,如果库的底层出现问题,很难跟踪调试,这会成为一个很棘手的问题。虽然我也用c++开发,但是因为是很应用级别的开发,所以这倒不是太大的问题,但是对于系统级别的开发,这还是很重要的,而C的严格提供了一个很好的工具来平衡代码的底层可操作性和上层的逻辑性。
    #Tirecoed 发表于2007-09-07 18:58:32  IP: 122.48.0.*
      小人得志啊!
      首先是剽窃minix而死不认账,然后是在Linux大放狂词“我是你们的神”,还一个人把持着Linux商标权却还打着自由的名号,对GPL2也不支持,否认emacs,如今更是否认在世界上广泛应用的语言,真是小人得志!多少好的操作系统没有发展起来啊,偏偏是Linux这个!
      做妓女没什么,做了妓女还要立牌坊的坚决打击!
    #mcs51a 发表于2007-09-07 19:08:59  IP: 58.41.5.*
    攻击
    #mcs51a 发表于2007-09-07 19:10:06  IP: 58.41.5.*
    “会得到许多真正懂得底层问题,而不会折腾那些白痴‘对象模型’垃圾的程序员。”

    有道理啊
    #flushtime 发表于2007-09-07 19:16:36  IP: 221.238.245.*
    虽然话语有点偏激,但基本是事实~
    C++的标准换了一次又一次,就没看到一个完全符合标准的编译器出现...
    估计有80%以上用过C++的都会写
    void main()
    {
    ...
    }
    却不知道这其实不符合C++标准..

    微软确实用"C++"搞出了不少好东西,比如VC++,MFC,还有.net上的所谓"扩展C++" CLI...
    但应该知道的是,这些"C++"与标准C++相差甚远,可以说是"畸形C++"或"改良C++"
    不能不说这是C++的悲哀.

    相对而言,C的语法更简单,也不会担心学了后找不到一个符合标准的编译器来写代码.
    #tanzu 发表于2007-09-07 19:24:42  IP: 220.234.84.*
    晕,我觉得Linus有点倚老卖老的感觉,这样子骂明显有点掉价,其实产品好不好,跟语言又有什么关系呢?我遗憾的是我用过Git之后还是返回到CVS/Subversion的怀抱.
    #sns2002 发表于2007-09-07 20:43:27  IP: 61.174.150.*

    我做linux开发三年,现如今因为项目暂时转到C++,
    我觉得linus说的意思本文作者是不是理解有问题?

    这文章写出来会误导大家。

    我有两个观点:
    1,C不是万金油,但是做内核开发的用C才是真理。
    2,linus说的C++的缺陷在于使用者的本身素质问题导致项目更加糟糕,更新设计的库是家常便饭。
    3,仁者见仁,智者见智,各位不必为哪个语言好哪个语言不好而斗嘴,适合的才是最好的。
    #hardeggwang 发表于2007-09-07 21:32:57  IP: 58.33.162.*
    同意sns2002

    Linus其实更多的是在抱怨C++很难使用,没有多少程序员能写出易维护的C++程序,而且由于C++的复杂性(比如模板),导致C++很难调试。这些对于写系统软件来说还是比较致命的

    但很显然,他也被挑衅的人激怒了,说了一些不负责任的话
    #huawenguang 发表于2007-09-07 21:56:29  IP: 121.35.162.*
    存在就是合理的,C++这么多年都没死,足以说明它有活着的道理。
    #zhouhongyun 发表于2007-09-07 21:56:57  IP: 219.140.59.*
    数千亿美金的微软帝国就是建立在C++上的
    -----微软的基础建立在C+asm之上。微软的基础是啥,windos,windows的基础是啥写的,是C,直到vista,微软还是在用C写内核,不但内核层是,连应用层的user32.dll,kernel32.dll等也是C写的。
    #lovejoyboy 发表于2007-09-07 22:42:39  IP: 222.76.128.*
    最讨厌这样的争吵了,面向对象有它使用的领域,比如游戏和图形编程,而操作系统则不需要使用面向对象的思想,当然用C就够了。你去问问游戏程序员,有多少用C++,有多少用C。
    #lovejoyboy 发表于2007-09-07 22:44:08  IP: 222.76.128.*
    C++的庞大特性并不需要都使用,根据自己的水平使用就可以了,其实从内心深处我也是喜欢简洁的C,但是C++的面向对象特性我也是很喜欢的。
    #catsmemory 发表于2007-09-07 23:02:56  IP: 125.171.139.*
    是不是 C++ 的定位问题呢?它试图成为所谓的万能语言,最后却牺牲了最重要的东西——设计的简洁性与语言的易用性。

    作为一门语言,“复杂”是缺点,而不是可以值得称赞的特性。
    #lovejoyboy 发表于2007-09-08 01:04:46  IP: 222.76.128.*
    C++确实过于复杂,但是你可以不用那些复杂的特性,只用你熟悉的特性。
    #lovejoyboy 发表于2007-09-08 01:07:01  IP: 222.76.128.*
    说实话,我很讨厌这样的语言之争,有着功夫还不如去多学点东西,就好比DirectX API的开发,到DirectX9的时候就全部用C++了,这说明了什么?面向对象编程是趋势,逃避则最终只能被淘汰!
    #lovejoyboy 发表于2007-09-08 01:08:45  IP: 222.76.128.*
    再说这年头几个人搞最底层的开发?更多的人搞高层次的开发,更多人用面向对象的语言来开发,包括C++,C#,JAVA,PYTHON,...
    #lovejoyboy 发表于2007-09-08 01:13:53  IP: 222.76.128.*
    比起其他语言,C++是复杂了点,但如果你觉得自己的智商不足以驾驭这么复杂的语言,那么你可以不学,也可以不用,没人逼你!
    #prowyh2007 发表于2007-09-08 04:05:13  IP: 220.234.74.*
    个人以为:
    1、C是最能体现程序设计功力的语言!尤其是第一版即K&R C,几乎是一种“裸体”语言,程序的正确、安全与否完全取决于程序员的功力。
    2、后来人们觉得K&R C“太危险”,在ANSI C中加入了很多类型检查的设施,如function prototype的约定等,等于让编译器为程序员做了很多工作。
    3、C++的很大一部分精力就是放在了类型检查上,当然还有class, template等等这些比较高级的东西。C++的这些做法主要有两个目的:提升程序员的生产力以及便于大规模程序的开发。
    4、C#设计的主要目的之一便是集中于程序的类型安全上。
    5、C -> C++ -> C#语言的演进,直接反映了现代程序设计的实践,即将越来越多的工作交给编译器,以降低对程序员功力的要求。毕竟像Ken Thompson和Dennis Ritchie这样的用随便什么语言就可以写一个Unix操作系统出来的程序员是极少极少的。
    6、将C与C++作一粗略的比较,可能会比较有意思:C的技术性更强一点,因为更加底层;C++的概念性更强,更加强调良好的设计,层次提高了,反映在语言上,就是更加复杂。
    7、所以,如果是做操作系统级的东西,C可能是不二选择,但如果是应用级(不是高层应用,而是系统级的应用,比如OS kernel之外的东西),C++可能会更好。
    8、每一种语言都有其设计的宗旨及适用的范围,除了吃饭必需的之外,自己喜欢的,就是最好的!
    #walacato 发表于2007-09-08 09:00:30  IP: 208.181.115.*
    用C吧,阿门!
    #pajoke 发表于2007-09-08 09:01:49  IP: 211.138.144.*
    C跟51一样,在低端用。
    C++跟ARM一样,在中高端用。
    #bytetao 发表于2007-09-08 09:43:42  IP: 218.2.109.*
    适合才是最好的
    #cnmyth 发表于2007-09-08 10:08:37  IP: 220.249.189.*
    存在就是合理?
    杀人犯罪也存在,难道合理?
    #ysjyniiq 发表于2007-09-08 10:35:48  IP: 123.117.74.*
    C++是复杂,你用C写个上万行的软件也是复杂嘛,与C++的复杂相比差远了,我觉得批评C++的人都没有深刻用过C++,理解C++,用C太难受,我恨不得写ARM程序时用C++

    ---------------C++极端分子
    #palm_civet 发表于2007-09-08 10:37:39  IP: 60.63.143.*
    杀人犯当然合理,只不过他们想杀人而已
    #mrcd2000 发表于2007-09-08 10:46:58  IP: 222.210.216.*
    如果是先有C++然后再有一种简化C++语言的C出现,世界将会怎么样了?
    #microsoftboss 发表于2007-09-08 11:03:49  IP: 222.43.53.*
    这个其实也可以理解,linux 他搞得是纯粹底层的东西,所以别人写好的东西反倒与他的设计思路会不一致,而影响设计,而我们现在大部分程序员,都是在操作系统的基础上作应用程序,所以这个时候,别人为你做的越多,你会觉得越方便,所以说多没有错。
    #zsh6868 发表于2007-09-08 11:05:26  IP: 222.178.150.*
    说的我都不知道自己应该学习什么好了?
    到底什么才是最好?
    #dcopperfield 发表于2007-09-08 11:47:03  IP: 218.196.207.*
    呵呵
    #zhangkr1986 发表于2007-09-08 12:05:59  IP: 221.229.89.*
    C++ JAva,,C#是从C衍生过来的·可能某一方面比C强,但不可能超越C的。以后衍生出来的语言肯定更多,C才是始终的核心。C++适用范围太小,高点的比不上C#,JAVA优秀,低点的无法和C比。这些语言的流行都是暂时的,微软再搞个**语言,又不知道多少人去学了,只有C级别的语言没法搞。以后再出个**语言,应用级别的程序都是电脑自动给你开发···应用级别的软件开发要求越来越低,进入的人就越来越多,人一多就不值钱,只有C无可取代。20年以后还有C#,JAVA?坚持C没错。
    #fireflyc 发表于2007-09-08 13:16:40  IP: 60.191.227.*
    Dmitry Kakurin认为用C++来做Git优于C的原因。
    1. Good String class will make code much more readable (and
    significantly shorter)
    2. Good Buffer class - same reason
    3. Smart pointers and smart handles to manage memory and
    file/socket/lock handles.
    这些也确实是C语言的硬伤~
    不过Linus不这样认为~
    Total BS. The string/memory management is not at all relevant. Look at the
    code (I bet you didn't). This isn't the important, or complex part.
    ……
    嘿嘿~~~~Total BS…………呵呵~
    #duyanning 发表于2007-09-08 13:41:10  IP: 221.11.38.*
    我想我们需要讨论的不是C++如何,而是Linus Torvalds这个人如何如何。
    相当吃惊,相当失望。
    #zzmsl 发表于2007-09-08 15:04:34  IP: 116.11.148.*
    面向对象编程是趋势,逃避则最终只能被淘汰!
    #wpf305 发表于2007-09-08 15:45:22  IP: 220.192.7.*
      单纯地讨论"C与C++哪个好", linux Torvalds的观点明显是错误的。放在“Git”这个项目上来看,linus Torvalds的观点是极其正确的。如果用C++开发它,有很多人刚看了一点源码,就开始继承一个新的“类”,并用它增加“功能”,对于后面继续开发的高手来讲,是个噩梦,别人没办法在你的基础上继续下去。勉强继续下去了,无穷无尽的类包装也是软件运行效率的死穴。C++更适合于封闭式开发,开发完了提供给别人做上层应用开发。C++开发的每一步都是一次设计性的开发,对程序员在整个软件逻辑的把握上有极高要求,并不适合开源项目。
      C是结构化编程语言,可以看作是很多模块的组合,删除某个代码糟糕的模块是一件简单的事。项目的领导者可以把握项目的方向。
      C++的开发有点象“包洋葱”,里面的层包得不好,就很难改正。
      C++目前的应用好象更多的是,在别人开发的库上开发应用级程序。而用别人的类再开发二级类三级类的,好象还不多。C++有它独特的优势,但不是任何场合都适合。
      
    #justforhigh518 发表于2007-09-08 15:56:02  IP: 59.172.102.*
    说两句:

    1:一看到吵架的,国人特来劲,比吃大麻还来劲。特喜欢更风。
    最好看下原文:http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918
    少说多看,才写程序一两年尽量少更来评论。

    2:linux 用C很正常,因为他写的是linux系统内核。C是最好的选择。Dmitry Kakurin 不爽指的是linux用C 开发一个git,git是一个CVS,其实就是个应用程序而已。版本控制工具,Dmitry Kakurin 的意思大家一看也明白,他认为这些上层的应用软件用C++比较方便,不过他用词不太礼貌,对git也不太熟悉。所以linux用bullshit回复也正常。linux的通片意思很明白,他们用C开发system kenel,不想引用C++的方式来引起一些不必要的潜在的麻烦,比如类库移植和稳定,他们需要一个精简的短小稳定的库,不要庞大的库。所以没用引用C++。

    3:The only really important part is the *design*. The fact that some of it is in a "prototyping language" is exactly because it wasn't the core parts, and it's slowly getting replaced. C++ would in *no* way have been
    able to replace the shell scripts or perl parts.语言不要争论了,design is important ,人家都把话说白了。我看主要Dmitry Kakurin 这哥们不爽git是用C开发的,看了半天他和linux不是一个层次上的。

    4:我说csdn的哥们,也别争了。这话题没多大意义。等你做到了CEO,你想你手下用啥语言都可以。大伙争来争去没多大意义。
    #justforhigh518 发表于2007-09-08 15:58:13  IP: 59.172.102.*
    原文之一:

    On Wed, 5 Sep 2007, Dmitry Kakurin wrote:
    >
    > When I first looked at Git source code two things struck me as odd:
    > 1. Pure C as opposed to C++. No idea why. Please don't talk about portability,
    > it's BS.

    *YOU* are full of bullshit.

    C++ is a horrible language. It's made more horrible by the fact that a lot
    of substandard programmers use it, to the point where it's much much
    easier to generate total and utter crap with it. Quite frankly, even if
    the choice of C were to do *nothing* but keep the C++ programmers out,
    that in itself would be a huge reason to use C.

    In other words: the choice of C is the only sane choice. I know Miles
    Bader jokingly said "to piss you off", but it's actually true. I've come
    to the conclusion that any programmer that would prefer the project to be
    in C++ over C is likely a programmer that I really *would* prefer to piss
    off, so that he doesn't come and screw up any project I'm involved with.

    C++ leads to really really bad design choices. You invariably start using
    the "nice" library features of the language like STL and Boost and other
    total and utter crap, that may "help" you program, but causes:

    - infinite amounts of pain when they don't work (and anybody who tells me
    that STL and especially Boost are stable and portable is just so full
    of BS that it's not even funn
    #justforhigh518 发表于2007-09-08 15:59:38  IP: 59.172.102.*
    续上:
    - inefficient abstracted programming models where two years down the road
    you notice that some abstraction wasn't very efficient, but now all
    your code depends on all the nice object models around it, and you
    cannot fix it without rewriting your app.

    In other words, the only way to do good, efficient, and system-level and
    portable C++ ends up to limit yourself to all the things that are
    basically available in C. And limiting your project to C means that people
    don't screw that up, and also means that you get a lot of programmers that
    do actually understand low-level issues and don't screw things up with any
    idiotic "object model" crap.

    So I'm sorry, but for something like git, where efficiency was a primary
    objective, the "advantages" of C++ is just a huge mistake. The fact that
    we also piss off people who cannot see that is just a big additional
    advantage.

    If you want a VCS that is written in C++, go play with Monotone. Really.
    They use a "real database". They use "nice object-oriented libraries".
    They use "nice C++ abstractions". And quite frankly, as a result of all
    these design decisions that sound so appealing to some CS people, the end
    result is a horrible and unmaintainable mess.

    But I'm sure you'd like it more than git.

    Linus

    #scklotz 发表于2007-09-08 16:04:05  IP: 59.41.40.*
    个人认为Linus Torvalds对C++的批判相当中肯。对他提到的那些缺点深有体会。
    x. 灵活、支持n多的编程风格。如果是玩的话很好。如果做项目、可能导致大量难以维护的代码
    x. OO技术的过度应用。过度抽象、过度设计导致糟糕的设计
    x. 引入大量风格的库。为版本、编译、移植带来难题
    x. 编译速度比较、性能比较、同样功能代码量比较
    还是那句老话:具体问题具体分析。C和C++有各自适合的地方、C++也绝对不是C的替代品
    Linus Torvalds是有点脾气 :)
    不过我觉得没必要进行人身攻击、起码还是要互相尊重吧
    #justforhigh518 发表于2007-09-08 16:06:38  IP: 59.172.102.*
    后面还有些比较长:

    大家直接到newsgroup 去看吧。

    http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918

    CSDN的哥们最好看玩了在说,此话题现在还在继续ing。

    CSDN杂志别又抓住这个大作文章。我特烦国人跟风炒作。
    linux OS,他们那个组织用C开发是TMD的正常的不能在正常的事情,是正确的不能在正确的事情。反驳争论这个的纯粹是吃饱饭没事找事。

    我算否??? 汗,汗,汗~~~~~~~~~
    #justforhigh518 发表于2007-09-08 16:12:44  IP: 59.172.102.*
    linux 老大是比较有个性,有点非议正常。

    我很喜欢他的一句话:
    RTFCS

    Read the fucking source code

    充满了程序员式的见解和幽默。
    #scklotz 发表于2007-09-08 16:19:10  IP: 59.41.168.*
    SORRY没看到楼上的、看来我有些多嘴、麻烦博主帮忙删除我的评论吧
    #duyanning 发表于2007-09-08 16:21:57  IP: 221.11.38.*
    L粉们开始急着给Torvalds擦屁股了。
    #justforhigh518 发表于2007-09-08 16:49:19  IP: 59.172.102.*
    L粉们开始急着给Torvalds擦屁股了。
    =============================
    偶尔看到这个的。闲的慌,跟了两句。
    最后几句:

    1:看人家的东西,要原话、看原文、要看完,别断章取义。
    2:我TMD的不是L粉,我不在linux系统写程序。搞了几年windows编程,早TMD的不干了。早就脱离了程序员的队伍,哥们现在就是一个体户。那有钱奔那去。只是偶尔还是到CSDN来晃晃,算式割不掉的一种程序情节。

    4:搞技术的朋友要以讨论技术问题的胸怀来讨论,别上来就喷人。上来就搞帽子,那可不是技术人才的特征。

    5:任何争论都要考虑到问题本身的背景及其原因,外人不了解最好少评论,上了网,评论那就是公开言论,至少会影响到网线另一端年轻求学的小朋友的疑问。

    6:搞唯技术论,只看到自己的一片天空干不了大事,成不了多大出息。我看完linux到目前的发言,人家对在linux OS不采用C++一条一条的给出理由和原因,人家还是研究过C++,才能说出一番话的。Dmitry Kakurin 这哥们把他的原话看完,自然看到他和linux不是层次量级的。这个争论也是以Dmitry Kakurin 这哥们不礼貌的对人家的软件大放厥词引起。

    7:争论是人家彼此之间,我只是希望国人不要搞挺Linux,反linux那一套。技术就是技术,更tmd的讨论人品最好离远的。不负责任的随意的以非技术讨论人品的方式来回复,让我感到都是一帮初写程序的小毛孩,写程序也是一样要先懂得做人,否则就是一个技术井底之蛙。

    8:我要是有得罪那位的地方只管骂,我要走了。各位88
    #lovejoyboy 发表于2007-09-08 17:17:55  IP: 222.76.128.*
    每隔一段时间总有人大骂C++,今天是这个大牛,明天是那个大牛,可C++依然活的好好的。 ^_^
    #lovejoyboy 发表于2007-09-08 17:19:43  IP: 222.76.128.*
    C++拥有众多复杂的特性,而是否在自己的程序中使用那些高级复杂的特性依自己对C++的掌握程度而定,没必要为了高级特性而用高级特性,你可以简单的把C++当成当类的C来用也是可以的。
    #lovejoyboy 发表于2007-09-08 17:21:15  IP: 222.76.128.*
    而且我研究了下,基本上都是linux和unix下的大牛,windows下混的程序员都不骂,反正咱们也不用写操作系统之类的。
    #irplay 发表于2007-09-08 17:39:40  IP: 58.210.78.*
    不看好C++,感觉高不成低不就...很快就会被淘汰掉.
    #lovejoyboy 发表于2007-09-08 17:39:57  IP: 222.76.128.*
    这些高喊着只要C而不要C++的家伙只怕只能跑linux或unix下混了,在windows下只用C可不好混,到时再学C++就迟了。
    #lovejoyboy 发表于2007-09-08 17:40:58  IP: 222.76.128.*
    别的领域我不太清楚,至少在PC游戏开发上90%用C++。
    #lovejoyboy 发表于2007-09-08 17:42:48  IP: 222.76.128.*
    而在很久以前,PC游戏开发还是C的天下,可现在呢?已经是C++的天下了,C的市场份额正越来越小。应用领域的开发不比底层系统的开发,要求效率和重用并重,C++自然是很好的选择。
    #duyanning 发表于2007-09-08 18:14:18  IP: 221.11.38.*
    看来Torvalds不光对C++有意见,他对“抽象”两字意见就大得很喽。
    不过这也容易理解,Linux文化的特征就是hacker传统,他们分不清也不想分清programmer和user的区别,不论你是职业程序员还是家庭主妇,要想用linux,你就只能把自己当作一个hacker。
    #duyanning 发表于2007-09-08 18:17:32  IP: 221.11.38.*
    轻视抽象的结果就是:
    当一个家庭主妇坐到一台Linux机器面前的时候,她看到的是和天才程序员Torvalds看到的一样赤裸裸的机器。
    #Mephisto_76 发表于2007-09-08 18:40:51  IP: 221.6.3.*
    管他Linus Torvalds怎么讲,我就用C++,不喜欢用C,因为我不做底层开发,也不愿做。

    计算机的出现说到底,是为了替代人的工作的。现在多出了各种衍生的功能。一些人说到做底层,就眉飞色舞,其实他们是为了底层而底层,而忽略了任何东西其实都是人类的工具这个真理。我不知道是linux为这个社会做出的贡献更大,还是internet、http、google、autocad等东西给这个世界做出的贡献更大。但是我认为是internet、http、google和autocad等的贡献会大的多。

    这个世界上操作系统太多了,技术壁垒也是太多了。多少人的精力花在了这多出来的东西上?其实最好这个世界上只有一个操作系统,一种计算机架构,一个二进制程序标准,大家在一个规范下进行开发,这样计算机应用早就不是现在这样了。

    至于C和C++这样的东西。“C++ JAva,,C#是从C衍生过来的·可能某一方面比C强,但不可能超越C的”到底是笑柄还是真理,自有历史来验证。



    #Mephisto_76 发表于2007-09-08 18:49:54  IP: 221.6.3.*
    对于应用领域来讲,我不需要C,完全可以做出很有价值的东西来。

    从公司老板来讲,完成相同功能的软件,用C如果要一年,那么可能用python只需要两个月,用C++需要半年,用java需要四个月,用C#需要三个月。那老板的选择也是很显而易见的。这就是为什么用C#、java开发的公司越来越多的缘故。不要说什么民族软件产业,软件基础之类的屁话,资本家的觉悟可不会像你这样高。

    #ilyjyz2002 发表于2007-09-08 19:26:58  IP: 222.68.18.*
    萝卜青菜各有所爱,骂人就不对了
    #zheng616 发表于2007-09-08 19:59:07  IP: 58.83.53.*
    justforhigh518 说得最好.
    #lovejoyboy 发表于2007-09-08 20:04:52  IP: 222.76.128.*
    资本家只管赚钱,用什么语言无所谓,关键是开发效率。
    #viqqw 发表于2007-09-08 22:48:52  IP: 59.155.98.*
    本人认为,只要精通什么语言都好。
    #healer_kx 发表于2007-09-08 23:10:37  IP: 221.219.252.*
    justforhigh518 说得最好.
    #JYYCOM 发表于2007-09-09 12:30:08  IP: 61.150.43.*
    每次语言之争都会引来很多人气。
    #jianshe999 发表于2007-09-09 14:16:33  IP: 124.78.107.*
    我相信如果 Linus Torvalds 是做应用级开发的话,他一定会选择 C++ 或者 Java 的。
    1. 公司/团体根据所做的事情选择合适的语言、合适的程序员
    2. 程序员根据自己的兴趣选择语言、根据自己会什么语言选择做什么工作
    #lovejoyboy 发表于2007-09-09 14:28:02  IP: 222.76.128.*
    糟糕的程序员用任何语言都会写出差劲的代码。因此这实际上是与语言无关的。:-)
    #lovejoyboy 发表于2007-09-09 14:44:49  IP: 222.76.128.*
    很搞笑的一点,似乎使用某种语言必须等到精通那种语言之后才可以使用,C++的高级复杂特性应该在你真正掌握了之后才用,说实话,即使你不用C++的高级特性也可以写出很漂亮的代码,而很重要的一点是C++支持面向对象,而C不直接支持。C++受到众多语言的围攻也是必然的,包括C#、PYTHON等,没有一种语言可以包打天下,都是互补的。而且我觉得简单的就是美的,如果一个人写的代码大多数人都可以看懂,他绝对是一个十分优秀的程序员。
    #eduyu 发表于2007-09-09 15:35:02  IP: 124.229.152.*
    用C就是蜗牛在跑,虽然每一步都很扎实,可是效率太低。说不好听就是在藐视软件工业。如操作系统这种东东,可能C会好一点,大部分的东东还是要讲投入产出滴。
    #yxxyun 发表于2007-09-09 15:44:17  IP: 219.217.63.*
    又见吵架,还是大牛,唉,这么多BS,不知BS怎么想。。。不过人家好像不参与语言的争论。
    #duyanning 发表于2007-09-09 16:13:53  IP: 221.11.38.*
    Torvalds实在是粗,真他妈的粗。
    话糙理更糙。跟Stroustrup没得比。
    #duyanning 发表于2007-09-09 16:30:20  IP: 221.11.38.*
    “——当库无法工作时无穷无尽的折磨(别跟我说什么STL尤其是Boost很稳定而且可移植性很好,那全是屁话,而且一点都不可笑)
    ========================
    是C程序不需要库?还是轻视“抽象”的Torvalds不用库?

    "——低效的抽象编程模型,可能在两年之后你会注意到有些抽象效果不怎么样,但是所有代码已经依赖于围绕它设计的‘漂亮’对象模型了,如果不重写应用程序,就无法改正。
    ========================
    没有抽象的模型就是高效的?
    抛开抽象,可能在两年之后Torvalds便会发现所有代码已经依赖于围绕它设计的‘丑陋’非对象模型了,如果不重写应用程序,就无法改正。

    论效率,C++至少等于C。
    论优雅,C至多等于C++。
    #weishenm 发表于2007-09-09 22:37:59  IP: 218.246.72.*
    C语言是属于黑客的语言,黑客不考虑开发速度
    问题,而更多的考虑的是它的可能性。

    C++在商业应用中有一定的价值,它加快了
    开发速度,比较C而言,但也带来了不必要的
    麻烦,现在正在被JAVA 和python等语言取代。

    C++,面向对象,承诺的过多,实际上做的不好不多,现在就死受在图形编程领域了。

    我预言,不久以后在图形领域,也会被别的
    新型的语言替掉。







    #weishenm 发表于2007-09-09 22:39:22  IP: 218.246.72.*
    实际做的好的不多。

    #weishenm 发表于2007-09-09 22:43:57  IP: 218.246.72.*
    C++的问题,是它的设计哲学问题,靠
    改进,或增加库是解决不了的。


    #lovejoyboy 发表于2007-09-09 23:29:37  IP: 125.77.222.*
    我预言,不久以后在图形领域,也会被别的新型的语言替掉。
    ---------------------------------------------------------
    你凭什么预言“不久以后在图形领域,c++也会被别的新型的语言替掉。”?
    #lovejoyboy 发表于2007-09-09 23:37:35  IP: 125.77.222.*
    光是靠C++可以直接调用操作系统提供的API函数以及面向对象特性的支持,C++就不会被淘汰掉。
    #lovejoyboy 发表于2007-09-09 23:37:59  IP: 125.77.222.*
    C不死,C++就不会死。
    #APOLLO_TS 发表于2007-09-09 23:45:04  IP: 59.44.118.*
    新语言诞生好像需要机缘吧!
    #lovejoyboy 发表于2007-09-09 23:45:09  IP: 125.77.222.*
    整天都有人喊着某某语言要死了,今天是C++,明天是JAVA,更早以前还有人喊C要死了,结果这些语言都活的很好。倒是BASIC没人喊,可是已经死过好几回,也重新活过来好几回。与其折腾这些,还不如学些实用的技术。
    #stlyy 发表于2007-09-09 23:58:57  IP: 123.6.32.*
    ---数千亿美金的微软帝国就是建立在C++上的
    扯蛋,windows是c写的。

    强悍的型的软件大部分都是c写的,java虚拟机,oracle内核等等。
    c的表达能力很强,在历史积累的代码最多。这个别的语言没法比。

    c++是过于复杂了,基本上不用写算法和核心部分,mfc在我的程序里也就用用界面,算法和业务处理基本上都是c。

    企业开发,java现在正在朝这个方向发展,大量代码积累,到一定时候也是无法替代的。
    #bamanzi 发表于2007-09-10 00:01:41  IP: 58.60.26.*
    从几年的实践来看,我觉得从面向对象这个角度来看,C++很好,但C++这个东西太复杂,太容易导致错误,用上几个模版后,编译时搞出一大堆不知所云的信息也是常事。俺是觉得C++写的东西很容易变得不可维护,尤其是有C++高手加入以后。

    不过俺没有上面各位这么确信,对很对事物都抱着一种敬畏的态度,因为我不知道本人不够聪明,没有认识到C++的各个方面。

    刚才我统计了一下sourceforge.net上用C++和C的项目数,分别为22462个和19623个,这么看C++更适合大家写东西。不过C++项目中处于stable阶段的是4326个(19.26%),处于mature阶段的是427个(1.9%),而C项目中分别是4792(24.42%)和615个(3.1%)。总结一下,似乎C项目更容易稳定和成熟,可维护性高些。

    不过也许这不能说明什么,因为sf.net上只是些开源软件,上面各位又说C++在windows上应用普遍,而windows上素来没有多少开源传统。又或者商业软件又有不同。各位自己乱炖吧。
    #lovejoyboy 发表于2007-09-10 00:13:31  IP: 125.77.222.*
    不管什么语言,你把它学好了用好了,你就是神。不要新出来一种语言,就喊着某某语言要死了,结果这种新语言学了一段时间后发现了一些不爽的特性,就又回到原来的位置,说新语言不行,旧语言要杀个回马枪。一天到晚的这种语言跑跑,那种语言碰碰,一辈子都停留在表面水平。每次总要喊一堆口号,显得自己很有预见性,高人一等的样子。一些语言是死是活不是你喊出来的,只要这语言还有人用,编译厂商还愿意支持,它就不会死。再说编写程序语言会占多大的重要性?更重要的是对具体领域技术和业务的熟悉。
    #bamanzi 发表于2007-09-10 00:24:17  IP: 58.60.26.*
    这位lovejoyboy看来最激动,居然回了20次
    #weishenm 发表于2007-09-10 01:07:38  IP: 218.246.72.*
    C++的缺点,很多人都知道,不过要取代它也不是一件容易的事。
    不过最近几年,新兴的语言,很多都是因为回避了C++的缺点。

    新的语言,就像新的数据库一样,需要天才人物的才智。

    与C相比,C++是具有争论的语言,有争议是有争议,现在有些
    领域,没有办法还只有用它。

    但是对C++,和面向对象的盲目崇拜就没有必要了,就像这位质询
    linus的人,不过是因为自己狭隘视野所限制。
    #cloudwu 发表于2007-09-10 01:37:56  IP: 125.120.185.*
    就这个话题写了一篇:C 的回归

    http://blog.codingnow.com/2007/09/c_vs_cplusplus.html

    人肉 track back 一下 :)
    #Could 发表于2007-09-10 09:09:53  IP: 220.231.194.*
    上面有人说java虚拟机是C写的,实际上是C++写的,
    sun公司的java虚拟机是25万行左右的C++代码,
    虚拟机的源码可以在openjdk站点去看。

    只要C不会死,
    C++就不会死,
    很明显的问题。
    C++是更好的C,
    即使你不用面向对象的功能、不用模板,
    仅仅只用C++中变量可以在需要时在定义的功能也会让C的代码
    可读性变得好很多;
    仅仅只用名字空间,就可以使变量和函数的命名变得简单很多。

    C++的复杂无非就是提供给程序员更多的选择,
    这个世界上没有几个人敢说自己把C++所有的东西都搞透了,
    但是C++就是这样一种语言,
    你只需要用其中的一部分特性,
    就可以做出很牛的软件出来。
    #yxlijinzhu 发表于2007-09-10 09:24:35  IP: 203.95.109.*
    掉价!
    #duyanning 发表于2007-09-10 09:28:04  IP: 221.11.38.*
    C++的问题,是它的设计哲学问题,靠
    改进,或增加库是解决不了的。
    ====================
    请问C++的哲学是什么?又有怎样的问题?
    #chinagdh 发表于2007-09-10 10:32:49  IP: 124.243.202.*
    问题在于学习一种相对简单的程序所做的成就并不比复杂的小,那么你还选择复杂的方法?

    C++ 原本应该是为了简化C的很多困难的问题,如果从绝对可带来好处方面少说了什么,那么肯定就没有优势可谈。

    多态看起来很不错,但实际上却是引起维护负担和层级过多,难准确理解全貌,不理解全貌又没办法分成小问题来理解。

    写程序应该是为了达到程序员的目的,而语言特性过重,那么在编写过程中会有很大一部分精力放在怎样使用这些语言特性。
    #chengwei_xj 发表于2007-09-10 10:43:05  IP: 123.116.112.*
    我有一点疑问,大家一提C++就说OO,模板,抽象。。。但写C++程序就必须OO、使用模板吗?Stroustrup早就说过,C++是多泛型的语言,支持结构化、OO等多泛型的编程。如果你做底层,就用结构化编程方法,函数、子函数、模块;想抽象了,就OO,对象、继承、接口;想构造复杂的类库、组件了就模板上阵。有问题吗?你用C写的程序,用C++中的结构化编程子集也可以做到。难道选择多了也是错吗?那我还说C让人没有选择呢。C这么多的人在用很大程度上是因为历史原因,我不知道Linus Torvalds是出于什么原因这样说的,但至少,这样不够聪明,这个年代,想孤芳自赏,也只能一个人赏了
    #weishenm 发表于2007-09-10 11:00:26  IP: 220.231.42.*
    C++的设计哲学,可以参看C++程序设计语言一书,也就是
    C++之父写的那本书,它的前言,它区分了C和C++的区别。

    简单地说,C与C++有非常不同的设计思想,C只是提供描述
    机器行为的一种语言,而不帮你做任何事情,你愿意怎么做是
    你的事。(只要冯诺依曼机不过时,C就不过时).

    而C++是要帮你做一切事情,但有的时候是帮倒忙。最起码C++
    比C更优秀这个结论是得不出来的,高手往往是对某一种语言特别熟,而不是不断地学习各种语言。相比之下,linux之父,比他的
    辩论对手,更是高手。


    #Anod221 发表于2007-09-10 11:17:31  IP: 124.114.93.*
    linus确实是比不上stroustrup,不过它既然用了C,确实是为了更好的利用代码来控制程序。但是就本身来说,那也是因为它没有很细微的研究了c++编译器,才会无法用c++来控制程序的,而没有一个c++的编译器能够做到实现了c++的特性(某人说了)
    #pass86 发表于2007-09-10 11:47:50  IP: 60.212.252.*
    哎。不知道说啥好。
    #Mephisto_76 发表于2007-09-10 12:00:57  IP: 172.17.32.*
    大家猜要是linus给bjarne stroustrup打个电话,把他在这里写的东西给bjarne stroustrup讲一遍(并且有记着在场),会发生什么样的事情?
    #duyanning 发表于2007-09-10 12:43:32  IP: 221.11.38.*
    大家猜要是linus给bjarne stroustrup打个电话,把他在这里写的东西给bjarne stroustrup讲一遍(并且有记着在场),会发生什么样的事情?
    ===================
    Stroustrup肯定会说抽象如何如何好。
    但决不会说没有抽象的C如何如何糟,C++毕竟是C的++。
    Stroustrup做不出Torvalds那种山大王的姿态。
    #CXXSoft 发表于2007-09-10 12:55:00  IP: 125.70.255.*
    呵呵,大牛开骂。专门跑了听到起....
    #fish6344 发表于2007-09-10 13:35:01  IP: 125.71.189.*
    大家不必在意别人对C++语言的敌意!听听java、Delphi及C#等语言的发明者们的声音,无一不是在大谈他们的东东的好处,而C++是这也不好那也不好。但他们在自诩自已的语言效率极佳的时候,无一不拿C++作为参照(声称等同甚至超过C++)!他们总用自已偏爱的语言的优点(未必是优点)去攻击C++的缺点(也未必就是缺点), 这其实说明他们在潜意识上已视C++为开发工具的标准,这点很象中国古时候那个卖矛和盾的人!即使是Linus Torvalds对C++的异议,我认为异议的实质也是他对OOP以及使用C++而滥用继承的人的不满,对C++语言的攻击反而略显苍白。

    科学领域本身就是百家争鸣的世界,语言激烈点也未尝不可。但我觉得每一种语言都应该被我们所尊重。各种语言的存在,自然有其存在的理由。软件工程界至今,还没有哪一种语言可以堪称完美,没有哪一种语言万能,这是不争的事实!

    C++在今天,的确今非昔比,但这并不是因为C++不够好、不如其它语言,主要原因是今天的电算环境和C++诞生时相比,发生了巨大的变化。互联网兴盛,硬件性能提升而价格下降等等因素导至java应运而生。C++作为一个80年代诞生的静态语言,加上它赋预使用者太多的权力(权力可是双刃剑啊!)、标准的约束性以及C++的教育状况,有今天的境况是完全自然的。

      所以大家不必在意世人对C++的非议,我可以作这样的比喻:

    如果你想作一个原始社会的部落首领,请用汇编;如果你想当一个封建君主,请用C;如果你想作一个开明伟大的国家元首(当然你必须有超凡的驾驭权力的能力!),可以使用C++,如果想当大臣,知府什么的,那会有更多的选择...... 

    我永远爱你-C++!
    #lurenfu 发表于2007-09-10 14:05:40  IP: 218.80.241.*
    楼主的标题过于断章取义

    Linus的本意并不是说C++这门语言很糟糕,而是指特定的应用(比如系统底层开发、他目前开发的GIT等)中,C语言更合适,如果非要把C++扯进来就很糟糕了

    显然是楼主这一标题在CSDN引起了大浪
    #lovejoyboy 发表于2007-09-10 14:43:10  IP: 125.77.222.*
    请教各位C大牛们,如果让你设计一种语言,这种语言的语法可以兼容C语法,也就是说可以直接调用C函数库和操作系统提供的API函数,同时又支持面向对象这一特性,你们会如何设计?现在的众多语言中,除了C++可以做到这点外,还有什么语言?C#?JAVA?还是。。。
    #lovejoyboy 发表于2007-09-10 14:51:08  IP: 125.77.222.*
    如果你觉得可以设计出比C++更加完美优雅的语言,你当然有资格指责C++的不是,可是你可以吗?难道你认为C#,JAVA等语言仅仅在语法提供以及垃圾回收方面做的比C++更好就因此否定C++是一种充足的依据?难道你都不要直接调用API函数,如果要,你就会体会到C++的好处,当然C依然具备原始优势,但是C#,JAVA等因为语法与C不兼容而倍感痛苦和别扭。任何语言的设计都会有缺陷和不足,一个聪明的程序员当然会避开这些不足和缺陷,而很好的利用语言提供的便利于编程的特性,全世界有这么多的程序员使用C++,难道他们都是傻瓜?
    #lichunpu 发表于2007-09-10 15:13:54  IP: 218.202.107.*
    如果程序员是一个木匠,那么C++就是各种板材、电锯、铁钉等
    方便工具和材料,而C是刚砍倒的大树,手工锯条等原始工具和
    材料。前者做的事后者基本上都可以做,但后者做的事前者未必
    都能做。
    在下 认为从汇编 到 C 到 C++/java是一个从抽象到具体的过程,越抽象越简单,但难于理解,更难于熟练。
    刚刚完成的一本小册子
    《C语言本与末》
    http://www.cnitblog.com/Files/lichunpu/CBT1.rar
    里面阐述了在下对C和C++之间关系的观点。
    请多指教!
    #lichunpu 发表于2007-09-10 15:15:57  IP: 218.202.107.*
    在下 认为从汇编 到 C 到 C++/java是一个从抽象到具体的过程,越抽象越简单,但难于理解,更难于熟练。
    刚刚完成的一本小册子
    《C语言本与末》
    http://www.cnitblog.com/Files/lichunpu/CBT1.rar
    里面阐述了在下对C和C++之间关系的观点。
    请多指教!
    #lichunpu 发表于2007-09-10 15:21:49  IP: 218.202.107.*
    一个用C++写的小文件系统
    http://www.cnitblog.com/Files/lichunpu/nn.rar
    后总感觉不爽又用纯C改写了,很爽,
    http://www.cnitblog.com/Files/lichunpu/nn40.rar
    其中滋味,大家自己写写就知道了!
    #chengwei_xj 发表于2007-09-10 16:07:00  IP: 123.116.112.*
    楼上的,如果用C++重写你的程序,不用继承、不用OO,只用C++中的C语言子集,不知道和你用所谓的“纯C”改写的程序如何???
    #yinwhite 发表于2007-09-10 16:21:44  IP: 218.72.41.*
    我没资格说C和C++倒底哪个好,但事实AUTOCAD这个软件是用C写的,且这个软件运行得很好,应用的范围也很广,没有听到有人说AUTOCAD这个软件怎么怎么不好。
    #mones 发表于2007-09-10 16:22:48  IP: 218.69.212.*
    就像前面各位说的那样,编程语言对于程序员来说,就是一种信仰,每个人心中都有他自己的圣地。别人不容侵犯。