`

转- C++的精英化趋势与两个关键缺陷

c++ 
阅读更多

 

精英化趋势

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++的特定子集吧。

 

PS:补充一个事儿。

看了国外的那张国外主要产品和开发语言的列表后,我挺想做张国内产品和开发语言的列表,也算为毕业生做点贡献。

免得大学就整错方向,所以那位要知道腾讯,迅雷,阿里等公司的后端开发语言,不妨回在下面,我整理后单独发个帖。

知名产品和开发语言的表格在这里。

(这应该不是公司机密吧)

分享到:
评论

相关推荐

    Dev-C++ 6.0(更名为Smart-C++ 1.2.5.174)

    总的来说,Smart-C++ 1.2.5.174是面向编程竞赛者的一款定制化IDE,它集成了多种实用工具,并对Dev-C++的基础功能进行了强化,旨在为参赛者提供一个高效、便捷的编程环境。尽管它的发布违背了原作者的意愿,但其对...

    Dev-C++ 5.11最新版本

    其与TDM-GCC 4.9.2 的结合,确保了对现代C++特性的支持,同时保持了软件的易用性和性能。通过"Dev-Cpp_5.11_TDM-GCC_4.9.2_Setup.exe"这个安装文件,用户可以轻松地将这款强大的IDE安装到自己的Windows系统中,开始...

    gcc-c++-3.4.6-3.1.x86_64.rpm

    gcc-c++-3.4.6-3.1.x86_64.rpm

    gcc-c++ rpm 安装包

    非常罕见的gcc-c++ rpm安装包,不用编译

    Dev-C++ 5.2.0.3

    新版的Dev-C++,已经修复了CPU 100%占用、卡死等Bug。但仍有一个Bug:从某一文件打开Dev-C++时,只能使用英文界面。下载之前请注意。

    Dev-C++ 5.4.0 - 最新版

    Dev-C++是一个C++开发工具。这是最新版的,比以前版本在使用上更方便一些了。

    Dev-C++ 5.1.0.0

    Dev-C++ IDE 的最新版本,有兴趣的朋友可以下载体验一番 :)

    Dev-C++/C编译器

    这样,用户可以在命令行中直接调用这两个编译器,而不必每次都通过Dev-C++ IDE来运行。这一步骤涉及找到编译器的安装路径,然后将其添加到系统的PATH变量。这使得开发者可以像在Linux环境下一样,从任何目录下运行...

    compat-gcc-c++-7.3-2.96.128.i386.rpm

    compat-gcc-c++-7.3-2.96.128.i386.rpm

    gcc&gcc;-c++4.8version

    对于“gcc&gcc-c++-4.8version”这个压缩包,用户可以期待找到与GCC 4.8相关的RPM包,用于在系统上安装这个特定版本的C和C++编译器。 要安装这些RPM包,首先需要确保系统中已经安装了RPM工具。然后,可以通过以下...

    gcc-c++-4.4.4-13.el6.x86_64.rpm

    gcc-c++-4.4.4-13.el6.x86_64.rpm

    gcc-c++-3.4.6-10.i386.rpm

    Linux下的gcc,RPM格式,共享资源

    c++ UTF-8 UTF-16转换

    总的来说,C++中的UTF-8和UTF-16转换涉及到了字符编码、内存管理和错误处理等多个方面,理解这些知识点对于开发跨平台的软件或处理国际化文本是非常重要的。在实际应用中,根据项目需求选择合适的转换方法,并充分...

    gcc-c++-4.1.2-54.el5.x86_64.rpm

    gcc-c++-4.1.2-54.el5.x86_64.rpm

    gcc-c++-4.4.7-3.el6.x86_64.rpm

    gcc-c++-4.4.7-3.el6.x86_64.rpm

    钱能- c++程序设计教程习题答案

    C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。它的设计思想是基于C语言,并在其基础上增加了类、模板、命名空间等面向对象特性,同时也引入了异常...

    LeetCode---C++实现

    《LeetCode---C++实现》是一本专注于C++编程语言解决LeetCode在线判题平台上的算法问题的书籍。LeetCode是程序员广泛使用的平台,它提供了大量的编程题目来提升编程技能和算法理解,尤其对于准备面试的程序员来说,...

    Google-C++编码规范中文版(最新整理PDF版)

    Google-C++编码规范中文版详细涵盖了编写高质量C++代码的规则和建议,它为开发者提供了一个清晰的编程风格指南,以便在Google开源项目中使用。规范内容详尽,从文件组织、命名规则到代码风格,从语法细节到注释习惯...

    GBK与UTF-8转码(C++)

    ### GBK与UTF-8转码(C++) #### 知识点概述 本文将详细介绍如何在Microsoft Foundation Classes (MFC)环境下实现GBK与UTF-8之间的编码转换。该技术适用于那些需要处理不同字符集数据的应用程序开发场景,特别是在...

    数据结构算法与应用-c++语言描述(代码与习题答案)

    《数据结构、算法与应用:C++语言描述》一书深入浅出地讲解了数据结构的基本概念,包括线性结构(如数组、链表、栈和队列)、树形结构(如二叉树、堆和Trie树)、图结构以及查找和排序算法。书中还探讨了动态规划、...

Global site tag (gtag.js) - Google Analytics