精英化趋势html
C++ 是一门引发无数争议的语言。眼下最常听到的声音则是 C++ 将趋于没落,会被某某语言取代。我很怀疑这种论调的起点是商业宣传,C++ 的真实趋势应该是愈来愈倾向于精英化。程序员
精英化是指在可用可不用 C++ 的领域中,C++ 将逐渐退出,而全部剩下必须用 C++ 的领域一般都是附加值比较高,难度较高的领域,好比:操做系统,数据库,大型网站后端等。正则表达式
这一过程形成的现象就是在 TIOBE 上,C++ 的份额逐步降低。但就像经济上挤泡沫同样,这倒不是 C++ 衰落了,而是本来人们对 C++ 的指望太高了。数据库
早在1995年,美国的调查机构就曾经预测:“终端用户”编程从从业人员比率上将占94%,而“基础结构”编程从业人员只占1.5%不到。(参见《软件成本估算:COCOMOII模型方法》)编程
C++ 原本就不适合“终端用户”这种涉众不少的项目,好比物流程序,而适合对性能要求较高的基础结构项目,好比 OS,大型数据库等。根据 Google 的测试,C++ 的 performance 远高于其余语言
后端
只是当年 OO 很火的时候,你们又没有什么别的选择,就一窝蜂的用,实际上不少程序确实不适合用一个没有垃圾收集的程序来写。这里有一份统计列表,你们能够本身看看,当前 C++ 的主战场是那里。The Programming Languages Beacon(这个表告诉咱们:IT 行业的骨头是 C/C++ 作的)网络
这致使的结果就是修炼 C++ 的程序员必须往高端走,你要么找不到工做,要么就找到很好的工做。而不像其余语言,太差不差还能混口饭吃。这个趋势很差绝对化,但估计在将来会被强化。TIOBE 上 C++ 的份额跌得越多,这个趋势强化的越厉害。性能
短期彻底看不到 C++ 退出历史舞台的可能性:测试
这两个关键缺陷分别是语言的过分复杂和标准库的过分苍白。网站
1. C++ 语言过于复杂在业界是共识。
一个指针就使 C++ 比关键字数目相同的语言复杂许多,导入模板后各类应用精巧的应用使这门语言进一步复杂化,我的感受 C++ 0x 使这复杂性又升华了。
Google 在公布的 C++ Coding Rule 开篇就说:
As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain.
这里也就很少说了,但贴几个大师的评论:
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." -- Bjarne Stroustrup
(Stroustrup 意思是:C 语言让人很容易开枪走火打到本身的脚,C++ 让走火发生的可能性下降,但一旦走火,你的腿就没了。)
"IMO, good C++ code is better than good C code, but bad C++ can be much, much worse than bad C code." -- John Carmack.
2. C++ 标准库的苍白倒值得多说一点
不知道没用过 C++ 的人是否能想象,这个世界上还有一门语言的标准库里甚至不覆盖正则表达式和 XML。C++ 就这样,而且还将持续这样。我专门查了一下,C++0x 里好像有正则了,但没有 XML 的。(不用提醒,我也知道 boost 里有,但boost 不是标准库。)
C++ 自己不缺库,而且还都是大佬级的,如:OpenCV,OpenMP,ACE,MPICH2 等。随便那一个都是一方诸侯,若是你没用过 OpenCV 和 OpenMP 这些东西,第一次用必定会有点震撼,但关键是标准库不太行。
从这个角度看 C++0x 方向走错了:锦上添花的事作了很多,雪中送炭的事上不太给力。
C++ 语言已经没法简化,若是编译器可以提供可定制编译也许对这个语言会有帮助。好比:设定某个选项后,C++ 变成了有对象的 C。设置某个选项后,多重继承就不支持了。
也许有编译器能够这样,但我确实还不知道。再不行,本身定个规则使用 C++ 的特定子集吧。
==================================
网络摘抄