孟岩

孟岩ID:myan
[修改头像]
1560346次访问,排名6好友1人,关注者32
总是在思考存在的问题
myan的文章
原创 146 篇
翻译 0 篇
转载 3 篇
评论 5202 篇
最近评论
zfbp:现在成都的状况比较稳定了,已经有很多企业开始上班了。汶川、都江堰还是比较恼火。
jieao111:Kevin在成都啊,,以前记得在c/c++版抢过一同分,,bless!
YuLimin:我当时也在成都,大家都来尽一份力量吧!!!
sxbluebird:我老家后山有棵老苹果树很时尚,谁能看见?我公司桌面上有台PC很时尚,公交车上哪个mm会暗送给我秋天的菠菜?


这个话,说的太经典了。 人人都能懂, 这才是哲理。
Terry001:成都地震发生的时候,我正在午睡,我一般睡的会很死,房子把我摇晃醒了,太恐怖了,结果没穿衣服就冲下了楼,搞的甚是狼狈,从来没想到此生也有裸奔的时候。
直到现在,心情都没稳定下来,不过比512好多了,但是还是很担心余震,现在做在家里上网心都是虚的。成都今天不知道从那里报出的消息要缺水了,结果超市的饮用水一强而空。
目前感觉头脑是昏的,时不时会感觉在晃。目前待在成都似乎是一种折……
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    测试
    友情链接
    老赵的博客
    存档

    原创 关于C++复杂性的零碎思考

    新一篇: 分析琐思

    本文系数月前随手写下的,没有起承转合与段落章法,观点更是未经推敲。仅供参考。
    ------------------------------------------------------------------------------------------

    C++的表面困境来自两方面,一是开发效率低,而是容易犯错,维护难度大。此二者俱是表象,本质就是一个——过度复杂。或有人说C++之关键缺陷是没有统一完整的类库支撑,Bjarne Stroustrup即强调此因素。然而这其实只不过是一个结果,而不是原因。正是因为语言太复杂,才无法在有效期内开发出高质量的大一统的类库。

    C++的复杂,并非是其体积庞大之必然结果。复杂是对结构混乱无序程度的描述,规模大,结构不见得必然复杂。

    C++的复杂,也并不是如很多人所认为,是若干种编程范式(paradigms)的并存而至。事实上,现代实用编程语言至少有2-3种范式才能登大雅之堂。以范式数量论,Python和Ruby等新型动态语言的范式甚至多于C++,然而它们却以简单和开发效率高著称。

    C++复杂的根源在于三大约束:与C的完全兼容、静态类型检查、最高性能。在三大约束下,C++未能完善对于面向对象思想的支持,未能建立强大的动态能力,从而使得C++在OO这个单项上存在本质缺陷。事实上,C++的过程、OB模型相当成熟和稳定,而泛型模型,就单项来说,除了语法丑陋之外也没有大的问题。缺陷集中体现在OO模型的实现,并因此干扰了其他几个范式的完整程度。然而,OO的缺陷绝非设计者的偏执,其原因在于三大约束。如果坚持三大约束,则即使再重新设计一次,结果也与今日相差不远。Stroustrup在多种场合表示,对C++的设计没有大的后悔之处,意思就是这个。侯捷先生早在2001年初即对我说,C++在OO上不及Java,当时体会不深,认为没有大一统的单根类库会使设计更加灵活,后来又认为凭借GP可以抵消OO的不足甚至超越之,现在看来即使不是不可能,这条道路也必然是艰辛异常,成败难以预料。

    又因为上述所有因素的综合作用,C++基础类库的建设只能进行到很低的高度上就停下来,因为再往上走就面临重重困境和无穷无尽的争论。C++标准库实际上是一个距离应用相当遥远的非常基础的程序库,其主体部分只相当于Java中System和Util两个package。而C++宁可停在这样的低层次,也不愿意放弃三大约束中的任何一个。这种执着使得高层标准库设施的建立异常困难,使用也不容易。Boost库中相当部分组件的易用性不佳。

    模板的复杂语法与三大约束也有直接的关系。另一个原因是Bjarne在发明模板时目标单纯。C#和Java加入泛型机制的时候,没有继承C++最好的经验,却不约而同地继承了C++模板机制中最坏的部分——语法,短期来看,丧失了一次改革的良机。长远来看,必成累赘。

    不完善的异常机制则是在木已成舟的情况下迫不得已的设计。

    C++中的多种范式并行,是一些最复杂问题的表面原因。以至于Doug Lea建议在一个项目里只坚持一个范式。但是这仍然只是表象。归根结底还是因为OO的缺陷,使得与其它范式合作时困难成倍放大。故自接受Doug Lea思想以来,我的C++(乃至其他现代语言,尤其是Python等多范式语言)的开发设计思路是:

    1. 首先选定一种思维方式(即范式),尽可能只用这一种思维方式解决问题;
    2. 如果在局部遇到其他思维方式更得力的问题,则经慎重考虑后,可以将另一种风格包装在局部,解决局部问题。但整个系统在某一层次之上看来,应当是统一一致的。一般C++的开发,应以OB为基本风格。除非有类似MFC那样庞大而成熟的OO库支持,不应贸然在整体上使用OO风格。
    3. 多种风格混用,除非有已被充分讨论并验证的方案(即成熟模式),可提供单一风格不能提供的较大优势,否则应极力避免。当然鼓励在研究中探索,但实践是另一回事。

    C++完全可以在90年左右摆脱C的约束,随后简化模板语法,完善异常模型,接纳可选GC,建立完整的单根类库,付出性能小幅度下降的代价之后,实现语言整体升级。

    但是C++选择了另一条路,三大约束坚持到底,坚守系统层面,以替代C为己任。是福是祸,实难判别。如果90年代初选择升级,胜则扼死Java于摇篮之中,败则寸土不保。不过以C++之高性能,胜面应稍大。如今看来,在系统面彻底取代C已无可能。

    1994年为STL拖延标准立案时间长达四年,如今来看功过亦存争议。错过黄金时机不说,STL典范一立,库设计风气为之一改。然而在解决应用问题上,泛型较之OO,适应能力远逊之,且应用困难。

    总之,C++的三大约束,既是其兴起之要素,也是其衰落之源头,同时,又是其今天得以屹立不倒的重要基石。其是非功过,实难一言以蔽之。

    补充:2004年10月20日
    C++/CLI之对于C++的意义,其实并不在于使C++重新获得了制胜Java或者C#的机会,而在于巩固了C++作为.NET平台上系统语言的地位。由此知,C++/CLI的发展,的确如Stan Lippman所说,是C++一贯发展思路的延续。三大约束固然已经放弃,但其精神实质仍在,形攻而实守,未来将可作为.NET上唯一最强之系统语言而长命百岁。

    C++/CLI决不简单,但在大多数时候,它能够比传统的C++表现的简单些。这就是Andrew Koenig说的,通过复杂实现简单。

    C#和Java的繁荣期,则有赖于人们对于大一统的中层次语言的信仰有多坚持。此两种语言无论在系统开发还是在应用开发中都非最优选。目前C#出现一些迹象,引入一些动态语言特性如cmdlet,又强化系统编程能力,想上下通吃。这是一条不归路,必会使C#变得更加复杂怪异。

    学习编程语言,通语法能实践,不过十分之一。真正重要的是掌握其多种多样的实用的idioms或模式。这些模式才是体现了语言精神的东西。未掌握各种语言中的主要应用模式,则应羞于用“会”字。常听有人说某某语言一周乃至一两天即可掌握,这个掌握的层次肯定是很低的。真正要“掌握”语言,则我等凡人,诸事缠身,非得集中精力学习实践一两年,将该语言所擅长领域的应用问题熟悉过一遍,才有可能。若论精通,则十年也不容易。Henry Spencer用了30年C,仍乐此不疲;Pragmatic Programmer中评价Ruby说,学上四个小时就可以用它解决实际问题,但是10年之后还为它层出不穷的新意感到惊讶。偶见有人举出自己“精通和掌握”的工具和语言,动辄长达八九上十种,实为笑柄。真正掌握一种,已经是难能可贵,熟练掌握两种层次不同,思维不同的语言,应是有抱负的程序员的自我要求。何况如今之软件开发涉猎甚广,仅通编程层次还显不够。不过总之百招会不如一招精,做什么工作都要有自己的过人之处。
     

    发表于 @ 2004年10月23日 23:48:00|评论(loading...)|编辑

    旧一篇: 9月17日Stan Lippman访谈录文字节选

    评论

    #zzj0820 发表于2004-11-11 13:15:00  IP:
    TrackBack来自《关于C 复杂性的零碎思考》

    Ping Back来自:blog.csdn.net
    #网破鱼欢 发表于2004-12-17 07:29:00  IP:
    TrackBack来自《关于C 复杂性的零碎思考》

    Ping Back来自:blog.csdn.net
    #Cooking of Develop@Home 发表于2005-03-17 23:17:00  IP:
    TrackBack来自《孟岩:关于C++复杂性的零碎思考》

    C++的表面困境来自两方面,一是开发效率低,而是容易犯错,维护难度大。此二者俱是表象,本质就是一个——过度复杂。或有人说C++之关键缺陷是没有统一完整的类库支撑,Bjarne Stroustrup即强调此因素。然而这其实只不过是一个结果,而不是原因。正是因为语言太复杂,才无法在有效期内开发出高质量的大一统的类库…… 点这里阅读原文(http://blog.csdn.net/myan/archive/2004/10/23/148900.aspx)...
    #d 发表于2004-10-24 09:29:00  IP: 155.97.192.*
    我期待myan能设计实现一个比C++,C,JAVA,C#更好的语言,不知道myan是否这方面的打算和准备。
    我不看好C++/CLI,它试图统一不可调和矛盾,注定将是个怪胎。
    #myan 发表于2004-10-24 09:57:00  IP: 219.236.75.*
    to d:
    你太高看我了。我现在在编程上感觉手无缚鸡之力,怎能妄谈设计,遑论超越。不过是茶杯里的风暴而已。

    to tinyfool:
    没有时间写长的东西,也没有那么自信。这是一片手记,如果是专门写来发表的,行文上不是这个风格。


    #tinyfool 发表于2004-10-24 00:06:00  IP: 61.51.131.*
    看了stan lippman的采访录,还有第二书店书友会的报道,很期待你能有时间写一个对c++看法的比较系统的东西。

    刚才粗看一下,已经觉得受益匪浅了,可惜感觉还是稍微短了一点,呵呵。

    对于,C++/CLI的革新,抑或着说某种背叛,因为未来技术发展还有很多不确定性,所以,如今真是很难说清楚。我想对于大多数喜欢c++的人,对c++/cli的恐惧或者厌恶来源于:一种开放标准,一种独立于厂商的标准,目前有可能被ms强大的商业技巧所吞没而变成某种程度上的厂商标准,这将对行业的健康发展的带来潜在危机......

    #周星星 发表于2004-10-24 16:23:00  IP: 218.2.111.*
    自楼主认识stan lippman之后就对C++极尽贬低之能事,文章太长,又是周末游戏时间,自楼主认识stan lippman之后就对C++极尽贬低(^_^开个玩笑)之能事,文章太长,又是周末游戏时间,就随便挑几段看看,更随便谈谈看法:

    复杂即非优点亦非缺点(1),并且不是在任何情况下都是一成不变的(2)
    1. 驾驶飞机肯定要比驾驶单车复杂些,但从来没听说过这一点受人批评。
    2. Java比C简单吧,但假如要制作一个操作系统的话,估计Java比C复杂多了。

    C++诞生的最初目的是OO,但自有泛型加入后,OO已经退居末座了,我觉得现在谈论差不多已经人老珠黄的OO实在没意思,OO不过尔尔,我从自己的项目中看,泛型的应用比例远远大于OO的应用比例;您说泛型语法丑陋我觉得有点草率,对于泛型而言仅仅增加了两个关键字而已template和typename,我不认为你还能设计出更为简洁的语法来。

    对于C#和Java之所以不能很好的实现泛型机制我有不同意见,我认为:泛型机制之所以不能在C#和Java上完美的实现是因为 C#和Java的“一切都是对象”这个观点是根本错误的,结果是所有类都有一个无用的公共基类object。

    对于“C++中的多种范式并行”的那几段,我也有意见,C++和Java/C#不同,她是通用语言,因此她必须要能包容现在的一切以及未来的变化,所以不是C++中多种范式并行,严格来说C++中并没有范式,但她能包容一切,包括包容一切的范式,现在的或将来的,正确的或错误的。

    “C++/CLI之对于C++的意义,……在于巩固了C++作为.NET平台上系统语言的地位。”
    哦,原来弄出个C++/CLI这样的怪胎,只是为了.NET,购买全球卫星防御系统只是为了打死只蚊子。

    也有两个观点我很赞同
    1. C++有一部分的复杂是为了与C兼容,目前看起来她确实做错了。
    2. C#想上下通吃是一条不归路。
    #KK 发表于2004-10-24 16:51:00  IP: 219.232.185.*
    兄台文笔不错,虽然文中某些观点不敢苟同,但对兄台仍是钦佩不已。还望以后能多见兄台之文章。
    #cber 发表于2004-10-24 21:43:00  IP: 203.86.70.*
    文章写的果然够乱,让我都觉得头晕:(

    “复杂”这个话题,对于不同层次的人来说有着不同的含义。如刚刚进入软件开发的菜鸟们,可能会认为语法的复杂就是他们碰到最大的问题;等到他们成熟了一点后,就会觉得库的匮乏让人束手束脚;再下去就是,用于解决问题的手法(对应于paradigms)不够炫;然后就可能是,idioms太多,实现pattern太复杂之类

    所以我认为,myan这次的文章完全就是一个失败的随笔(没有充分考虑不同的人的需求)^_^
    #myan 发表于2004-10-24 23:36:00  IP: 219.236.75.*
    to cber:
    呵呵,你说我乱,我一点都不抵赖,本来就没想写一篇太通顺的东西。立此存照的意味大一些。反正这是blog。

    to 周星星:
    你对照一下我的文章,好像你正在实践我的建议,避免oo,以OB为主。你不可能以GP为主,GP只是毛,要附在皮上的。我想你的那张皮不会是PO的吧。
    #yjh1982 发表于2004-10-25 09:42:00  IP: 210.21.95.*
    跟stan lippman一个徳性了.
    #周星星 发表于2004-10-25 10:07:00  IP: 218.2.111.*
    to myan:
    对OB我100%的赞同,对OO我只能赞同50%,但不是说仅仅在C++才这样,我的意思是对于任何语言(Java或C#)都是这样,都应该冷静的看待OO,OO不是保治百病的灵药,且它自己就有三分毒。看到Java将OO用得那样变态,简直是为了OO才OO。

    GP是毛,但
    1. 她不一定只能依附猪皮,她也可能依附猫皮、虎皮等其他的皮
    《The C++ Program Language》特别版中Bjarne说GP和OO没有太多联系。
    2. 毛所依附者,不一定需要一张完美的皮
    GP即使依附OO,她也不需要最终的那种变态的OO
    #Hoping 发表于2004-10-25 11:04:00  IP: 210.21.223.*
    我刚刚使用C++完成一个嵌入式电信软件,规模还算大吧。在技术层面给我印象最深的是,语言的表达力。这个表达力有两个层面:一个是语言本身的表达力,一个是语言在构建更具表达力的mini language方面的能力。我这里所说的表达力是针对特定应用领域而言的。OO也好,GP也好,OB也好其实都是构建这种表达力的工具。但是前提是你要对要构建的系统的domain有一个很好的认识,有一套很好的抽象,定义出一套正交、内聚、简洁、清晰的领域语言。然后,逐步去把这套DSL构建出来,并基于这个DSL去搭建这个系统。这样作出来的系统往往更清楚,更灵活,更简洁,更易于重用和修改。在这方面我个人觉得Lisp语言是最为合适的语言(大概是应为Lisp语言和Lisp程序在形式和本质上一致的原因,再加上Lisp Macro的强大威力吧)。此外。除了现在流行的动态语言如:Ruby、Python外,我觉得和Java和C#相比,C++在构建更具表达力的DSL方面要更胜一筹。当然,也存在很多问题。我认为最为突出的是两个:一是语法不够简洁明了,这会造成很多使用上的障碍,一是在逐步演化形成DSL期间,由于语言的“软性”不够,常常造成工作量很大的更改。不过,我使用C++构建出来的一套协议DSL使用起来还是不错的 :)
    #lxwde 发表于2004-10-25 17:32:00  IP: 165.170.128.*
    myan老师写的好,c++这样复杂下去永远没有尽头也不是个办法,等项目不忙了我准备学c++/cli
    #myan 发表于2004-10-25 20:01:00  IP: 219.236.75.*
    to Hoping:
    您的评论是我所看到的难得的深刻的评论,非常感谢!
    #Neo7 发表于2004-10-27 05:22:00  IP: 210.86.29.*
    多范式对语言的设计者而言是挑战,而对应用者则是福利.偶觉得楼主文中的复杂性讲得有些模糊.
    #自然 发表于2004-10-30 22:14:00  IP: 219.136.140.*
    myan我一直比较欣赏的,在国内这个环境中做到这个地步,已经非常不错了。
    只是,我有些个人小小建议提一下,对错无关紧要,可以随便听听。
    myan说自己在编程上感觉手无缚鸡之力,怎能妄谈设计,遑论超越。不过是茶杯里的风暴而已,确实有虚怀若谷的感觉,挺谦虚的。
    myan对C++的思考已经进入较深入的层次,不过我感觉仍然没有跳出C++来看待它,好比一直在森林里面,把森林的东西细细研究思考,但是始终陷于细节中,在这个森林面前感觉有些身单力薄,难以跳出这片森林之外,没能够从多个更高层的角度看这片森林,正所谓跳出三界外。
    世界万物的道理是一致的。无论是C++还是再大至整个软件,它与万物的复杂度没有差别,不比你与几个朋友在一个小酒馆畅饮的整个过程复杂,C++中的任何一个地方都可以在这个畅饮的过程中找到一一对应之处,没有任何差别。

    如果认可了这个道理,再转过头来看C++这些软件,就不会有种高山仰止的感觉,陷于细节之中,而无法俯视它。
    记得以前在家中看父辈们种菜园,一直认为这是个简单的活,实际上,如果深入下去,光种菜都足以与整个软件一般复杂,没有任何简单之处,我们可以从中找到软件的方方面面对应之处,因为万物的道理是一致的,所以种菜跟软件没有什么差别。
    说了这些,只是想说,myan提到的关于C++复杂性的零碎思考也很对,但是如果能够进一步,跳出软件的范围来看待所见到的问题,myan一定能够给我们带来更大更多的东西。以myan的悟性一定可以达到的,那时候称myan是不是大师都无关紧要了,因为已经不会在意这些称谓了,一定可以看到像Stan Lippman那样言语之间,毫无骄奢与自大,毫无造作与虚夸,平和朴实得令人震惊,因为这时候对于myan来说软件已经跟平常的吃饭没有任何差别,仅仅是生活中的一部分而已,难道听说有人因为会吃饭而骄傲的吗?
    ^_^

    不知懂了我的意思没有?
    #Lyons 发表于2004-10-31 19:04:00  IP: 202.112.93.*
    费曼(Feynman)对哲学家一直持有否定态度,因为他们通常没有实在的依据,却提出一整套学说来试图指导世人。
    ——选自费曼《你干吗在乎别人怎么想》p.106的译注

    同样的观点在《别闹了,费曼先生》一书中有更直接的表述。
    #jason xu 发表于2004-11-19 11:58:00  IP: 222.44.61.*
    赞同周星星的意见
    #boysoft 发表于2004-11-19 10:20:00  IP: 221.225.133.*
    我越来越感到孟岩受老侯影响太大了,说活投足之间都隐隐透着老侯的古板气,如果不看作者名字,还以为是老侯写的,当然了老侯其实是不会写这样的内容的,纵观历史,OO并不是解决问题的万能灵药,GC也不是提高编程效率的唯一方法,真正推动编程发展的是不是一两种语言所能做到的
    #李马 发表于2004-11-18 17:02:00  IP: 221.204.54.*
    个人感觉无论是MC++还是C++/CLI,都是C++商业化的一种变体。今天Commercial C++从MC++变到了C++/CLI,不知道随着Microsoft Application Framework的改变,明天C++/CLI又会变成什么?
    PASCAL就是一个例子——什么是Standard PASCAL?Inprise/Borland就是Standard PASCAL!PASCAL从面向过程的Standard PASCAL变到Object PASCAL(还是Standard PASCAL),之后还会有PASCAL.net,不知道再以后还会出现什么?
    幸甚,C++的标准没有掌握在哪家公司手上。
    商业化的程序设计语言就是程序员遭受奴役的一个具体体现。
    #aaabbbccc 发表于2004-11-18 17:03:00  IP: 202.156.2.*
    the best way is the way nature intended.

    for the sake of OO, to make integer a derivtive of a root object is one of the most stupid thing ever, just like to make cos(x) part of an object. mathematics had been very very successful without any OO .


    all those talk about great runtime flexablity for a static complie time checked language is useless when u still need to consider the possible usage beforhand(what's the difference to c based plugin system?). Want runtime flexablity, go for scripting language like perl.

    like many ppl had said perl is too complex and hard, how many had seen the true point of it's slogan "there's more than one way to do it"?
    #mose 发表于2004-11-19 13:41:00  IP: 210.22.125.*
    C++的表面困境来自两方面,一是开发效率低,而是容易犯错,维护难度大。

    -----〉

    C++的表面困境来自两方面,一是开发效率低,二是容易犯错,维护难度大。
    #stoneBO 发表于2004-11-19 14:26:00  IP: 202.120.113.*
    心中的一直有的个疑惑:

    c++一直都强调自己在开发大型程序上比c进步很多,但是看看用c开发

    的linuxkernel 超大东东,而用c++开发了多少比linuxkernel大的呢?


    #rwxybh 发表于2004-11-19 16:50:00  IP: 211.71.7.*
    不敢苟同!一致认为JAVA所说得“一切皆是对象”就是错误得观点,过于极端!C++发展到今天,兼容C确实是一个累赘,但也是一个优势所在,而商业化得CLI绑在MS得战车上,除了不符合标准外,实在看不出有什么意思,在。Net上用c#就够了
    #Lyons 发表于2004-11-19 23:13:00  IP: 61.179.12.*
    IBM的OS/400是用C++开发的,比Linux大且复杂。
    #阿里巴巴 发表于2004-11-19 14:36:00  IP: 61.49.126.*
    不好意思:OB模型 是什么?
    #hotman_x 发表于2004-11-20 02:05:00  IP: 222.51.201.*
    首先,Linux Kernel 并不大,让你觉得大是因为那上面有无数的GNU Application。
    其次,关于 C++ 开发过多大的系统这一点,建议去看看 BS 的个人主页(http://www.research.att.com/~bs/homepage.html),上面有一个知名 C++ 应用列表,你可以看看。其中一段 BS 口气颇为自傲:电话系统……我认为列举用 C++ 写的电话系统还没有列举“不是用C++写的电话系统”来得容易。
    另一段我认为够生猛的:Amadeus 系统:欧洲最大的民用数据中心,每秒处理5000个以上的 transaction,为 20 万终端所接入,24*7 提供服务。
    这些例子够说明问题了,觉得少可以自已去看看。

    C++ 有不适用的领域,但不要太怀疑它,在有些场合, C++会是唯一选择。
    #无锋之刃 发表于2004-11-20 12:36:00  IP: 219.159.69.*
    《C++沉思录》里有一句话我颇为赞同:“当拿着锤子的时候,通常会觉得整个世界都变成了钉子”。

    很多程序爱好者(我只能这样描述了……)多半是出于对语言的狂热才死抱着某种语言不放,而不同懂吸纳变通。

    程序员应该学会随机应变,什么样的工具能更好地解决手头的问题,就应该用什么样的工具。别死抓着自己喜欢的那种语言不放。如果要抓着不放也可以,那就安下心来好好地针对这种工具所能处理的问题做研究。能成为一个领域的专家是很难的,但是总比说些意气的话要蹋实得多。

    别再说什么“Stan lippman背叛了C++”之类的话。在批评别人前请先自我批评吧。
    #StoneBo 发表于2004-11-20 23:14:00  IP: 218.57.113.*
    to hotman_x:
    谢谢!

    个人编程体会,毫无疑问c++的确比c在编写大一些的程序的时候好控制一些. 但是当我们看到那些口口声声说,c编不了大型程序的人,不知道是否真的考虑过,如何用c编写大的程序(如果哪位仁兄知道这方面的书的不妨指出,谢谢了), linuxkernel 有 12M,也许和有些大的程序,比起来,不是很大. 但是 12M的代码,是个什么概念,我想真的关注过大型程序设计的人来说,是会有自己体会的.

    我在这里之所以提出来这个问题,本意不是否认c++在这个方面比c好,而是想看看是否 真的关注过c在大型程序设计上应用!!!!!!

    btw: c++真的太复杂了, 随着程序规模的不断增加,它带来的那些便利(相对于c)也逐渐耗尽. 不知道各位有何感受,对于一般做应用程序而言,我现在感觉测试和重构太重要了. 但是c++中,重构真的不易啊!!!!!!
    #d 发表于2004-11-21 11:22:00  IP: 155.97.192.*
    这篇早该上导读了。。。
    #fengj 发表于2004-11-21 18:13:00  IP: 219.220.210.*
    C++其实根本都不复杂!!!!
    初学者开始似乎觉得它比较复杂,但当你坚持使用后很快就觉得不复杂!
    那些说C++复杂的人可能很少用C++语言(也许只会在MFC生成的代码中加几个类和函数罢了)。
    我用C++构建了一个并行的分子动力学模拟软件包,共30多个类之间协同工作!代码很短约13000行。但至少现在我觉得C++并不象人们所说的那样复杂!
    说复杂的人别有用心啊,他们很少用C++而且还希望别人不要用!
    为了保持纯洁性,C++在Windows上或Linux上的类库并没有建相应的类库,那不是C++的缺点,它并不是不能做!一些商业公司可以来做这件事吗!
    #垃圾 发表于2004-11-22 11:23:00  IP: 222.64.101.*
    那我们还要不要使用C++啊?
    #问一下 发表于2004-11-22 18:16:00  IP: 218.11.191.*
    OB是Object Based的意思吗?

    孤陋寡闻,不要见怪。
    #匿名 发表于2004-11-22 14:25:00  IP: 220.168.123.*
    要说C++复杂也许是的,但这并不应该是C++的缺点。

    C++的语法讲究简洁,除了泛型比较难看以外,其他的都还不错。

    而什么没有单根类库和GC,这都不是C++的错,你完全可以在C++上实现这些东西。

    C++的问题也许在于每个人都对它的语法有自己的改进意见,而这些意见却永远也不能达成一致。而Java和C#只需要Sun或者Microsoft看着比较好看就可以拍板改善语法了。

    Java和C#的语法只能说是C++的子集。并没有发明任何的新功能,这些东西,也许在某一天,大家不再争吵的时候,试着将它加到C++中去,我相信C++的语法会更完美。

    C++的泛型语法实在不好看,这是真的。

    而诸如什么多层名字空间,finally块这些简单易行的改进却因为争争吵吵始终无法确定下来,实在是C++的悲哀。
    #初学者 发表于2004-11-22 14:35:00  IP: 218.104.154.*
    我是一个初学者,学了C++语法后不知学什么??很迷茫,想深入学,但怎样才能深入的学啊,做项目吗?一个人怎么做,想进入真正用C++的公司跟着搞的很难,而且没有经验就更难了。各位大师能指点一下吗,前面的路要怎么走???

    k.zhou@tom.com
    #ComplexAdptiveSys 发表于2004-11-22 23:04:00  IP: 61.131.53.*
    我感觉OB还是用的最多的形式,真正需要用OO的时候要少很多,(可能我的OO境界太浅),尤其不喜欢一切class都从一个object继承。另外我怎么就觉得C++的GP也不算丑陋呢?以GP为基本设计范式也谈不上,我用GP就图个方便。(可能因为我的GP境界也很低)
    #beautyispower 发表于2004-11-23 14:36:00  IP: 218.80.198.*
    。。。。。。。。。
    #一笑 发表于2004-11-23 12:22:00  IP: 210.22.158.*
    举个简单的例子:你在北京,你去上海坐火车不坐飞机,无非是费点时间而已,无大不可;你要是去澳洲还坚持坐火车,那就有点太...太那个了,往海里开呀?当然解决的办法也是有的,这辈子不去澳洲就可以了。
    #飞跃星河 发表于2004-11-23 15:37:00  IP: 221.226.176.*
    c++的简洁高效一直让我很欣赏。我觉得集成开发环境还是蛮重要的,把c++的开发环境做好一点,再配一个高级库,实现界面、通信、数据库等,就可以了嘛。当然我不是指MFC库,MFC还是比较底层的。
    #一笑 发表于2004-11-23 11:28:00  IP: 210.22.158.*
    to 周星星:
    “1. C++有一部分的复杂是为了与C兼容,目前看起来她确实做错了。 ”——不敢苟同, Bjarne说他要创造一个支持OO而又效率远高于Simula67的语言的时候,之所以没有新创一个高效的语言,而是选择C来附体其上,完全是因为考虑到了实用性。就是不选择C而选择其它语言,比方说pascal,也会考虑其兼容性的。美国和中国的情形不一样,在中国,任一门户网站、任一BBS,试问:2年前的网页你还能找的到么?你肯定找不到了,估计一个月前的网页你都找不到了。但是美国不一样,偶在浏览一些美国作家的非常old的书时,发现其中的url(10~20年前)还能浏览,比方说《the c programming language》。但是国内的,比如裘宗燕译的《the c++ programming language speciel edition》中留下的北大校园网技术支持的url,点进去,一堆空页面,啥也没有。
    所以,美国很重视老代码的复用性、维护性,中国的代码大多都是一波买卖,用完拉倒,再用再编。这很正常。这种文化差异,也说明了中国的落后。(提起这个就思路不断,比方说javascript脚本、flash技术,估计国内的程序员比起老美差多了,但是做广告它们却很在行...)


    to fengj : 同意你的观点
    为了保持纯洁性,C++在Windows上或Linux上的类库并没有建相应的类库,那不是C++的缺点,它并不是不能做!

    to myan: 佩服你的文采,虽然很多观点不敢苟同,但是依然希望能够多看你写的文章。
    #aa 发表于2004-11-23 11:38:00  IP: 218.88.35.*
    我认为C#上下通吃是条好路,我们不可能用C++建系统程序,用C#建应用程序啊,用扩展类库的方法来实现系统应用有什么不好??如果你能活120岁的话,你可以精通多种语言,作不同的事,
    一种是你活70岁用一种语言作不同的事
    #Avlee 发表于2004-11-24 10:18:00  IP: 220.163.32.*
    大家仔细说说C++的那个地方复杂,你有没有觉得C语言复杂呢,真的复杂吗?

    指针是吧,大多数情况下C++中已经不推荐使用指针了。

    现在的很多语言添加很多新的功能封装,起个好听的名字就简单了。

    确实有很多新手说C++过于复杂,那是MFC的罪过,所以很多人虽然觉得MFC好用,但是很痛恨它的原因。

    各位看看新流行的语言的语法,范式不都和C++有对应关系吗。

    说说你们感觉复杂的地方吧,况且你不懂的没有必要用啊。
    #pr 发表于2004-11-24 01:26:00  IP: 219.133.118.*
    to hotman_x:
    os kernel 这块代码不会太大的.
    按lessons learned from the os400 oo project说,
    当时Os400只有200多万行的c++,
    跟linux kernel差不多.
    #Simple is World 发表于2004-11-24 11:14:00  IP: 219.233.152.*
    目前C#出现一些迹象,引入一些动态语言特性如cmdlet,又强化系统编程能力,想上下通吃。这是一条不归路,必会使C#变得更加复杂怪异。

    上下通吃不是做不到,只是被CLR束缚住了。C++不断试图扩展它的类库,就是为了降低对其使用的复杂度,从而达到上下通吃的目的。在用高级语言的开发过程中我和孟哥你一样也是混合式的风格,完全单一的OO并不能很好的解决问题,相当程度上成了鸡肋。
    #jason xu 发表于2004-11-24 14:12:00  IP: 222.44.61.*
    c++的最大不足在于缺乏一些标准库,如网络和GUI,虽然有一些第三方特定环境的库,但这是可改变的
    #yujian 发表于2004-11-24 09:31:00  IP: 218.94.57.*
    小鸟,学习中!
    #OB是什么 发表于2004-11-24 19:38:00  IP: 218.11.191.*
    OB是什么?那位高人给讲一下,谢谢。
    #yuanyang07 发表于2004-11-26 03:02:00  IP: 219.146.103.*
    敬爱的孟岩同志:
    你的大名如雷灌耳,你的译著《C++标准程序库》至今是我的压枕之作。却没想到你对C++竟如此悲观。照我看来,是看三国掉眼泪,替古人担忧。
    从软件发展看,C++的复杂性似乎阻碍了它技术的及时更新,但它既然号称软件开发的万能工具,自有它的过人之处。举例来说,百科全书一般人很少用到,卷帙浩繁,但它就一定不如普通常用的辞典吗?
    国外的观念与我们不同,他们很注重对已有东西的改造和复用。你的观点字里行间充满对完善的新系统的渴望,对c++、Java继承旧有传统的惋惜之情,那么,假设你站在c++开发者的角度,你能全部抛弃c的东西另开发一套系统吗?成本多高、风险多大,我相信不用多说。
    我记得好像c++语言从90年代就已经有人提出正走入死胡同,因为那时人们不知道除了用来开发操作系统,还可以干什么。后来拯救c++的是什么?是《Doom》。有趣吧?我说这个的意思就是我们没必要为过去后悔,也没有必要为未来担忧,还是好好利用现有的工具,不管是c++还是别的,做些实实在在的工作吧!

    祝:身体健康!多出新书!生活性福!常命百岁!


    另:答复楼上的问题:OB(Object based)是基于对象的意思;OO(Object Oriented)是面向对象的意思,它们之间有什么不同,随便翻翻c++的经典书籍就明白了。
    #JAVA烦四 发表于2004-11-26 18:27:00  IP: 219.237.6.*
    C++就是一堆臭*狗*屎,是那个叫做私渡思潮颇的傻*逼拉出来的,大家不的不吃了20多年,还要说它有营养,真是不可忍受了
    现在好了,JAVA,C#,吹响了C++的丧钟,但是真正给于C++致命一击的绝对不是这两个,而是10年出现的下一代语言,当人们不再关心性能,硬件的性能已经令地球上的每个人都不知道用来做什么更复杂的计算的时候,哪怕是核武器的计算,和气象预报的计算,人们还会用C++嘛?
    #billwei 发表于2004-11-27 10:16:00  IP: 218.92.22.*
    楼上的,不管硬件怎么发展都无法满足人们对各种高速计算的要求的。 以后哪怕个人电脑也能做气象预报,还是需要性能高效的编程语言的。

    你太幼稚了。
    #深居 发表于2004-11-27 10:59:00  IP: 219.144.155.*
    楼上的那位javaFS似乎吃不到葡萄阿
    #Lig 发表于2004-11-27 23:44:00  IP: 221.219.185.*
    坚持是一种美德,革新也是一种美德。我不喜欢Java,是因为我不想学习它,我不喜欢.net,原因也是我不想再学习它,因为我了解C++,所以我需要坚持C++是最好的,这可以体现我也是最好的,可能很多C++ Fans和我原始想法是一致的。
    但是,C++是不是最好的呢?不知道,但它至少是最复杂的,能够掌握C++至少证明你在理解力上没有问题,这是我们可以藐视其它程序员的一个基本点吧。
    myan为什么要开始反对C++了,原因是在C++这个领域内,他已经够高了,他需要超越,物极必反,因此他需要通过反对C++达到超越的目的,这是传说中“辩证法”的螺旋发展规律,我等高度不够的人还够不上转圈,大家要明白myan不是要改投敌营。
    我相信myan不会“反璞归真”推崇JavaScript或者DBASE III的简单,他还会是一个C++的fans,甚至可以预料他不会真的去钻研Java,因为这个玩意实在没什么好玩的,根据我的想象,Java是一个商业化的挣钱工具,而且早已丧失了未来垄断软件业未来的机会,现在已经是它的顶峰期,就像当年的PASCAL一样。
    #Avlee 发表于2004-11-28 10:53:00  IP: 220.163.34.*
    DotNet vs C++ ?????????
    #方圆 发表于2004-11-29 18:39:00  IP: 218.84.32.*
    我没有用过别的语言,但我就觉得C++是个好东西,C++维护一个小小的标准库,其它的空间留给用户去实现,这不是更好吗?
    #哈哈 发表于2004-11-28 22:01:00  IP: 218.24.240.*
    那些坚持什么是最好的语言的人都有病,c++刚出来的时候要是不兼容c的话也会被人骂得狗血喷头.

    所java刚从c++派生出来时,进行了适当的扬弃,就被人大骂一吨,但是却有了大显身手的地方,所以说应用决定了各种语言的地位.
    所以c++的地位就是标准库的地位!!但是可能还是有商业上的东西
    影响了c++的发展,导致c++发展的有利标准难以正常产生
    #lcb 发表于2004-11-29 00:41:00  IP: 218.18.198.*
    孟老师是认真的人。


    -------------------引用-------------------
    ...
    用任何语言你都可以写出糟糕的代码
    ...
    -------------------引用-------------------
    #cpunion 发表于2004-11-30 02:27:00  IP: 218.17.97.*
    我倒认为C++应用最大的毛病在于太学院派了,全世界这么多C++开发者,做出一个大而全的库不是什么难事,但都不敢去干这件事,生怕被人认为实现上不够优雅或是效率上优化不够,水平不够高,所以连Boost、ACE之类倍受推崇的C++类库/框架也没有成为标准库,最多在给Boost一个尊敬点的称呼“准标准库”。C++开发人员的通病是太挑剔,很难搞出一个大家都满意的东西,却又希望在做出一个库来满足所有人的需要,结果几十年也没在应用上推出个库来。依我看还不如做几套,让各种类型的挑剔者都能找到自己满意的。不过我并不指望C++应用在中国能发展成啥样,中国软件处于浮澡的幼稚时代,所有人都在找“最好的语言”去学习,时间都浪费在争论哪个语言更好、哪个平台更好上。大家仔细看看吧,开源的项目也不少,很多是跨平台跨语言的,有那么多时间争这个,早就学了好几门语言了。那些使用“最好的语言”来开发的,永远都停在“最好上”,他已经不可能更好了。
    #cyclone 发表于2004-11-30 10:28:00  IP: 211.148.209.*
    c++不复杂,越用越觉得它的设计太能提高大型软件的设计效率了,太完美了,兼容c也没有错,c本身也是高效简洁的,而且可以让设计者实际操控每一字节,高效更是c++的招牌,泛型可说是葵花宝典,最重要的:c和c++都不难学,甚至可以说是很容易的,c不比basic难学多少,表现力却不知道要高多少,c++跟实际世界的事物是非常类似的,跟人通常的思维习惯非常接近,java和c#可以挑战c++,不是在说梦话吧?
    开发效率低,而是容易犯错,维护难度大,说梦话吧?c++的每一个设计都是为了提高开发效率,使得不容易犯错,降低维护难度,越用越有体会,大家买候先生的标准库吧,不要买楼主的,因为楼主对标准库有深入的了解的话,很难想象会说出上述的话。
    c++是当代最伟大的语言,适用性最广泛的语言,可以超越它的,至少现在还没出来,写OS还是
    WSD
    #durkingwangzi 发表于2004-11-30 10:32:00  IP: 219.239.202.*
    有人在吗?有那位高手现在可以帮我解决一个c++问题啊?谢谢
    #durkingwangzi 发表于2004-11-30 10:33:00  IP: 219.239.202.*
    有人在吗?有那位高手现在可以帮我解决一个c++问题啊?谢谢
    #durkingwangzi 发表于2004-11-30 11:20:00  IP: 219.239.202.*
    这是一个小小的 程序,却有不可思意的错误!
    请高手指点,谢谢!
    #include <iostream.h>
    #include <string.h>
    int search(int b[10]);
    int search(char p1[10]);
    void main()
    {
    int c,i,a[10];
    char b[4];
    cout<<"请输入数字"<<endl;
    for(i=0;i<10;i++)
    cin>>a[i];
    cout<<"输入字符串"<<endl;
    for(i=0;i<10;i++)
    cin>>b[i];
    c=search(a);
    cout<<c;
    c=search(b);
    cout<<c;
    }
    int search(int b[10])
    {
    int i,a,flag=0;
    cout<<"输入查找的数字"<<endl;
    cin>>a;
    for(i=0;i<10;i++)
    { if(b[i]==a)
    {cout<<"找到"<<endl;
    return(i);
    }
    else {cout<<"没有"<<endl;
    flag=-1;
    return(flag);
    }
    }
    int search(char p1[10])
    {
    int i,flag=0;
    char q;
    cout<<"输入要查找的字符串"<<endl;
    cin>>q;
    for(i=0;i<10;i++)
    if(strcmp(p1[i],q)==0)
    { cout<<"找到"<endl;
    return(i);
    }
    else
    {
    cout<<"没有发现"<<endl;
    flag=-1;
    }
    #老实头坚持诚信是金 发表于2004-12-02 09:54:00  IP: 211.162.183.*
    我的目标是应用软件,语言等只是一个工具,关键是要解决问题。
    所以我以为:
    1、语言的使用要规范。
    语言的特性很多,常用的语言特性就那些,可以对语言裁减一下,只允许使用规范内的语言特性。范围小了,精通的可能性就大了,也就能用好了。
    2、随时整理基础库,确定基础库的稳定、质量,并争取最广泛使用。关键是一个推广、学习基础库的问题。
    3、随时整理架构,尽可能是保证简单,拒绝复杂。
    #smilemac 发表于2004-12-02 11:42:00  IP: 220.246.15.*
    老大所说的三大约束的后两大正是我喜欢C++的原因。另外java和c#使用单根系统带来的问题其实也多多。
    #yaos 发表于2004-12-02 11:54:00  IP: 221.195.35.*

    错了么?没有错,错的是人!

    一种编程语言我感觉它存在的意义,有两种:1、理论 2、应用。
    从深层次来说,C++无疑是这两种都得到深刻发展的语言,没有一定的水平是不可能的,也许它太复杂了,也许它太老了,但是时间将会做出选择。
    #tank 发表于2004-12-02 13:40:00  IP: 211.91.244.*
    我还是比较习惯C++
    #lkw 发表于2004-12-03 10:01:00  IP: 61.183.181.*
    0.借孟岩先生的宝地,也是随意说说想法而已

    1.首先有一个问题:如果当初C++有一个今天JAVA或.NET这样的类库且不断发展呢?我个人的答案是:很多传奇将不会发生。也即我是支持孟岩先生文中所说的"有人说C++之关键缺陷是没有统一完整的类库支撑,Bjarne Stroustrup即强调此因素"。

    2.在关于C++为什么不能建立一个大一统的标准库的问题上,我认为以下的原因很重要:C++的心与C一样是追求自由的,不愿意受到规约。比如在GNU/Linux下的世界里,纵然前面已经有了很出色的同样功能的程序,但你(C++使用者)依然忍不住自已有写一个或已写了一个的冲动,你边写边想着:C/C++,自由世界,黑客文化,DOOM,其理相同^_^。我想这时各位要发笑了,但"性格决定人生"这句话的意义大概即此。稍大一点的使用C++公司,都可以搜索到其编写的类库,就算是小如在下所在的公司,如果其程序员象在下一样认为C++是一个影响其甚深的语言,大概也是会作此想的^_^。所以有公司想捌开C++标准委员会对C++作出决定时,其引起的反响是可想而知的(其实就算是C++标准委员会的决定,也是如此^_^),在C++社区中,大概是"哪个家伙在动我们的奶酪?"的心理吧。

    3.关于复杂性--与C的完全兼容:C作为最接近现在的计算机系统的高级语言,不单要作为一门语言,还力图代表一个系统,而C++为其加入那么多的元素,这也许才是C/C++复杂性的一点意思,而不是说因为它要100%不背叛C受其束缚所以才复杂(我个人觉得现在的C++社区在这一点上不象以前那样偏激了)。就如知道一个系统的原理和仅在这个系统上工作不在一个层面上的意思。

    4.关于复杂性--静态类型检查、最高性能:静态类型检查多少是作为最高性能的手段。不论C++的使用者愿不愿意承认,在追求性能的目标上,其与C是一致的,但直到现在又达不到C的程度,由此产生了一种焦虑的心理(对应孟岩先生文中"如今看来,在系统面彻底取代C已无可能")。其实,承认这一点又有什么呢!象JAVA的性能那样,达到可用的程度时,在性能上的诘难就会降低而转向其它方面。说其因追求性能而在OO层面复杂,我想是因为追求性能,所以(优秀的C/C++程序员)总是在那段代码是否还可以优化?是否改另外一种写法会更快?也就是说这时有多种选择,比后来晚出现的OO语言的选择多得多!asm也可支持OO(google一下"asm+OO"),现在只有一种实作法,所以asm的使用者不会觉得"复杂"。如果你坚持在C++中使用你熟悉的作法,你这时也应该不会说"复杂"。所以我觉得"Stroustrup在多种场合表示,对C++的设计没有大的后悔之处
    ",也许另外一个意思是:其它的OO语言并没有革命性的创新令得C++惭愧(动态能力吗?那仅是因为其它语言有这个便利罢了。现在泛型的实现都以C++为基准,其它语言不也在GP得到很多口水吗?),想说我复杂,没门。^_^

    5.其它:编写DOOM,QUAKE系列引擎的John Carmack(我在这里引用他,是因为我希望那是我^_^)曾经说过这样几句(大意):"我很珍惜我与Brian Hook一同工作的时光。我从他身上学到了一些更好的C语言编程标准和如何更加严格地使用struct和const——而我过去
    #一個普通的程序員.... 发表于2004-12-02 18:15:00  IP: 202.96.246.*
    語言只是一個工具. 使用來創造財富的. 不應該為了語言而語言. 各種語言的出現, 有其自身的原因. 無論C++/java/c#...., 他們都有自己的應用範圍. 對於普通人來說, 能夠熟練的掌握一門語言完成自己的工作/學習就已經足夠了.

    某種語言的好和壞, 其實在與使用者的"功底", 不在語言的本身. 我見過一個程序, 他用C語言寫的, 但是該程序的實現方式就好像是用oo的思想編寫出來的一樣. 在這個程序員的手里, 用C語言實現了oo的設計能力. 大家覺得如何??

    努力學習中; 關鍵在思想
    #ioriogami 发表于2004-12-03 14:35:00  IP: 219.142.83.*
    对于泛型,J2EE5.0貌似采取了尖括号语法。所以我也认为C++泛型语法或许不是那么丑陋,抑或暂时找不到什么更优雅的方法。其他观点都比较同意。
    #ioriogami 发表于2004-12-03 14:36:00  IP: 219.142.83.*
    对不起,是J2SE。
    #ioriogami 发表于2004-12-03 14:36:00  IP: 219.142.83.*
    J2SE。
    #epico 发表于2004-12-04 17:35:00  IP: 202.112.102.*
    我的水平一般。但是我也想说一两句,不要见笑。
    C++好,C更好。数学领域和dsp领域好像还没有可以替代C语言的。在大工程中,好像还没有可以撼动C和C++的。建议你看看Mozilla工程的编码规范中对template是如何评价的。对了,os中,unix 是C写的.好像C++有点太高级了。
    #albertlee 发表于2004-12-04 00:35:00  IP: 211.97.50.*
    借宝地随便说两句,说的不好瞎说
    我对那个飞机与汽车的比喻非常赞同:C++就像飞机那么复杂,Java/C#像汽车一样易用。没有理由因为复杂就取消飞机。

    复杂不一定不好用,我觉得 C++与 Python 之类的动态语言的结合会有很多优点。
    #lbhome 发表于2004-12-04 12:37:00  IP: 220.200.125.*
    C++很好。C++/CLI更好。
    要是C++支持property更好。
    C++要走向真正的辉煌。好要再走5年-10年。
    #C++ Fans 发表于2004-12-04 02:10:00  IP: 219.82.35.*
    C++ Fans的嘴巴总是犀利的,就好像C++一样。^_^
    其实当年的Java都快死了,是互联网救了它一条命,显然当初它的出发点是跨平台,而不是现在的面向应用,面向领域,所以Java有它的局限性,但由于Java不存在标准,只要Sun觉得某个应用有比较大的需求,那它就可以加一套与之对应的类库,比如近期的SIP,这也是Java的优势,就木前来看,Java还能比较快乐的活一阵子,从长远来看,它死得一定比C++早。C#也好,Java也好,和C++相比并没有发明什么新玩意,你要学Java,要学C#,应该基于你的需求,而不是那个语言强大,你学会了一个其他的都不难,你想要通过学习其他语言来学习新东西,我看没有什么必要,你不会学到什么的,纯OO?我们的世界可能用纯OO来表达吗?比如怕老婆的男人他的一切都是他老婆的,在C++里面可以用friend来表达,尽管破坏了封装,但是强调了两者之间的关系,至于是否影响大局,那是程序员的事情。C++强调程序员的主动性,Java、C#等强调开发工具的功能性,或许后者是语言的发展方向,但那必将是缓慢的过程,没有标准的支持,肯定也是走不远的,C++能走到这一步是不容易的,可以说,它是现代编程语言的基石,它的命运不是掌握在少数人手里,因为世界上实在是有太多太多的C/C++的产品了,我想没有人可以舍弃这一切。
    至于C++/CLI,这东西到现在才有,我想不是因为弄不出来,而是别人不愿意去弄,不过本人对此倒并不是十分反对,反正已经用了ms的mfc了,也不在乎多用ms另一样东西,虽然微软的用心是险恶的。
    #edgethinking 发表于2004-12-05 20:49:00  IP: 218.18.23.*
    我现在对於某种语言的评论比较反感!!!!

    许许多多的人, 总是在对比某种语言和工具中找点虚荣心, 却不能解决实际开发中最需要解决的问题.
    #Light 发表于2004-12-06 14:09:00  IP: 220.184.65.*
    我想说两点:
    1. Doom,quake是用 c 写的,不是c++,请大家看一下id公开的代码。真的很简洁,很优雅。
    2.linux,windows,unix是用c写的,请大家看linux的源代码,当然
    windows2000的是泄露的代码。
    不要跟我说,c不能写大型的应用或系统,那是设计者没有十全的把握
    或者他们对c++更喜欢而已。
    #Bug 发表于2004-12-11 19:43:00  IP: 61.234.232.*
    对于你“没有统一的类库是因为语言复杂所致”的观点不敢苟同,个人认为:根本的原因在于统一类库涉及到许多方面尤其是一些大公司的利益,他们不会愿意让别人的库成为工业标准,ISO又没有足够的开发资源,只有掌握在一家公司手中的语言才可能统一类库。
    #语言无定法 发表于2004-12-12 13:23:00  IP: 211.92.108.*
    看看这个D语言,会有前途吗?
    http://digitalmars.com/d/
    #jjwang924 发表于2004-12-12 17:01:00  IP: 61.185.30.*
    复杂或者简单,应分而治之。计算机语言是人类思想到及其指令的一种映射,其限于机器指令和人类思想的本质不同,任何语法结构皆不可能成为无暇之玉,其值可能在特定的领域比较适合而已。

    本人对C ++/CLI了解不算深,但第一感觉是:“何为C ++?其设计目的为何?或者说,需求如何?”

    C #是一个很好的开端,我所谓的好并不在与其如何精妙的语法和平台,而在于:1、需求明确,主攻应用;2、可防止Java的垄断。(本人对Java和IBM均无恶意,只是垄断早晚不是好事)

    为何要改C ++?为了保持这个品牌?如果我要跨平台,要GC,要Web Service,那我就去用C#,何必把C ++改的面目全非呢?如果仅仅为了或所谓平滑过渡,那我想问:C #对于C ++使用者学习门槛又有多高呢?

    又如要C #兼顾系统开发,那真是梅兰芳唱摇滚,两个都受侮辱。
    #phosphor 发表于2004-12-14 10:54:00  IP: 221.219.245.*
    C++ / CLI 和 C# 的语法,越来越诡异,以非C那种浏览一遍就能知道其中大意的境界。

    相比之下,java 的语法还算纯净,不过也有变复杂的苗头。

    还是C语法平凡朴实。

    #mike 发表于2004-12-14 11:41:00  IP: 219.133.40.*
    我们的水平比楼主要低得多
    #mike 发表于2004-12-14 11:47:00  IP: 219.133.40.*
    支持楼主.
    我们的水平比楼主要低得多.
    C++的对象模型太复杂了. 现在看来, 是没有必要的畸形发展.
    #searoc 发表于2004-12-15 14:58:00  IP: 218.107.144.*
    立场不同,观点也不同。单纯从编程语言上讲,那一种语言都是不“完美的”,即便当前很完美了,随着时间的推移,我们的需求变化了,也会逐渐的从主观上为其摸上一缕暇疵。
    如果从软件工程的角度上讲,管他语言好与坏,能帮助快速开发出稳定的产品就行了。所以,要不断的学习,比较,在实践中总结那项技术、哪一种语言适合我们当前的工作即可。
    可怕的是,利用批驳语言的机会轻薄他人,抬高自己。
    #小榕&烈火 发表于2004-12-15 21:31:00  IP: 202.118.194.*
    孟岩言论“批判”(1)

    0:既然孟岩先生的“零碎思考”是零碎思考,那么我的分析也只是
    零星分析

    分析1:C++的表面困境来自两方面,一是开发效率低,而是容易犯错,维护难度大。此二者俱是表象,本质就是一个——过度复杂。

    :“开发效率低,而是容易犯错”,不知道孟岩先生的“开发效率”所指为何物,stroustrup先生所发明的C++语言的目标就是在“大规模系统程序设计”上取代c语言,很多项目和经验都表明,采用c++语言都得到易维护的,易理解的程序代码,这样的结果称作“开发效率低”?,我想这样的论断大家都不会苟同的,“容易犯错”,我想孟岩先生的意思应该是“程序c++做编程的程序员容易犯错吧”,在一定情景下是成立的,c++的复杂性本质上反映的是这个世界本质的复杂,正如微积分反映的是世界量变的复杂性,而自然数则没有如此的复杂度,初学者之所以觉得c++复杂那是因为“教学”(stroustrup是如此认为的)的原因。教授c++程序设计时,应该从标准库和高级概念开始,而不是一上来就和指针,结构,位做斗争。

    2:——过度复杂。或有人说C++之关键缺陷是没有统一完整的类库支撑,Bjarne Stroustrup即强调此因素。

    :Bjarne Stroustrup先生“好像”从未在他的任何书籍,论文,语
    言中有过此观点。如果是Stroustrup对孟岩先生独自一人所说的话,那我妄下猜测:这也不过是Stroustrup先生的一个美好的愿望而已,Stroustrup先生曾经说过“由于政治原因原因不太可能能推出这样的GUI库和大而全的库”,而不是因为孟岩所说的“正是因为语言太复杂,才无法在有效期内开发出高质量的大一统的类库。


    3:“C++复杂的根源在于三大约束:与C的完全兼容、静态类型检查、最高性能。在三大约束下,C++未能完善对于面向对象思想的支持,未能建立强大的动态能力,从而使得C++在OO这个单项上存在本质缺陷”

    :如果因为c++强调“静态类型检查、最高性能”而不采用像java和c#这样的强动态oo特性,也算是“缺陷”的话,那么c++喜欢这样的“缺陷”,因为很多底层系统软件,如操作系统,数据库系统,编译器,工业的电话交换系统等,就是由于这样的“缺陷”特性支持才能符合用户的要求。

    4:“侯捷先生早在2001年初即对我说,C++在OO上不及Java,当时体会不深,认为没有大一统的单根类库会使设计更加灵活,后来又认为凭借GP可以抵消OO的不足甚至超越之,现在看来即使不是不可能,这条道路也必然是艰辛异常,成败难以预料。

    :“C++在OO上不及Java”,请问孟岩先生什么是“OO”,OO的概念是从早期的smalltalk而来的,强调单根继承,动态识别。“不及”是什么概念?是“OO特性”没有类似java的smalltalk特性的多呢,还是java的OO概念比c++更接近smalltalk?c++的目标是在保证静态检测,高性能的基础上提供一个更好的组织程序的方式。OO是组织程序的一种方式,但并不是“银弹”和“万金油”。stroustrup早在70年代末就明白OO并不是灵丹妙药,比如在数值计算,没有什么必要需要单根继承。所以c++提供了比如模块,数据抽象,范型这样的程序组织方式(换一句流行的话是:程序风格)。“凭借GP可以抵消OO的不足甚至超越之,现在看来即使不是不可能,这条道路也必然是艰辛异常”
    #小榕&烈火  发表于2004-12-16 11:09:00  IP: 202.118.194.*
    7:“++中的多种范式并行,是一些最复杂问题的表面原因。以至于Doug Lea建议在一个项目里只坚持一个范式。但是这仍然只是表象。归根结底还是因为OO的缺陷,使得与其它范式合作时困难成倍放大。

    :c++的oo有“缺陷”,不知道孟岩先生所谓的“缺陷”是否指的是“像smalltalk这样的动态OO呢”?,“当你拿着锤头,全世界都变成了钉子”,如果一个人被一种“思想”禁锢了之后,确实是难很转换思维。以至使c++的OO和OP,OB,GP,OM,OI等思想难以合作。不过随着java应用范围的扩大,“java已经不仅仅是一个工具,逐渐变成了工具箱”,换句话说java也越来越复杂了。那么java是否还是坚守“简单性”,而放弃其“演化”以至变得复杂呢?“只坚持一个范式”,在大多数场合下这是正确的,但并不是所有的场合,其实任何程序都不应该有什么固定的“范式”,这取决于设计师的经验,如果你觉得c++这个特性用在那里比较适合,那你就使用。比如,您写一个“表达式分析器”的小程序,就没有必要用什么“单根继承”,直接使用OP就比较简单明了。如果你写一个容器组件,或许OB思想比较适合,如果你在游戏小组部门工作,没有理由不使用OO特性,OO最直观的用途就在GUI图形程序上。而你想要写出像STL这样的通用,可参数话的程序,不用GP,而用宏或者单根继承是很难办到,即使可以,也会是得到极其难以维护,或者是效率低下的代码。如果你想提供给用户一个Framework,以让用户一致性的使用,没有比OO构造的类继承更好使用的了。

    8:“C++完全可以在90年左右摆脱C的约束,随后简化模板语法,完善异常模型,接纳可选GC,建立完整的单根类库,付出性能小幅度下降的代价之后,实现语言整体升级。”

    :“摆脱C的约束”是指“全面不兼容c代码”呢,还是“部分不兼容”代码?或者是另一种“抽象语意”上的不同?,全面不兼容c代码完全不可行,stroustrup在c++的设计和演化中就说明了即使不兼容c语言也会选择兼容另一种语言。“部分不兼容”,其实c++的目标重来不是百分本兼容c代码,而是“尽可能的接近但不要过分接近”。至于孟岩先生的建议,stroustrup从来就没有考虑过。

    8:“总之,C++的三大约束,既是其兴起之要素,也是其衰落之源头,同时,又是其今天得以屹立不倒的重要基石。其是非功过,实难一言以蔽之。”

    :“衰落之源头”?,所谓的“衰败”大概是指“声音”的大小和“吸引眼球”的多少吧。c++标准委员从来就不是一个自吹自擂的组织,而是一个确实在干实事的,解决实际问题的中立组织。其实任何语言都不可能会永远“万里长青”,“千秋万载,一统江湖”,平台尚且不能,更何况语言。当一个语言的“设计哲学”不适应了新时代发展的话,自然会退居“幕后”干实事。就像c语言在80,90年代被c++取代成为主流一样。不过,我的个人观点是,就要win2000/winxp还不退出江湖,c++还永远都是主流语言,吸引大家的眼球。就算longhorn推出也会用非常长的一段过渡时期。这是native c++而言,还不包括c++的演进变体c++/CLI。
    #小榕&烈火 发表于2004-12-15 22:09:00  IP: 202.118.194.*

    5:“又因为上述所有因素的综合作用,C++基础类库的建设只能进行

    到很低的高度上就停下来,因为再往上走就面临重重困境和无穷无尽

    的争论。”

    :不知道孟岩先生的“往上走”是什么样的一个概念,我妄下揣测:

    指更高一层的库,比如c++ GUI库,c++组件库等,总所周知,windows

    的GDI和UI是用c++写的,当然了,所有的库肯定不是VC里的MFC,那

    也肯定会是microsoft特用的图形库写的。姑且称为MDI(microsoft

    Draw interfice)和MCL(microsfot class library),,金山公司所有

    的桌面产品使用“金山的肯德基KFC”(kinsoft functunal class)和

    KDI(kingsoft Draw interface)做的,我想那些库应该符合孟岩先生

    所指的高层次一点的库了。也没有面临“困难重重”这样的困境。

    6:“不完善的异常机制则是在木已成舟的情况下迫不得已的设计。



    :“异常机制”一定程度上引进了复杂度,特别在与众多库交互的时

    候,很难做到零开销。当然那是与c语言相比。“不完善的异常机制

    ”很多程度是混淆视听。

    ----- to be continude
    晚了,明天继续谈论吧,先休息了,
    #孟岩言论“批判”(4)  发表于2004-12-16 11:45:00  IP: 202.118.194.*
    :纵观孟岩先生个人随笔和言论,孟岩先生似乎理想的c++语言是

    1:在系统层“击败”c语言
    2:在高层次“击败”java语言

    击败的概念:使用方便,表达力强,开发效率高,整体执行效率高
    除了OP,OB,OO,GP外,还要OM(面对金钱)
    从而达到“唯我独尊”的地步。
    呵呵,是可以,但提前是:你需要把c++的“整体复杂性”弄明白。
    c++的复杂度映射自然界的复杂度,从而反映在程序设计中,所以要掌握c++的前提是:

    你要对要构建的系统概念有一个很好的认识,有一套很好
    的抽象,并且合适你要解决的实际问题。c++提供足够的概念让你去描述你的系统。你的系统使用了c++语言,就不表示你做出的系统就一定好。
    而是,在于,你是否成功了分析和设计了你的系统,并用c++中的概念无误的,简洁,高效,优雅的描述出来了。

    这样的话,你会感觉到使用c++语言十分的方便和不捆绑你的手脚。并且也会使你的程序效率更好,运行更快,从而达到OM
    嗯,本人随笔中的有些观点可能有些火花,有什么不敬的地方,本人(小榕&烈火)在这儿表示歉意!


    #autoasm@yahoo.com 发表于2004-12-16 09:30:00  IP: 218.108.251.*
    基本赞同,但是“。正是因为语言太复杂,才无法在有效期内开发出高质量的大一统的类库。”不敢苟同,无论多复杂的语言,开发大一统的类库都不是什么难事,关键是c++属于“共产”语言,而无论c#还是java都是“私有”语言,开发这些语言的公司会力推他们自己的类库。

    另外,c++仅仅是改良而不是革命,渐进的改良肯定不会完美
    #封月翔天 发表于2004-12-16 18:18:00  IP: 202.196.68.*
    谈起C++,其实很多人都不愿意谈及它复杂语意下的优雅的解决方案。(虽然我个人并不认为它的语法有多复杂,但是照顾大部分非专职C++使用者,所以还是勉强承认吧)

    最常用的就是2种了,一个是宏,如果不是为了与C兼容,估计这个东西很可能和在JAVA,C#一样,直接被淘汰出局吧。虽然它不属于C++语言体系,但是C++能够兼容它的存在,这就是他的优点了。可以用宏写出容易维护同时高效的代码来,这个是其他语言所不好处理的(运用不好,也可以给自己凭空找麻烦;同时,用一些特定宏的技巧,也可以显示自己的水平不同一般不是吗?呵呵,说笑了)

    第二,就是运算符重载,不仅仅是实现了语法上的简单和谐,同时也是一种对自然语言符号系统意义的继承,当看到那个幽雅的+来表示一种很自然的加,融合语意时,那种爽快的感觉应该是很棒的吧,但是遗憾的是,JAVA等很多语言都不提供。原因很多,但是我认为最主要是一点,最顶层对象的地位无法确定的问题。object,莫名其妙的一个鸡肋,不知道有多少人改写了那个东西所残留下来的那些equle等系统方法的,总只我是没有那个习惯,因为写这么一个东西简直是对我的一种侮辱,还是C++中写一个operator = 来得痛快而自然。

    PS:高级语言不能访问内存,不能在内存级别上支持透明类型的存在,C++虽然也不支持透明类型,但是因为可以操作内存地址,所以相对来说方便多了,我们可以在字符串数组上面构造一个JPEG图形,也可以在int上构造一个‘LOVE’字串,这个就是完全掌控的美。也是对C延续而带来的。


    至于三大原则中对效率的膜拜,很自然的,不同的领域有不同的解决方案,网络化解决方案用java,计算用forten,研究OO语意学末过于smalltalk,至于速度,谁能比得上asm,所以C++也只是一个折中不是吗,不应该认为是设计者们的固执体现。

    至于静态,一般的语言都是静态的,因为直接支持动态的话,效率不高,这方面,还是要说smalltalk(实在是经典啊,虽然没有实际用途)。

    最后,使用物理学中的人择原理来结束:这个宇宙之所以是如此,是因为我们人所生存的地方就是如此。
    同样,之所以我们讨论的C++是如此(好或坏),是因为我们使用这个语言,然后碰巧它就叫做C++。
    #封月翔天 发表于2004-12-16 18:26:00  IP: 202.196.68.*
    还有,OO的解释是:Object Oreinted

    所以没有什么OP, OM 啦,就算有,也是PO, MO啊……还有UO呢,上个世纪的产物了,谁记得呢 ?
    #Royal 发表于2004-12-16 19:14:00  IP: 222.94.129.*
    或有人说C++之关键缺陷是没有统一完整的类库支撑,Bjarne Stroustrup即强调此因素。然而这其实只不过是一个结果,而不是原因。正是因为语言太复杂,才无法在有效期内开发出高质量的大一统的类库。

    ---------------------------------------------------------------------

    几次看到这句话都想笑,但又笑不出来,不知孟岩老弟究竟是怎么想的。

    Java和C#在只有一个OO的时候,都“在有效期内”开发出了一个“'高质量'的大一统的类库”,孟岩的意思是不是说C++程序员面对C++提供的那么多的工具,不知到底该怎么使,到底选用哪一个或哪几个,就这样蹉跎了一二十年?

    我认为Java和C#之所以能大获成功,最本质的原因在于它们是领域相关的,甚至是公司相关的,而C++则一直企图中立。

    就像人一样,不愿树敌,也就不会有朋友。君子之交,终究淡如水。
    #Royal 发表于2004-12-17 10:42:00  IP: 222.94.129.*
    不管是Java,还是C#,抑或是Visual Basic,单从语言的层面来看它们的成功都是不合适的,它们的成功与相应公司整体技术战略、技术平台的成功密不可分。

    作为SUN的Java战略一部分,一个Java语言之类的东西不可或缺,同样,微软.NET战略也需要C#之类的东西,而在Windows DNA时代,微软必须为广大程序员提供Visual Basic这样的东西来编写智能客户端。
    #海 发表于2004-12-16 20:10:00  IP: 218.19.153.*
    "或有人说C++之关键缺陷是没有统一完整的类库支撑"

    没有统一完整的类库,当然是C++一个严重的问题.使用标准的C++可以开发一个操作系统. 但仅有标准的C++甚至无法写一个简单的WINDOWS窗口程序..为什么?就因为C++没有GUI库..不要告诉我,你用MFC,也不要告诉我你用CreateWindow. 如果你说你每你开发应用前,都先用C++先开发一个OS...那我无语..
    #Royal 发表于2004-12-17 11:07:00  IP: 222.94.129.*
    所以我个人认为,拿C++和Java、C#进行语言特性比较不是没有意义 — 对程序员而言,技术层面的探讨总是有处的,只是希望从语言本身的比较进而得出谁谁为何成功的结论,不大合适。
    #cz 发表于2004-12-17 11:37:00  IP: 218.24.82.*
    C++是用来做Java的!
    #Royal 发表于2004-12-17 09:54:00  IP: 222.94.129.*
    即使Java不叫Java,创建者不是James Gosling,C#不叫C#,创建者不是Anders Hejlsberg,SUN和微软还会有别人搞出类似的语言并取得成功,这种成功,归根结底是公司的成功,也就是商业上的成功。毕竟,Visual Basic不也极其成功吗?它的程序员数量曾经在很长一段时间为世界第一。
    #zz 发表于2004-12-17 13:40:00  IP: 218.88.35.*
    MS说NET平台的语言是平等的,C++作系统的,那么C#也应能作系统的程序;企业用的是功能和效率不是语言的语法,对于程序员要知道点低层的东西才能作好开发者,网上从来没有争对过JAVA的争论吧,因为只有JAVA一种语言.......大家看看MS,是它让我们产生了这样争论,这样才会产生广告效用,如果有人对这个感兴趣就要去了解MS;为什么MS不集中所有技术力量打造一下让一种语言解决开发中的问题呢,我想JAVA就是MS的范例,不过MS没有学到这点,如果JAVA把这方向作好,MS会消忘了,在这方面只有JAVA是MS的拙墓人
    #海 发表于2004-12-18 17:45:00  IP: 218.19.11.*
    AM cz

    "C++是用来做Java的!"

    钢铁,塑料,橡胶是用来制汽车的..
    OK.以后不要什么汽车..有钢铁,塑料就足够了,反正汽车都是这些东东做的.以后,驾汽车就改作驾钢铁..
    #mike 发表于2004-12-19 22:23:00  IP: 219.133.40.*
    批评孟岩的人,还停留在C++爱好者的层次上。

    我觉得,孟岩观点和C++的大师们的意见是一致的。
    至少,从《C++编程思想》,《C++深思录》作者等人的文字中,可以看出他们对简单性的追求。他们对C++显然已经不再满意了。

    尤其是 python, java 之类的语言的成功,证明了,简单的语言模型,一样可以表现丰富的世界。
    #mike 发表于2004-12-19 23:16:00  IP: 219.133.40.*
    至于孟岩提出的 C++的本来应该的发展方向。我也胡乱说2句。
    我觉得C++在C中引入 class 的时候,就不该和 struct 保持一致,而应该采用别的 模型。
    #Royal 发表于2004-12-20 11:21:00  IP: 210.29.143.*
    >> 其中Java取得了巨大的商业或市场上的成功而C++却没有,这是不争的事实,无人能够否定。

    说C++在业界不成功是不符合事实的。直到今天,几乎所有重要的规模较大的独立软件仍然采用C++编写而成。微软的两个最赚钱的东东Windows和Office都主要是用C++编写的。

    批评C++就像批评Java和C#一样没有意义,因为解决问题的领域不同 — 如果某一天我们访问的URL都变成了.aspx,我想我们不应该得出微软已经统治了全世界的结论。至于有些人想通过批评C++来表现自己的水平更是浅薄无聊。

    说一些和C++无关的闲话。极左的人往往最终更容易右倾。因为这些人在极左时也并没有把自己的信仰搞明白,结果弄到最后变成了一个失去信仰的人。

    想来真是讽刺,C++在中国最虚热的那一年我唱了不少反调,在C++遭受不断的“冷静”的批评的时候跳出来唱反调的竟然还有我:)
    #浅草 发表于2004-12-20 02:28:00  IP: 220.197.225.*

    原来这里有那么多高手,个个出招精奇,煞是让我眼花缭乱了一番;看来侯杰的那句话是对的,就是“大陆不缺乏天才,而是缺乏培养天才的泥土”。
    本人不是高手,也不是编程高手,不过算是写过程序吧,对OO或OOP之类的东西也稍微有点认识,胡乱说几句好了。
    孟岩的随笔和周星星的回复中有两个地方让我反感,1是“扼死Java于摇篮之中”,2是“‘一切皆是对象’是根本错误的”。
    ——你C++凭什么要把Java扼死啊?
    (其实那有什么C++和Java,在我看就只是一些或少数几个计算机科学家作为具体的人的存在罢了,他们对IT业做出了Core级别的创造和贡献,而且细细思量他们的贡献其实也仍然不过是几个Core思想演化成概念和方法并付诸到计算机上罢了,当然了,我没有贬低它们的意思)
    在我看C++,或Java都了不起,因为他俩在他俩的作用范围内都各自起到了各自的了不起的作用,其中Java取得了巨大的商业或市场上的成功而C++却没有,这是不争的事实,无人能够否定。
    Java成功的原因我觉得是很明显的,即它符合趋势,而趋势是“逐渐与底层无关化”(或曰跨平台)——这个趋势显然只会持续延续下去——另外这符合人性啊,将movb $0x10,%a1和speed=50交到一个普通人手中,毫无疑问他将对speed心怀好感而对movb充满畏惧......,其实连speed=50很多人都觉得烦,他们只愿见到图像或他们熟悉的文字,对超链接的小手爱得要死。毕竟编程语言是面向人的而不是面向机器。
    2“‘一切皆是对象’这个观点是根本错误的”?
    不是吧,我觉得还是有其道理的。算了,不谈这个,扯得太远了,不知道柏拉图、黑格尔把这个东西想清楚了没有。我想说OO这东西是一个:方法(而不是观点。当然是由观点萌生得这个方法也难说,但我刚刚说过了不讨论“观点”之类的东西了)。这个方法挺好的,贴近于人的日常思维方式,而方法是没有对错之分的,我们使用方法,并导致坏的、好的、不坏不好的结果,就是这样。
    #Royal 发表于2004-12-21 16:25:00  IP: 221.6.19.*
    读来很过瘾:)

    > 多少年后,你会发现,建立整个科学分析理论的那些基本公理(例如两点决定一条直线等),最终会通过复杂的理论分析反证回来,形成一个环。

    思维碰撞的火花:) 不过可能要等到海枯石烂才会形成这个环:)
    #Royal 发表于2004-12-21 16:28:00  IP: 221.6.19.*
    SORRY,孟岩帮我删了上面一条吧:)
    #肖海彤 发表于2004-12-28 19:34:00  IP: 219.136.190.*
    C++ 通用类库, 在企业软件方面完全可以提供到的, 例如
    QT + ACE 就足以支持 Windows 95/98, NT, 2K/XP, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等系统的界面, 多线程, 网络, 数据的界面控件(连接控件还不行), 并且还有 RAD 工具(KDevelop) 对于企业软件来说, 这足够了吧.

    说到底还是政治原因无法普及.

    在桌面软件和企业软件方面, 软件业已经是成熟产业, 成熟产业不是讲究什么创新之类的, 而是要受大公司左右的.
    #billjoy 发表于2005-01-01 01:37:00  IP: 61.185.217.*
    事在人为,大师们的聊天都变的这么的精彩,不懂得很多,但一切皆有可能!
    #小榕&烈火 发表于2005-01-02 14:30:00  IP: 202.118.194.*
    to Royal

    1:孟岩先生对与语言的看法,不敢苟同
    2:其实,孟岩先生的担心在于,"java不仅在商业,企业软件领域攻城掠池,甚至在传统的c/c++领域的地层的操作系统,编译器,数据库系统都逐渐有使用java来编写的趋势,并且这样的系统已经出现了如操作系统Java Destop system, java重写的语言python,数据库系统HXXX",,

    其实,这样的趋势已经很明显了,特别是在java平台上,
    这也实在是令人忧虑的地方,
    #小榕&烈火  发表于2005-01-02 14:42:00  IP: 202.118.194.*
    to Royal厂2

    如果c++不能对这样的趋势,做出自己的反击,那么c++语言最终沦为---"java是用c++编写,c#是用c++编写的",仅仅是一个"正确的命题"而已,而最终退出主流语言的舞台.就想汇编语言一样,c/c++的出现,加速了它的消亡,所以2者的形式不同,本质却大致相同.

    一门语言,当它的设计哲学不适应与新时代的发展时,它必定会退出主流的编成语言舞台,只居幕后.

    c++的"反击"也只是延长它的使用寿命而已.

    c++/cil就是native c++的反击,,
    #七猫 发表于2005-01-15 12:53:00  IP: 60.63.8.*
    myan为中国C++做出了很大贡献了。表示一下敬意。

    用合适的语言做合适的事情是我一向所认为的。
    上面有人说quake,doom是用C写的,嗯,不错,但更多的游戏是用C++写的。

    GUI库也大部分是C++写的。

    操作系统用C写我想可能是因为在实现操作系统的时候很少会用到C++的一些特性。

    在做大型项目的时候个人感觉C++比C要好些,但是假如不涉及到太底层或者太重视效率的话,用JAVA或者C#显然是个更好的选择。(当然也可以底层用C来实现,高层用其他语言来实现)

    语言是拿来做事不是拿来眩耀的。
    #七猫 发表于2005-01-15 12:58:00  IP: 60.63.8.*
    不过说老实话,我还是比较喜欢C++风格的C(不用类,直接用函数,但加上C++的类型检验和其他一些东西),感觉比单纯的C要好些,虽然要多打不少字:)。

    #七猫 发表于2005-01-15 13:00:00  IP: 60.63.8.*
    对语言,我不是很看重,我觉得只是表达自己想法的工具,只要不妨碍自己表达思想就可以了,关键是自己的想法(算法,架构等等)是最根本的,也是最重要的。
    #力为 发表于2005-01-28 14:01:00  IP: 202.202.13.*
    没有C++/CLI世界将会更美好!
    #路人 发表于2005-02-06 06:53:00  IP: 61.62.148.*
    過去也許曾經有某天
    英, 法, 德, 日留學生碰面了
    會互相爭執誰學的語言是第一

    今天
    不會有人蠢到去爭執這個

    語言優劣或難易
    都只是用來溝通

    1.
    某些事須要特殊語言才能溝通, 才能說得明白
    那就用它

    2.
    有些語言已經成為強勢語言
    那就學它

    3.
    有些語言特異功能超多
    那喜歡的還是會去學它

    基本上, 所有今天仍在使用的語言
    都符合上述 3 點
    優點自然也是缺點

    會拿一堆語言來互相比較
    只是為了進化語言本質

    不想溝通, 不想進化, 比較不出優劣, 無法取長補短 ...
    更重要的是 : 不想使用或改良自己喜歡的語言

    會再多也沒用
    #ZZZ 发表于2005-03-19 23:28:00  IP: 220.170.38.*
    不过总之百招会不如一招精,做什么工作都要有自己的过人之处。



    c++和java实在是难以取舍
    #wzh 发表于2005-03-20 13:12:00  IP: 202.119.24.*
    小弟先从大的方面,浅谈一下自己对C++前途的看法。切莫见笑:

    支持和更新C++标准的组织像联合国,微软像老美,所有支持Java的公司像欧盟或其他一些对抗老美的组织。

    联合国需要由具体国家支持,才能发挥其作用。C++也是如此,它不是某个公司的标准。目前微软的影响力较大,它影响着C++,其他公司也对它有影响。欧盟为了对抗老美,会出自己的政策来对抗老美,就好像Java。老美为了保住自己,也会有自己的举措,就好像微软推出了C#。

    把商业利益比作国家利益,Java和C#都一定程度上取得了成功。但他们都只是一家的东西,不是大家的东西。试想如果哪天微软垮了,Sun垮了,还会有这些东西吗?因此我们不可能把某个公司的东西作为一统天下的语言。大家会说他们现在确实在很多应用领域很成功。事实是这样的。可难道联合国没有实权我们就要淘汰他;而老美或欧盟很强大,我们就要把他们的政策作为世界性政策吗?显然不合理。

    我们不得不承认,联合国确实没有实权,它需要依附。这就好比C++需要依附特定的公司来实现其价值。可它确实在很多方面还是能发挥特殊作用的。所以即使微软有了自己的东西,也不会完全抛弃它。不管是Java还是C#,仅仅只是公司适应形势的短暂策略以适应目前的形势。但C++包容性很强,也许这使它复杂,但也使它在很多方面不可替代,因此不至于被淘汰。

    然而,市场是残酷和现实的。东西一旦和钱挂钩就变复杂了。我们不能因为微软和Java可能会造成垄断就说不好,而C++是大众化的就说他一定好。那些发明和发展语言的大师们,也确实应该意识到C++面临的市场危机,而不得不好好考虑一下复杂性带来的市场问题,继续努力改造他们的语言。但我辈小鸟人物,至少应该对他仍抱有信心。毕竟C++不是暴发户,它是一步步走过来的。

    多多讨论,有益无害;然而经常性互相菲薄攻击别人所使用的语言,则对于国内尚不成熟以及浮躁的软件行业,有百害而无一利。
    #wzh 发表于2005-03-20 13:37:00  IP: 202.119.24.*
    说上面这些,也许有人会感觉空。下面就从小的方面说说实际的:

    很多人会问:我该用什么语言?我们的公司该用什么语言?于是去问别人,然后会牵扯出XX好,XX不好之说。

    其实对于公司,商业利益永远都是第一位。不管你用什么语言,总得在规定时间里拿出可行的东西来。因此要考虑实际情况。不管你作为程序员还是项目负责人,你可能都有自己偏好的语言。但是你得考虑公司实际。也许你很希望项目用Java来做,而且你也觉得那个项目用Java做更好。但是你的公司却有好多年的C++开发经验,短期内转不太现实,而且C++确实做得出来。我想最终用什么就不用考虑了吧。当然如果你考虑了各方面利弊,最终得出了要让项目组转开发语言的决定,只要是可行和有益的,也没什么不好。然而语言对公司确实不是那么重要,市场和利益总要先考虑。微软把VB做得很火,虽然有些人看来它和C++,Java,C#这些东西都不能比。

    作为个人,公司利益也是首位。上头要你用Java做开发你不能唱反调,这点毫无讨价还价余地。其次是兴趣,看哪个顺眼就把哪个学好。不太欣赏有些人经常问的:“学Java和C++以及C#哪个更好赚钱啊?”如果只是为了赚钱,真的不该来做开发。再次要谈一下坚持一门语言的问题。如果一个人只想做技术,而不想涉及更高,那绝对有必要把一门语言学好而不去赶时髦学习新鲜技术。关于这一点我经常联想到《天龙八部》中天龙寺老和尚关于“一阳指”的言论:“你们连自己的本事都没学到最上成,又为何要去贪图别的本领?”不过要是有兴趣往更高发展,也许多了解几门语言,比较一下优劣,从而找到一种适合自己项目的语言应该是有必要的。但是没事就和别人对骂对方的语言不好,实在是件很无聊的事情。有时间还是学好自己感兴趣的语言吧
    #L.C.B. 发表于2005-04-15 12:02:00  IP: 210.21.221.*
    >我认为Java和C#之所以能大获成功,最本质的原因在于它们是领域相关的,甚至是公司相关的,而C++则一直企图中立。

    就像人一样,不愿树敌,也就不会有朋友。君子之交,终究淡如水。


    荣耀老师这句话说得很好。
    C++是通用程序设计语言,C++程序编译之后可以直接在硬件上跑。Java,C#都是不能这样的。
    #sdg 发表于2005-06-10 15:38:00  IP: 61.186.252.*
    C#和Java的繁荣期,则有赖于人们对于大一统的中层次语言的信仰有多坚持。此两种语言无论在系统开发还是在应用开发中都非最优选。目前C#出现一些迹象,引入一些动态语言特性如cmdlet,又强化系统编程能力,想上下通吃。这是一条不归路,必会使C#变得更加复杂怪异。
    ===========
    我觉得C#上下通吃并不是一条不归路,而是一条以市场为导向,以人们的需求为目的的一条正确的路;人们不可能完全脱离系统而只写应用程序,反之应用程序不可能不与系统程序结合;这种有一种语言解决诸多问题是人们孜孜以求的事情.
    #ilovevc