很久很久以前,世界上曾经存在着这么一种语言,用它写出来的代码,既能保证高效的运行效率,又兼具优雅十足的美感,并且,所有语言存在着的不足,都可以通过添加新的自定义的类型来实现出来,并且,新的类型,只要做得好,可以与原有的类型无缝交互。在它的世界里面,那是一切皆有可能。并且,它还承诺,虽然它的功能非常丰富,但各个功能特性都可以和睦相处,而且,你代码中不必要用到某项功能时,你完全不必为这项功能付出那怕一丁点的代价,如果这个语言愿意作一点点妥协,可能它就不是现在的这个样子,至少将更加容易使用。所有它承诺的一切,乍听起来美妙无比,而且,它也似乎做到了,真的做到了马儿既能跑,又能吃尽量少的草,前提是开发人员要小心翼翼地用好这门语言的一切特性。只可惜事与愿违,这门语言确实看起来,真的可以创造出完美的东西,但事实上,没有人能用它写出过一个好东西,那怕是简简单单的字符串,要做得大多数人拍手叫好,也是千难万难,完美的字符串,从来就没有出现过。各位同学,自然知道在下说的是什么语言,等千呼万唤的C++1X始出来之后, 真不知道还有什么东西,是C++没法做的,要在C++中增加几种新的编程模式,也不会有太多的困难。起码,函数式的编程,使函数好像成为一等公民,绝不是什么难事。
C++本身自然不会有什么问题,说它复杂吧,它确实复杂,但是完全可以无视,异常不好,禁用就是;多继承很坏,不用就是;模板过于复杂,忘了它吧;……,起码它做到了,你不喜欢的特性,你可以不必付出任何代价。但是,成千上万的C++高手大牛巨侠,这么多年下来,却没有搞出几个似模似样的类库出来,除了STL(其实STL也有一些问题),难道是程序员错了,难道是他们全错了吗?可是,C、JAVA、PYTHON它们,怎么就不存在这些问题呢,里头的好东西还真不少,起码在它们的圈子里面,码农们都觉得类库没问题,很好,用起来很放心,可以放心的使用。又或者是,C++码农对自家的类库要求过高了,他们的眼光太挑剔了,大家人人都有多疑症,但是,一旦他们使用其他的语言,又很乐意使用其他语言所提供的类库或者是框架,怎么就不会那样疑神疑鬼,没有各种并发症,起码在下是这样的,你要说C++没问题,那鬼才愿意相信呢?那么,假如C++有问题,问题又是那里呢?
我以为,C++的问题,就在于它似乎很鼓励码农制造轮子,撰写类库,然后对所写的类库貌似没有过多的要求,但实际上,C++对类库的要求,是所有语言中最高的。好比,要你写的软件,需求很不明确,貌似用户说,你随便写,然后它能完成任务就可以了,但实际上这样的软件最难开发了。知道吗?C++的类库,有什么样的要求:1、运行的效率要高,处理一切细节,高效源于对细节的特定处理;2、表现出来的接口和语义要无限接近原始内嵌的类型,值语义,吖的,这要求也太高了。3、要有足够的通用性,满足抽象的需要。这三条的任何一条都不是什么省油的灯,直接可以K死秒杀多少C++高手的几千万只脆弱的脑细胞。这三条下来,本身就差不多是一个难以完成的事情,但是,这还不是最要命。最能搞死人的,是C++又提供了太多的丰富特性,什么模板、操作符重载、异常、多继承、内联、……,心理学的一项研究表明,当选择太多之时,当事人就会分散精力,不知道如何选择。用C++开发类库,眼前存在着无限种选择,貌似条条大路通罗马,但实际上,却是条条大路是死路。但这也没什么,最后一击,如果没有必要,鬼才愿意费心费神写类库,关键在于C++只是提供实现高标准类库的基本平台而已,语言本身就没有一点点能用的实在的东西,那怕一个简单的字符串类,一切都必须通过类库来完成,它一开始一直都在鼓励码农写类库,试问普天之下,有那个C++码迷,能够抑制造轮子的诱惑,于是,悲剧就诞生了。
反观其他的语言,为什么就不存在这些问题呢?
在C里面,是绝对不会出现C++的类库困境,首先,它只有一种选择让你开发类库,那就是函数和函数指针,外加结构体、数组,或者,必要的时候,使用上点宏,嗯,就只有这么多。你要用就用,不用就拉倒,在这么有限的条件,你只能做出最简单但却又是最精妙的设计,都能直达问题的本质。基本上,C的设计,不会存在一点点多余的抽象层次,一拳一拳,都打在要害上,针针见血。更何况,C的要求也不高,除了效率之外,就是要保持函数接口语义的清晰,而这并不难做到。
那么,在高级语言中,又是另一番天地了。当然,它们也提供了多数C++的丰富特性,你自然有很多选择,但是,这些语义却屏蔽了很多底层的细节,并且提供了丰富的语言平台特性,什么反射啊、丰富的API框架,单是垃圾回收和单继承,就功德无量,足以拯救多少弱小脆弱的灵魂。是的,人家效率确实不太高,也没有要求值语义,但这不要紧,因为人家语言一开始就没有这样的效率标榜要求,它们一上来就让码农直面惨淡的应用,进入问题领域,不需要撰写什么高通用性的类,因为平台本身就提供了,你要写的类,都是问题领域中的东西。这实在能解救多少脑细胞啊,减少多少不必要的工作量啊呢。
没有必要的类库来支持,C++做开发,工作量相当浩大,并且还容易生产出一堆不成熟的通用类;但是,必要的成熟的类库,市面上又没有多少个,目前的所谓的高级的C++类库,大多数都在为了C++而C++,你们知道我在说的是那一个的。当然,俺是没能力写出什么类库的,所谓的眼高手低,大概就是这样吧。
或者,痛并快乐着,是C++码迷的持久不退的热情所在。只是,人生何其宝贵,将它们浪费在C++上,实在有点不值得。当然,活着只要快乐就好,C++也确实能给人带来很多快乐。