孟岩ID:myan
[修改头像]
1551622次访问,排名6好友1人,关注者32
总是在思考存在的问题
myan的文章
原创 145 篇
翻译 0 篇
转载 3 篇
评论 5194 篇
最近评论
ranzj:我只抱怨自己的努力不够。
ranzj:我毫不怀疑 SilverLight 是个“钱”途无量的玩意儿。
winvc:还有 之前已经看到过一篇署名孟岩的文章了 也是自称学计算机的 在MOP发的文章 题目是《不知名的程序员写给想学编程的朋友》(最后署名前还特别声明了下自己是初中文化全靠自学的 大哥 这样的人全国有几千万 没几个比你这种货色差的)

那文章是看的我想吐 不知道是你还是重名了 不过咋跟你这篇文章风格这么像呢 都是不懂 逻辑混乱 瞎喷
你是自己想不明白问题 但认为自己想……
winvc:osa!!!
建议你看几本书 补充下知识 尤其是编译原理方面的
你这个人思考问题特肤浅 还以为自己想的很深入 真是越笨的人越自大 你窝家里窝的了
lyaqys:强烈同意,只懂技术,开发出来的东西用户都不知道怎么用,有什么用啊!
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    测试
    友情链接
    老赵的博客
    存档

    原创 用C设计,用C++编码

    新一篇: Andrei Alexandrescu的SD2C大会演讲主题

          昨天晚上看到刘江的blog又补充了好几大段,今天早上又看到云风的人肉trackback,果然还是这种话题引人关注。

         云风先是提了一下所谓C++带来的思想包袱(文言文曰“心智包袱”)问题,然后重重地引用了Linus的话:“关键是设计”,其实他是在暗示:好的设计C同样能做出来,不劳C++大驾;而C++一旦出面,就要让人背上额外的思想包袱。

         我明确地表个态,在系统级程序设计中,事实就是这样的。

          别小看这个思想包袱,大部分,甚至绝大部分C++程序员过不了这一关。
    相反,做系统级开发,C是几乎没有思想包袱的语言,说白了就是刺刀见红,你想要啥你就去写啥,它给你的不多也不少,没什么干不了,也没什么非让你背着不可。
         
        
    我早在N年前就发现自己写程序速度慢,我当时对STL远比周围人熟悉,照例说长缨在手,应该效率 很高才对。结果发现不是,写程序的时候特别没自信,总在想:“这样固然是可以work了,但恐怕有更好的方案吧,会是什么呢?加个模板参数试试?要么抽象 出一个基类?做一个bridge模式?那么Ownership的问题怎么解决?谁 来负责回收内存呢?移植一个boost::shared_ptr过来吧!可多线程情况下会不会拖慢速度呢?应该不会,可是会碰到循环引用的情况。要么在中 间搞一个weak_ptr把循环链断开?哎呀不行不行,太复杂,别人也理解不了。还是先这样吧,能work就行。” 就这样,兜了一个圈子回来。有的时候,这个圈子不是纯柏拉图式的,我会真的实现不少 “优化” 设计来比对,那个时间啊,花花的就耗在里面了。有的时候确实会获得一些改进,但是多数时候是得不偿失,旁边那些在我看来连C都只是一知半解的家伙采用 “CtrlC-CtrlV-Modify-Debug” 大法,早就冲到我前头去了。这就是“心智包袱”的威力。

         最近几年没怎么用C++写程序,业余时间倒是别的语言用了好几种。大概是体会到这些语言的某些好处之后,对C++就能看得更客观一些了,也琢磨了一下,如 果自己有朝一日重新跑回去写C/C++,我会怎么干?毕竟现在C++程序员全球紧缺,工资越来越高,这个问题还是有其现实意义的。正好昨天跟chensh 聊了一会儿,两个人的看法一致,就是采取“ C + Concreate Class + STL”的风格。说白了就是用C来设计,用C++来编码。

         这里面的道理是这样的,反正现在C和C++都是来做系统级开发,那些华丽的抽象机制用不上,思考解决方案的时候,就以C的方式。注意,C也是可以做基于对 象甚至面向对象甚至组件级别的设计的,但是在C的层面上思考问题,设计能够更精益(lean,现在这是个时髦词),更轻便,更直接。当你构思的设计方案出 来以后,如果其中有些部分,恰好是C++现成做好了,而且使用C++又可以提高开发效率,也没什么明显的副作用,那么就用C++来做相应的部分。比如, COM原来设计的时候就是在C基础上做的,设计的时候发现实际上跟C++实现多态的的vptr + vtable是吻合的,所以后来就主要用C++来做COM开发。事实上,为了适应COM开发的需要,微软直接改了C++编译器。很显然,微软是首先构思好 的设计,然后让C++去适应这个设计。而后来很多C++程序员,是让设计去适应C++的那些语言机制,在系统开发中,这个叫做本末倒置。当然这样的事情在 应用级别上就不是那么离谱。


         实际上回头看看C++早期的历史,最早C++就是把一些C中常用的patterns内置到语言里而出现的,早期它曾经有效地提高了开发效率。今天应该回头去寻找这种精神。

         我支持STL是基于同样的理由。很多时候,你从C出发得到的设计,也无非就是STL已经实现得很好的东西。在这个时候,当然可以用STL。尤其是那些算 法,针对C array也是适用的,用accumulate求和,用transform映射,用adjacent_find寻找相等的毗邻项,用 lower_bound和equal_range做二分查找,等等,这不是比手写要爽多了吗?当然,使用STL,还是必须熟悉其背后的机理,没有这个底 子,还是规规矩矩用C算了。
       
     

    发表于 @ 2007年09月10日 11:32:00|评论(loading...)|编辑

    旧一篇: Linux之父话糙理不糙

    评论

    #fastest286 发表于2007-09-10 13:30:20  IP: 61.140.124.*
    如果开发高性能程序, Myan 的说法里面的 STL 是不是可以继续精简到 STL 里面的算法? 而且是对 native array 操作的算法 ? 因为 container 已经不好用了.

    我自己的感觉是, 如果要非常追求效率, STL 的容器很鸡肋, STL 里面放什么呢 ?
    1. 放对象本身? 那对象同时要参与到多个数据结构的时候, 就难办了

    2. 放对象的引用或者指针? 那谁有 对象 ownership?

    3. 放 reference count pointer ? 这个在高性能程序里面, 可有不小的拖累.

    没有GC, 这个 STL 容器在这种情形下很难用.

    当然, 不是开发性能要求高的程序的时候, 自然怎么弄都无所谓. 但是这种领域, C++ 的竞争对手也多.

    C++ 现在经常让人有鸡肋的感觉.
    #mcs51a 发表于2007-09-10 16:43:20  IP: 58.32.189.*
    有时设计选择过多,可能也不是好事
    #xingranliuyun 发表于2007-09-10 19:40:45  IP: 60.31.198.*
    这一篇不错,意见很中肯。
    #pongba 发表于2007-09-10 20:55:35  IP: 222.94.3.*
    仿云风也人肉track一下:-)
    http://blog.csdn.net/pongba/archive/2007/09/10/1778748.aspx
    #binglex 发表于2007-09-10 21:42:12  IP: 61.48.105.*
    一直以为自己学艺不精,对于c++很多复杂的机制一知半解,因此也就不敢用c++设计复杂的程序,都是先将其模块化,然后在每个模块内部使用c++将相关的内容-函数、变量等封装起来,如果和别人的接口是c的,再写个wrapper函数功能接口提供出来。或许这和用c设计、用c++编码有些近似把。
    #icbm 发表于2007-09-11 10:52:55  IP: 210.13.90.*
    不是C++不好,而是学艺不精。:)
    请参见建立在C++基础上的ACE网络框架。
    #yshuise 发表于2007-09-11 10:57:46  IP: 221.205.31.*
    有人认为,c++帮你做得太多,你不安心?
    这是不是很搞笑?
    因为别人就是怕你搞不好,才帮你封装一个。试问你能写出像stl一样的
    优秀程序吗?如果你能你自己写就行了,或者说你自己封装一个,甚至全部用c写也行,只要用适合你自己的方式写就行.
    封装的程序人(stl)都是算法中的高手,你自己不用怀疑了。
    如果要怀疑你需要怀疑以下问题:
    你根本没有读过代码。因为你不懂代码,所以才不会心安。
    而实际上,别人的代码质量都是相当高的。
    #Mephisto_76 发表于2007-09-11 11:00:30  IP: 172.17.32.*
    孟老大的这一篇有道理,顶一下。
    #wishfly 发表于2007-09-11 11:22:49  IP: 61.149.146.*
    我们更多面临的不是"心智包袱",而是实际工程问题,要效率。
    况且,STL经过多少程序员的测试,使用,稳定性应该没有问题。
    难道你自己写一个不成?敢说比STL更稳定?
    #pass86 发表于2007-09-11 11:39:42  IP: 60.212.242.*
    一个大牛说了说,我们都会被影响阿。
    #irplay 发表于2007-09-11 12:31:54  IP: 58.210.74.*
    C++的用处现在感觉被C和C#架空了.以后可能会走上淘汰的道路吧....另外这个Blog谁设计的,我在19寸LCD上看到左边的目录覆盖了右边的正文的一些内容...DIV综合征啊...孟老大...把那个做web人开除了算了....
    #weiym 发表于2007-09-11 12:32:53  IP: 218.108.8.*
    用C设计接口,用C++来实现,例子就是Windows里使用的标准DLL,我们一般这样做:DLL里提供一个NewInstance的接口,返回一个实例句柄,其他的接口函数的第一个参数都是一个实例句柄,另外还有一个DeleteInstance的接口函数,这样接口也能支持多实例。
    #hotstong 发表于2007-09-11 12:43:15  IP: 192.168.100.*
    一个大牛说了几句斗气话,结果在一帮人的摇旗呐喊之下,把一大帮大牛给否认了,我想这个可能远比C++与C的技术问题更为值得思考.
    "一知半解的家伙采用 “CtrlC-CtrlV-Modify-Debug” 大法....."一个优秀的技术人员对什么是错的什么是对的都没底或者是没信心的话,我很难相信他有多高的水平.
    "额外的思想包袱"话说回来采用什么语言又真正的没有思想包袱呢?
    无论系统级软件还是应用级软件,不是光靠玩速度就能解决问题的,如果真是这样汇编语言一统江山才是王道.
    想想java,Ruby吧,想想要解决的问题才是正道,人云亦云就永远只能人云亦云.
    #psusong 发表于2007-09-11 12:58:42  IP: 222.190.106.*
    >>用C设计接口,用C++来实现,例子就是Windows里使用的标准DLL,我们一般这样做:DLL里提供一个NewInstance的接口,返回一个实例句柄,其他的接口函数的第一个参数都是一个实例句柄,另外还有一个DeleteInstance的接口函数,这样接口也能支持多实例。

    我也是这样做的,这样自己代码写起来爽,别人用起来也爽
    #njdragonfly 发表于2007-09-11 14:03:38  IP: 58.217.197.*
    用C设计接口,用C++来实现,真的很好
    #hm7921936 发表于2007-09-11 14:09:57  IP: 60.161.209.*
    wishfly 发表于2007-09-11 11:22:49 IP: 61.149.146.*
    我们更多面临的不是"心智包袱",而是实际工程问题,要效率。
    况且,STL经过多少程序员的测试,使用,稳定性应该没有问题。
    难道你自己写一个不成?敢说比STL更稳定?

    又见wishfly 在这喷子. 你看懂人家说什么了吗? 说优化呢. 青蛙.

    无论在哪 都看到你喷子. 中国的悲哀.
    #BlueTrees 发表于2007-09-11 16:23:10  IP: 125.120.150.*
    那就改改习惯。

    主要是草堆多了,驴不知道吃哪堆好了。他在想,我是先吃东边的还是先吃南边的?还是先吃北边的一半再吃南边的。我的头对着东边,应该先吃东边的,如果都吃了,体重增加了,就会增加转身的力气,嗯,应该先吃一些,然后再吃边上的,那么是左边的还是右边的呢?.....万一我没在东边,是不是有统一的办法来抽象选择过程呢?....这头驴基本上还没下口呢,完了还要考虑,我这么思考也要消耗力气的呀,那么应该怎样的决策方式可以使思考的力气和吃草达到平衡呢?

    C++fans 基本上喜欢研究这些问题吧!

    这就是一头驴的生活方式。

    改一下习惯,用最能理解的方式去解决问题,不要考虑一劳永逸的解决问题,除非命题本身就是为了解决某类问题而产生的。特别是在构造类结构的时候。
    #pongba 发表于2007-09-11 16:26:13  IP: 222.94.3.*
    再backtrack一个:
    为什么C++
    http://blog.csdn.net/pongba/archive/2007/09/11/1780545.aspx
    #GlietBoy 发表于2007-09-11 16:38:00  IP: 221.7.229.*
    一群跟风的,
    当linus说某某的屁是香的,也点头附和.
    当linus说鸡肋非常好吃,个个都说好吃.


    某地主患了花柳病,好几个郎中看不好,给一个秀才医好了.众郎中齐来问,你医好他,你读的是什么经啊.秀才不语.

    甲郎中:我读的是黄帝内经.
    乙郎中:我读的是医经,
    丙郎中:我读的是"本草纲目",
    ......

    秀才怒道: 我读的是卵经.
    众人无语.
    #redex 发表于2007-09-11 17:37:21  IP: 218.28.20.*
    相当一部分人认为c除了标准库就没有其它可用,好用的库了 ... ...
    c除了底层编程别的就不能干了 ... ...

    于是动辄拿STL说事, STL好是好, 但被你们这帮目空一切的cpper们一吹嘘, 就上了神坛了, 实际上STL的用处相当有限, 当初ms重MFC轻STL就可见一斑(实用主义远高于空想主义,STL好是好,我微软就是支持得不好,怎么着??)

    经常吹嘘"实用主义"的cpper们啊 ... ...
    #chenlixin007 发表于2007-09-11 18:18:33  IP: 122.0.66.*
    有道理,最近用C++ 设计系统,具郁闷,后来干脆不管三七二十一,定义好接口,赶上C++会的就用,不会拉到,这样也好。
    但感觉这样不是纯粹的高手......
    #yshuise 发表于2007-09-11 18:21:57  IP: 218.26.177.*
    再次重申“STL不是一堆代码的堆砌”。比如:
    去看看内存管理,代码非常的紧凑。
    可以说,你是没办法做到的。
    事实上,你只需要怎么使用就可以了。
    也就是你只是一个生手,
    但是你使用的代码就是c高手也不能办到的。

    有一个很让人匪夷所思的观点,就是c++不好设计。
    c更好。只能说你对c地掌握程度胜过c++而已。
    因为c++基本上具有一切c的重大功能。所以,真正的问题是:
    水平不行。
    #vcnewer 发表于2007-09-11 20:21:47  IP: 222.85.75.*
    同意ls ,水平问题
    虽然偶一直是这样做的
    不过大牛都这样说了,偶再思考思考
    嗯,两种情况
    水平一般的,无法完全驾驭C++,走了这条路
    牛们,出于孟老大说的原因,走了这条路
    #duyanning 发表于2007-09-11 21:19:49  IP: 221.11.38.*
    A language doesn’t solve problems; it merely helps the expression of solutions.----------------Bjarne Stroustrup
    浅薄且狂妄的人们啊。
    #benjiam 发表于2007-09-11 21:53:18  IP: 222.64.61.*
    说到ACE... 你想看看ACE 有多少泄漏吗?
    #jinti 发表于2007-09-11 23:18:25  IP: 221.222.199.*
    基本上是人的问题,和C++无关。

    C++挺好用的。

    不要过渡设计,不要太华丽,用平常的心态,多做review,做好类的组织结构,一个好的软件是很容易写出来的 :)
    #njdragonfly 发表于2007-09-12 00:08:24  IP: 58.217.206.*
    基本上都是没学好C++的
    无关语言
    #Could 发表于2007-09-12 08:38:39  IP: 220.231.194.*
    锰×到底做过什么牛的项目?在CSDN上无非就是吹吹牛的工作吧。
    文章里面说了作者自己用C++遇到的问题,其实那些问题都是新手用C++时很常见的问题,只是作者碰到这些问题以后就知难而退了,所以无法有幸进入C++的门槛。不是C++不行,是你不行。
    C++和C从来都没有什么矛盾,好多程序都用这两种语言结合起来写的,只是用这两种语言的某些人吃饱了撑着没事做。
    C与C++之争,只是面向过程与面向对象之争,这种争论很愚蠢。
    #cnstar9988 发表于2007-09-12 09:29:08  IP: 218.247.176.*
    比较同意Could的看法。
    文章中的问题都是新手用C/C++碰到的问题。
    作者充其量是C/C++的初学者,不算C/C++高手行列。

    孟XX到底用C/C++做过什么牛项目?
    在CSDN公司内部,应该就几个ASP.NET系统吧。
    #numbbb 发表于2007-09-12 09:31:04  IP: 222.33.211.*
    99.9%的项目用不着C++,用C语言一样可以实现OOP,而且实现的很好,效率很高。
    #cber 发表于2007-09-12 09:54:17  IP: 57.73.18.*
    这个标题太耸人听闻了

    工作中,这里面瞎掺和的人中,至少有80%的人其实是没有选择语言、参与设计的权利的;所以本着马斯洛的需求层次理论而言,最好的做法还是,老老实实地学好老大所选择好的语言做出来的设计,保住自己的饭碗再说

    用C设计,在现在这个连OO都不大能满足老大们胃口的年代,你觉得真的有可行性?

    工作得郁闷,上来发个牢骚,大家继续……
    嗯,我也在考虑是否也写一篇来参与这个无聊的游戏^_^
    #duyanning 发表于2007-09-12 10:42:07  IP: 221.11.38.*
    99.9%的项目用不着C++,用C语言一样可以实现OOP,而且实现的很好,效率很高。
    ===================
    200%的项目用不着C++,汇编语言也能实现OOP。
    当然,我这绝不是反话。
    #zhouhongyun 发表于2007-09-12 11:10:02  IP: 219.140.59.*
    水平一般的,无法完全驾驭C++,走了这条路
    ------语言是工具,连使用这种工具 都 能让百分之九十的开发人员感到如此困难,这种语言是失败的语言。别人的目的是用C++做事,而不是花个七八上十年先学会使用他,没人有这个资本跟它耗下去。


    200%的项目用不着C++,汇编语言也能实现OOP。
    ----OOP的理解各有不同,windows NT内核就是用C实现OO,照样用得很好,而且一直继承下来。何况用C实现OOP和用C++实现OOP,在难度是是一个级别,这和用汇编实现OOP可不一样。再说一句,OOP只是某些人推崇的思想,另外也有庞大的群体根本对它不屑一顾,别人还活得好好的,思想没有先进落后之分,看适合什么人了。
    #duyanning 发表于2007-09-12 11:58:18  IP: 221.11.38.*
    语言是工具,连使用这种工具 都 能让百分之九十的开发人员感到如此困难,这种语言是失败的语言。别人的目的是用C++做事,而不是花个七八上十年先学会使用他,没人有这个资本跟它耗下去。
    ==========================
    都是谁掌握不了C++?只有那些使用C++不是为了解决问题,而是为了在代码中卖弄自己知道多少多少C++特性的家伙。
    这些家伙中,智商高一点的就成了孟岩那样(还好,人家孟岩认好歹能回归到“用C设计,用C++编码”上来)。
    智商低一点的,就成了你这样的。


    OOP的理解各有不同,windows NT内核就是用C实现OO,照样用得很好,而且一直继承下来。何况用C实现OOP和用C++实现OOP,在难度是是一个级别,这和用汇编实现OOP可不一样。再说一句,OOP只是某些人推崇的思想,另外也有庞大的群体根本对它不屑一顾,别人还活得好好的,思想没有先进落后之分,看适合什么人了。
    ===========================
    先分清楚简单的数据抽象和OO再说话。
    没有用过virtual,就别说自己OO过。
    C语言实现个简单的数据抽象都很勉强(因为没有访问控制),要实现OO的话,自己去维护vtable吧。跟用C++实现OO是在一个级别上?
    “思想没有先进落后之分”,这是思想落后的人才会有的想法。
    #sinall 发表于2007-09-12 13:44:42  IP: 210.22.146.*
    不赞同作者观点:
    1、 C + Concreate Class + STL
    没有解释何谓“Concreate Class”(还是Concrete Class???)。
    2、C和C++都是来做系统级开发
    何谓系统级,系统级和操作系统是什么关系,作者是否能说清,呵呵。
    3、用C设计,用C++编码
    难道《设计模式》都是在扯淡?不解作者何意,如果说C++效率较C低的话,也应该是反过来才对“用C++设计,用C编码”。

    作者既然说要用STL,为什么不提template?呵呵,莫非STL就已经包罗万象了,还是在实际中,我们除了STL外,仍然需要自己使用泛型特性?

    4、使用STL,还是必须熟悉其背后的机理,没有这个底 子,还是规规矩矩用C算了。
    呵呵,这句话有其正确性,但也有扯淡的一面。作者明白自己的胃是怎样工作的吗?如果不明白的话,还每天照样吃饭吗?呵呵。
    #tyjw1001 发表于2007-09-12 14:34:20  IP: 124.243.198.*
    腾云驾雾超级服务器正式免费推出!无须任何维护,可让您在1分钟之内建立属于自己的网站!
    腾云驾雾超级服务器程序既是一个 webserver 又是一个网站。超级服务器的主要目的是让运行这个程序的人,立即拥有一个属于自己

    的网站,理论上 腾云驾雾超级服务器 可以将世界上任何一个网站变成运行本服务器程序的那台电脑的网站!
    同时您只要拥有一个全世界唯一的IP地址,那么你就可以让全世界的人来访问你的网站了!当然您要是有一个域名绑定您的IP,那就更

    爽了!
    腾云驾雾超级服务器程的最大优点是:
    1、可以让你在一分钟之内完全拥有一个属于您自己的网站。(快速)
    2、您拥有的这个网站将无需要任何维护!(省事)
    3、您只要申请 google 的 在线广告 AdSense 就可以开始挣钱了。(挣钱)
    4、只要在 参数配置文件 tengyunjiawuserver.ini 中填写 您 google AdSense 的代码编码就可以开始挣钱了。
    5、腾云驾雾超级服务器属于纯绿色软件,无需安装注册!(绿色环保)
    6、腾云驾雾超级服务器即是一个 webserver 又是一个网站,所以只占用大约 1.5MB大小的空间!(不占地)
    理论上 腾云驾雾超级服务器 可以将世界上任何一个网站变成运行本服务器程序的那台电脑的网站!
    超级服务器 奥运版
    下载地址1:http://www.tengyunjaiwu.com/download/tyjw_aoyun.rar
    下载地址2:http://www.600bbs.com/t.rar
    超级服务器 baidu 版
    下载地址1:http://www.tengyunjaiwu.com/download/tyjw_baidu.rar
    下载地址2:http://www.600bbs.com/chao.rar

    腾云驾雾超级服务器即是一个 webserver 又是一个网站,如果您的电脑正在运行 Apache 或 IIS 或 Tomcat 请先关掉!

    有任何问题请联系我: http://www.tengyunjiawu.com

    可以定制啊,你看上哪个网站了,告诉我,我帮你做那个网站的版本啊!

    腾云驾雾超级服务器推出 google 版本,端口,广告可完全自定义

    超级服务器 google 版
    下载地址1:http://www.tengyunjiawu.com/download/tyjw_google.rar

    你可以看看 google 版本的 DEMO (本人带宽只有 1MB,速度可能慢了点,大家多谅解啊!)
    http://www.tengyunjiawu.com:8080
    这个版本也叫气死 google 不偿命
    做的还不是很完善,请大家多批评指教!
    #007pro 发表于2007-09-12 14:45:59  IP: 60.18.57.*
    模式设计,哼哼,其实就是指针高级封装指南而已
    #danscort2000 发表于2007-09-12 17:14:39  IP: 202.107.212.*
    在两个大虾为C/++争吵前几天,我正好在CSDN发了个帖子,说MFC效率很低,STL和BOOST都不适合开发低层的服务器软件,结果被很多CSDN的"大侠"批判为自己用的不好,可我感觉这些大侠低层代码写的不够多,服务器里STL和BOOST里的类和函数,由于太具有通用性,反而导致了低效率和代码的复杂性,只有写过足够多的代码估计才能体会到吧

    现在好了,由LINUX的祖师爷叫板C++ /stl /boost,声音小下去了.
    #zengjd 发表于2007-09-12 18:22:24  IP: 192.168.168.*
    Linus Torvalds的成功是政治因素而不是技术因素的结果。
    换句话,Torvalds是领袖,而非大师。
    L粉们都是追星族。

    Linus Torvalds以为他自己如何如何了?
    飘飘然了?
    一个好一点儿的计算机硕士毕业的学生。
    写一个操作系统的内核绝对是应该办到而且肯定可以办到的事儿。
    其实Linus Torvalds不过是在正确的时间做了正确的事情而以。
    如果没有MS,不会有这样一个猥琐的人让大家记住。
    从以前见过他的相片。到现在看见他发表意见的口气。
    就知道他是一个彻头彻尾纯粹的垃圾。


    L粉们其实和超女的“粉丝”一样,
    是一群头脑发热,神志不清盲目崇拜的人。
    因为Linus Torvalds会写操作系统。
    所以崇拜。
    这个理由就如同超女会唱歌所以崇拜一样。
    #njdragonfly 发表于2007-09-12 19:55:26  IP: 58.217.206.*
    楼上说的有些道理
    #numbbb 发表于2007-09-12 20:38:14  IP: 222.33.211.*
    呵呵,去研究一下能找到的操作系统源码吧,可以是嵌入式系统,也可以是其他系统,着重看C做的文件和驱动架构的抽象层,会看到C的结构与指针等等之间出神入化的使用,可以极其高效实现C++特性(如:virtual、封装)。

    只要仔细研究一次用OOP思想写出的C代码,就会发现C++只适合用来学习OOP,最终还是要用C来做开发。
    #numbbb 发表于2007-09-12 20:41:12  IP: 222.33.211.*
    不要以为C++的特性很Cool,其实用C实现起来一点不难。
    #guangsun 发表于2007-09-12 21:46:51  IP: 221.237.179.*
    用C设计,用C++编码 ?如果这是一个笑话,一点不好笑。如果是高级编程技术人员,尤其是熟悉c和c++的技术人员,说这样的话,呵呵,会让人觉得是熬夜太久,说的是没有经过大脑的胡话。听说大部分的超级豪华汽车的生产过程中手工制作配件的工作很多,但其生产过程未必就比生产线先进。篆刻大师的技术不一定能够制作大型雕塑。如果房地产开发公司向客人介绍新房屋说,我们已经对房间内部的每一匹砖位置进行仔细积计算,所有的管线作了精心设计,然后根据这些设计造了房子,所以房子肯定是做好的,客人大多会认为设计房子的人脑子有问题。
    说这话的人很难让人相信做过大型系统的软件设计。如果直接用某种语言直接设计或编程,一般来说是一个小程序(基本上是一个人可以搞定),或发烧友捣鼓作玩。
    #wishfly 发表于2007-09-13 00:18:45  IP: 61.149.151.*
    的确应该反过来:用c++设计,用c编码
    否则,“设计模式”还有什么用!?
    c++之所以厉害就在于他能很好地平衡两者。
    #luyiping 发表于2007-09-13 02:34:37  IP: 60.12.88.*
    某日,
    夜黑风高,
    各大门派有一次汇聚华山之巅。
    这次主要对抗的是两大门派:西派和西加加派,
    其余派别还有:爪哇派,西夏派,伟比派,戴尔飞派,派森派,路比派等等
    ......
    http://blog.csdn.net/luyiping/archive/2007/09/13/1783051.aspx
    #sinall 发表于2007-09-13 10:06:03  IP: 210.22.146.*
    # 007pro 发表于2007-09-12 14:45:59 IP: 60.18.57.*
    模式设计,哼哼,其实就是指针高级封装指南而已
    ——呵呵,不要以为你很cool,其实就是碳水化合物高级封装指南而已。。。(什么叫指南而已,我也不明白)

    # numbbb 发表于2007-09-12 20:41:12 IP: 222.33.211.*
    不要以为C++的特性很Cool,其实用C实现起来一点不难。
    ——呵呵,你的想法不错,你可以用C写个C++了。可喜可贺。(然后再用C写的C++来工作??)
    #robin_qiu 发表于2007-09-13 10:25:57  IP: 221.226.145.*
    显然,话说反了!

    对程序库:高层设计,底层编码(即用面向对象的方法设计,用你放心的语言实现)。例如gtk+库较之Win32 GUI SDK又如何?

    对应用程序:更是"用C++设计,用C++编码",因为C++能直接表达设计领域的概念,尤其是用类来表示概念。

    当然,你可以用C来表示一切,但这一切可能没有语言层面的支持。
    #guangsun 发表于2007-09-13 10:41:53  IP: 218.104.205.*

    # numbbb 发表于2007-09-12 20:41:12 IP: 222.33.211.*
    不要以为C++的特性很Cool,其实用C实现起来一点不难。

    --高楼建筑很容易建设,也不过是水泥加钢筋而已。我土胚房都能建,对每一撮土的位置和特性度了如指掌,还不信建不了50层高楼。
    #sevencat 发表于2007-09-13 11:42:32  IP: 124.243.200.*
    我认为很多人没有理解linus或者myan的意思,我举个实例。


    我们现在要设计一套网络-客户端软件,我们要先把协议定好,把界面和后台交互设计想好,把容错和恢复想好,我认为这些是最重要的,至于编码,用C也可以编出来,用C++也可以编出来,甚至用JAVA也能编出来,关键是整个软件的架构要清晰,这样软件本身才不会出大问题。

    当然对于那种比较小的软件,设计就不是那么重要了,或者某些技术至上的软件(比如说那些什么hack之类的,那设计就不是很重要了)


    至于说到用什么语言,以前百晓生在兵器谱上的排名第一好像是如意棍。你让使如意棍的人来使刀,使枪,估计他也不太会,而且他还会跟你讲如意棍是最好的武器。小李飞刀其实说白了就是一把普通的小刀(那时候铸造水平估计比现在要差),但到了李寻欢手里就发挥大的威力。

    当然,这是针对个人来说的,从广义的语言上来说,我个人认为语言的发展方向是向着实用、解决问题、简化的方向发展的。从asm到C,从C到C++,JAVA都是体现了这一点。其实有很多语言,比如vb,比如pb,很多人不屑,但他们的确很实用,也解决了很多实际的问题。所以有他们的大的生存空间。至于说到优雅、巧妙,我想那就是学究派了。

    至于C++的高级特性,我个人认为没有必要花很多时间去学习,把这个时间花在学习一种脚本,学习一下操作系统,学习一些数据算法岂不更有用。
    #Diablocn 发表于2007-09-13 12:20:55  IP: 221.217.162.*
    我想CN绝大部分人都是在已经有的系统库上写应用程序吧..
    这个系统要求你用什么语言就是什么语言 又能选择什么呢

    另:
    c++ 太庞大太复杂了.一本Primer就这么厚 更不要说其他了
    还是只学自己要用到的就好了
    象模板那些高级特性,什么Stl我几乎都没有用过 除了刚学C++时摆弄了几下
    现在基本上就是c 加 类罢了,偶然用下瘦模板什么的..



    #next2100 发表于2007-09-13 20:38:50  IP: 121.205.204.*
    用哪种语言都一样,主要是生产效率!有了好的框架,我们无非站在先人的背上,走的更些,这东东不是一时半日单凭一个人的力量就能建出一座皇宫,所以还是把自个的效率提高了再去争论如此是非!
    #laibach0304 发表于2007-09-14 00:06:01  IP: 58.49.239.*
    C++的各种特性和stl不是强加在程序员身上的。不理解编译器做的事情,不理解库的内部实现使用了它们反而不爽不是C++的错。

    我只能说C++的门槛高。你们害怕了,没看过10本以上C++著作的人没有权利在这里对C++指手划脚。而java达到同样的境界只需要两三本书就够了。

    C++比起C就是进步,一个const关键字,一个bool类型都是进步,更不用说其他玩艺了。阻止进步就是犯罪。

    说C++没用的人为什么不说Java,C#没用?语言没有万能的,说出来谁都知道。你们就只是墙头草,随风倒的类型。我C,C++,Java,C#都用。只是在这里为c++说句公道话。
    #prowyh2007 发表于2007-09-14 00:15:10  IP: 58.25.80.*
    前几日曾在刘江blog里跟了几句话,现在看来热度仍然不减,所以转帖在这里:

    1、C是最能体现程序设计(programming)功力的语言!尤其是第一版即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++的概念性更强,更加强调良好的设计(good design),层次提高了,反映在语言上,就是更加复杂。
    7、所以,如果是做操作系统级的东西,C可能是不二选择,但如果是应用级(不是高层应用,而是系统级的应用,比如OS kernel之外的东西),C++可能会更好。
    8、每一种语言都有其设计的宗旨及适用的范围,除了吃饭必需的之外,自己喜欢的,就是最好的!

    补充:
    A、N年以前曾听一位玩Linux的高手说过:真正的程序员都是用汇编的(大意如此,意思是真正的程序员都是直接跟硬件打交道的)!
    没有见过比这更为偏激的了(有点少年轻狂),但当时并没有引起人们的注意,今天Linus说了类似的几句话,就引得如此沸沸扬扬,实在匪夷所思......,也许Linus是“大腕儿”?我们一直走不出“大师崇拜”的阴影?
    B、但这些沸沸扬扬的议论里面,多的是情绪的宣泄,少见理性的思考。实际上,多读读K&R的书,就知道C是怎么回事,而多读读Bjarne Stroustrup的书,才知道C++是怎么回事。而知道了C/C++到底是怎么回事,就不会对Linus的几句话如此大惊小怪、翻江倒海,因为N年以前的Linux高手就说过类似的话了。呵呵。
    C、世界上没有完美的东西!勉强的比附是愚蠢的。
    N年以前所用的Unix是出自AT&T的正宗(非BSD版),版本是Unix System V Release 2,当时认为是一个近乎完美的OS,以至于后来接触Windows反倒觉得真不怎么地。可那又如何呢?Windows已经成长为占据半壁江山的“巨人”,Unix已经衍生了若干variants,Linux也已经形成了一个强大的community(尽管我不喜欢,但没人在乎你喜不喜欢,有人喜欢就行,这是市场法则)。
    OS如此,语言也一样。中文还要从文言文进化到现代(白话)文呢!若问是文言文好,还是现代文好?这就近乎是一个白痴的问题!这就好象大人逗小孩子,问是爸爸好,还是妈妈好。作为一个玩笑问题去问小孩子,只是一种善意的玩笑。而如果作为一个严肃的问题去问成人,那就近乎白痴!
    D、如果国人哪一天能够设计出一种超越
    #prowyh2007 发表于2007-09-14 00:20:19  IP: 58.25.80.*
    怎么这评论还有字数限制?不然我上面的东西怎么会被截断呢?既然有字数限制,为什么不说明呢?
    这个问题应该比C/C++的语言之争解决起来容易得多。。。。。。sigh..............

    继续把最后一段再帖上罢。

    D、如果国人哪一天能够设计出一种超越C/C++/C#的X语言来,我将为之鼓与呼!很久以前有过一种叫XCY(取系统程序语言的拼音缩写)的国人自己设计的语言,关键字都用中文表示,也许设计者认为这才是中国人自己的语言吧,用心良苦,但背道而驰,再加上当时中文输入不易,其命运可想而知。
    #wingfiring 发表于2007-09-14 14:56:44  IP: 202.95.81.*
    反正现在C和C++都是来做系统级开发,那些华丽的抽象机制用不上,思考解决方案的时候,就以C的方式。
    ------------------------------------------------
    不是人人都在做嵌入式,操作系统。动辄百万行的项目不敢说遍地开花,那也不是什么百年一遇的了。倒是我怎么尽接触那些C++写的,应用级的大型项目?也从来没觉得那些华丽的抽象机制用不上。
    #lwj3025 发表于2007-09-14 16:14:33  IP: 121.51.55.*
    http://www.eseeo.cn/movies/1/movies/1/45000.shtml
    #pongba 发表于2007-09-14 17:32:44  IP: 222.94.3.*
    sevencat wrote:

    我们现在要设计一套网络-客户端软件,我们要先把协议定好,把界面和后台交互设计想好,把容错和恢复想好,我认为这些是最重要的,至于编码,用C也可以编出来,用C++也可以编出来,甚至用JAVA也能编出来,关键是整个软件的架构要清晰,这样软件本身才不会出大问题。

    我认为这个逻辑是不对的。照这个逻辑,任何图灵完备的语言都可以拿来实现特定功能。

    但语言本身就是形而上的,语言的能力就体现在更直观简洁地表达思想(这是对于编码者),更直观容易地理解(这是对于阅读者)。这两点其实就是金钱,而且维护花的钱更多。

    一个项目并不是一次写完,就算了。而且就算一次写完,也分在什么抽象层上写的难易度呢。

    你也提到架构一说,架构是为什么?就是为了:一,更清晰的表达思想,二,让后来人更容易地进行扩充或维护。否则只要功能的话那就太好办了。既然架构是为了这两个目的,那就不能不说,采用何种语言,以何种语言组织代码,是重要的了。

    而在这个问题上,最重要的估计还是API的设计。所以,你要论述的重点应该是,“C是如何导致更好的API设计的”。

    那C究竟是如何导致更好的API设计的呢?

    如果能给出一个例子,同一个API,用C设计什么样子,用C++设计什么样子,那人家一看就一目了然了。

    根据你的经验,能否给出一些这样的例子呢?(是问句,不是反问:-) )
    #wingfiring 发表于2007-09-17 10:04:17  IP: 202.95.81.*
    在许多学究派的眼里,以及我这样自认为不是学究派的眼里,优雅,巧妙是正确,简洁,直接的代名词。那种玩弄技巧的巧妙,恰恰是学究派们深恶痛绝的。
    #wszltz 发表于2007-09-19 13:47:10  IP: 222.134.135.*
    继续

    萝卜白菜

    各有所爱吗

    自己使着顺就行了

    管那么多干吗

    就是争辩出谁好谁坏又能怎么样

    难道大家都用同一种语言吗???
    #1073X 发表于2007-09-20 11:45:56  IP: 222.209.223.*
    孟老大这个意味深长,惊世骇俗的题目果然又为他带来了不少人气,不过看过之后对Linus的“full of bull shit”终于又有了更深的认识 -- 原来BS还可以是这样的。

    注意......但是在C的层面上思考问题,设计能够更精益(lean,现在这是个时髦词),更轻便,更直接。
    ================================
    给点理论基础先,要不给个例子也可以。什么叫做“设计能够更精益”?为什么用C就可以更精益了?

    总在想:“这样固然是可以work了,但恐怕有更好的方案吧,会是什么呢?加个模板参数试试?要么抽象 出一个基类?做一个bridge模式?那么Ownership的问题怎么解决?谁 来负责回收内存呢?移植一个boost::shared_ptr过来吧!可多线程情况下会不会拖慢速度呢?应该不会,可是会碰到循环引用的情况。要么在中 间搞一个weak_ptr把循环链断开?哎呀不行不行,太复杂,别人也理解不了。还是先这样吧,能work就行。”
    ===================================
    这倒是很中肯,哪个程序员没有这样的经历。不过这不是哪种语言,哪种设计方法更好的问题,是程序员本身工作方法不正确。
    #huhuhuhu 发表于2007-11-02 14:38:32  IP: 159.226.175.*
    你说得太对了 作为一个C++程序员 我强烈赞同你的说法 后悔当初没好好C语言了。 这辈子太失败了
    #huhuhuhu 发表于2007-11-02 14:40:16  IP: 159.226.175.*
    C++是垃圾 C是最终的编程语言 别的语言都会消失 到时候就只剩下C语言了
    #coolmurder 发表于2007-11-30 09:24:10  IP: 221.223.131.*
    这讨论真晕!同时有锤子和钳子两种工具,都能用来钉钉子。不用锤子用钳子,那是因为你不会用或用不好锤子。工具间没有冲突。如果两个你都用的得心应手,你就知道做什么工作用什么工具。只是系统级别C更适合而已。信仰级别的讨论经常会持续这么久-_-!
    #Aryang 发表于2008-01-08 16:56:32  IP: 211.97.183.*
    TIOBE 排行榜里c++都被php超过了。。。
    c++还是老老实实的去做GUI&游戏&多媒体吧,别的交给c了
    #chengg0769 发表于2008-01-08 19:30:12  IP: 121.13.54.*
    呵呵。
    我认为用伪代码写程序最好。天马行空,先解决逻辑。再解决实现。写一个循环,写一个遍历,用什么语言重要吗?用什么技巧重要吗?前段最重要。
    #passos 发表于2008-01-11 17:48:51  IP: 124.42.78.*
    TO: 1073X
    >> >> 总在想:“这样固然是可以work了,但恐怕有更好的方案吧,会是什么呢?加个模板参数试试?要么抽象 出一个基类?做一个bridge模式?那么Ownership的问题怎么解决?谁 来负责回收内存呢?移植一个boost::shared_ptr过来吧!可多线程情况下会不会拖慢速度呢?应该不会,可是会碰到循环引用的情况。要么在中 间搞一个weak_ptr把循环链断开?哎呀不行不行,太复杂,别人也理解不了。还是先这样吧,能work就行。”
    >> ===================================
    >> 这倒是很中肯,哪个程序员没有这样的经历。不过这不是哪种语言,哪种设计方法更好的问题,是程序员本身工作方法不正确


    为了解决某种复杂性而引入了一大堆其它的复杂性,我想这个与具体的语言、工具和环境有着很大的关系。为啥在C, Java, C#,Python这些语言里面见不到什么智能指针的东西?

    另外就是所谓的工作方法,例子中提到的问题,很明显是个设计尺度的问题,这种问题我个人认为是个见仁见智的问题,基本无解,全看实际情况。因为工具和语言给你提供了大量的组合对象的设计方法,虽然这种游戏在OO出现之前也有类似的情况,但是OO的出现很明显的在鼓励和发展这种无解的游戏,而C++的语法游戏更是加剧了这种情况的发生。
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 孟岩