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:网站A和网站B类似,用C++可以让速度提升30%,你感觉这个网站会选择语言的易用性,还是会选择速度?
例2:公司A要开发一个新的软硬结合的产品,你感觉他会先开发一个虚拟机,再开发产品,还是会直接基于硬件上封装驱动后开发程序?
两个关键缺陷
这两个关键缺陷分别是语言的过度复杂和标准库的过度苍白。
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.
C++标准库的苍白倒值得多说一点
不知道没用过C++的人是否能想象,这个世界上还有一门语言的标准库里甚至不覆盖正则表达式和XML。
C++就这样,并且还将持续这样。我专门查了一下,C++0x里好像终于有正则了,但还没有XML的库。
(不用提醒,我也知道boost里有,但boost不是标准库。)
C++本身不缺库,并且还都是大佬级的,如:OpenCV,OpenMP,ACE,MPICH2等。
随便那一个都是一方诸侯,如果你没用过OpenCV和OpenMP这些东西,第一次用一定会有点震撼,但关键是标准库不太行。
从这个角度看C++0x方向走错了:锦上添花的事做了不少,雪中送炭的事上不太给力。
感想
C++语言已经无法简化,如果编译器能够提供可定制编译也许对这个语言会有帮助。
比如:设定某个选项后,C++就变成了有对象的C。设置某个选项后,多重继承就不支持了。
也许有编译器可以这样,但我确实还不知道。
再不行,自己定个规则使用C++的特定子集吧。
分享到:
相关推荐
使用ONNXRuntime部署YOLOV7人脸检测关键点检测,含C++和Python两个版本.zip 代码完整下载可用,确保可以运行。 使用ONNXRuntime部署YOLOV7人脸检测关键点检测,含C++和Python两个版本.zip 代码完整下载可用,确保...
The C++ Standard Library A Tutorial and Reference (2nd Edition)+cppstdlib-code.zip C++标准库(第二版)英文版.pdf 非扫描版+源代码 Prefaceto the SecondEdition xxiii Acknowledgments for the Second...
C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
C++学习笔记......................................
假定读者已经具备C++基本...他在贝尔实验室的软件产品研发部门工作,在这个部门从一开始就使用 C++程序设计语言。近年来致力于大型面向对象系统的开发环境、交付平台以及故障检测他现在是大型面向对象技术项日的顾问。
C++ JSON 序列化与反序列化 相关的博客文章见:http://blog.csdn.net/TragicGuy
《从缺陷中学习C/C++》将通过102个案例,帮助程序员尽快从新手成长为专家。案例涵盖基础问题、编译问题、库函数问题、文件处理、类和对象、内存使用、多线程问题、性能问题等。读者每掌握一个案例就掌握了一个或几个...
C++语言内联函数的引出-宏函数的缺陷
C++球两直线的交点MyPoint setpoint(Line &l,Line &m) { MyPoint p; p.x=(m.b-l.b)/(l.a-m.a); p.y=(l.a*m.b-m.a*l.b)/(l.a-m.a); return p; } 这的MyPoint p; 要加两个参数 而且不能直接用p.x p.y
全书一共8章:第1章从设计思维和应用范畴两个维度对C++11新标准中的所有特性进行了分类,呈现了C++11新特性的原貌;第2章讲解了在保证与C语言和旧版C++标准充分兼容的原则下增加的一些新特性;第3章讲解了具有广泛...
深入理解 C++11深入理解 C++11 非扫描版, 高清文字版
工业缺陷检测基于python检测和C++部署检测实现PCB板缺陷检测源码+项目说明.zip 95分以上大作业和课程设计项目,代码完整下载可用,可作为期末大作业和课程设计,小白可实战。 工业缺陷检测基于python检测和C++部署...
c++ 面向对象缺陷详解,可作有经验人士阅读.
visual c++ DirectX开发游戏 仿CS反恐精英 源代码
Algorithms.in.C++.Part.5.Graph.Algorithms
Win32 API to compare two images(.gif,.jpg,.bmp)
C++两个头文件,一个LIB和一个DLL转换成DELPHI语言
CImageStatic显示位图类 获得图片像素,在重新融合一张图片。 bgbmp = &m_show1.m_bmp; bitmap = &m_show2.m_bmp; pbitmap = &m_show3.m_bmp; bitmap->GetBitmap(&bmpX;... int bitmapSize1 = bmpX.bmHeight * ...
warning: gcc-c++-4.4.7-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY error: Failed dependencies: gcc = 4.4.7-3.el6 is needed by gcc-c++-4.4.7-3.el6.x86_64 libstdc++ = 4.4.7-...
C C++函数手册.CHM,c++标准库函数(cn).CHM,c++库函数(en).CHM css样式表滤镜手册.CHM,css样式表中文手册.CHM,C函数浏览.CHM,C语言函数大全语法.CHM DHTML 手册.CHM,DHTML默认行为手册.CHM,DOM文档对象模型手册.CHM,...