【51CTO独家特稿】中国人读“C++”时存在两种读音,一种读作“C加加”,另一种读作“C plus plus”。两种读音似乎都没错,只是遵从不同的标准罢了。如同C++有两种读法一样,目前C++阵营甚至没有一个完整的标准,只有最符合和接近C++标准的编译器GNU GCC 4.6.1和微软的Visual Studio 2010 SP1。C++这个在Tiobe编程语言排行榜中跻身三甲的语言,为何连完整的标准都没有?
C++之父 Bjarne Stroustrup
C++之父Bjarne Stroustrup的简历上只有一句话“C++缔造者”,这样的成就是荣耀无比的。但似乎C++似乎过于低调,让很多C++程序员都没有新消息可以接收。Java有Oracle等大公司推动、.NET有微软推动、HTML 5有Google等推动、包括PHP有众多用户和社区推动,那C++有谁在推动呢?
C++从20世纪80年代面世,经历了以下三个阶段的发展
第一阶段从1980年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;
第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;
第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。
Borland已陨落
相信很多程序员跟51CTO记者一样,在大学里学习过《C++语言程序设计基础》。听着老师们指着谭浩强的《C++程序设计》,不厌其烦的讲解char、int等数据类型的取值范围,指针指向地址取值的问题。在这过程中我们接触的第一个IDE(编译器)是Borland公司的C++ Builder,尽管他已经沦落到被人收购的境地。2009年5月6日,英国软件商Micro Focus宣布,公司将以7500万美元现金收购Borland软件公司,一代软件开发工具先驱者陨落了。
不管我们用的是Borland公司还是微软的VC环境,很少有程序员关心C++的标准和版本问题。我们经常能听到Java或.NET程序员谈论Java 7或者.NET 3.5等版本的新特性,但有谁关心过C++的新版本?
51CTO记者随机对一些C++程序员进行了调查,有50%的程序员表示对开发语言的新版本有兴趣,但不会用到实际工作中。只有当所在公司要求他们统一进化到新版本时,才会使用新版本。有10%的程序员会从繁忙的工作中抽出时间来学习新版本,并独自运用到开发工作中。剩下40%的程序员表示天天加班,根本没有时间看所谓的新版本,到时候现学吧。
这样的调查结果让我们了解了国内程序员对编程语言新版本的态度。从51CTO发布的新闻《掀起C++ 11的神秘面纱》中,我们听到了不少C++的程序员对于C++ 11的悲观论调,甚至预言未来的C++ 11进不了编程语言排行榜的前十。
C++真的老了?
现在最好找工作的程序员是哪一类?根据51CTO编辑在智联招聘网站,以北京地区为范围,搜索到不同开发语言工作岗位数量如下:
PHP | 5212 |
Java | 11824 |
C++ | 9252 |
ASP.NET | 2383 |
可以看出C++程序员的需求是旺盛的,甚至超越了因电子商务而红火的PHP程序员。C++并不因为版本的问题而遭到抛弃,廉颇老矣,尚能饭否的应该是VB这样的语言。因为在智联招聘里,VB这个关键词只有可怜巴巴的827个职位。
看来C++还是很多程序员的饭碗,大家一致用行动证明C++并没有老去,并没有被人所遗忘。只是我们身在C++中,并不太关心它的进步和发展,只要用C++能处理好手头上的工作,哪管C++ 11的未来?
为什么新手不选择C++?
很多新人喜欢Java或者.NET,因为他们开发起来相对简单,甚至说高效。以往C++的优势在于对硬件资源的合理分配,特别是代码行超过三万以后,C++的系统消耗优势更加明显,这也是为什么很多大公司热衷于C++做大型开发的原因。
但随着内存和CPU等硬件设备的降价,硬件资源和性能问题似乎不再成为程序员们考虑的问题。就好像386、486时代的PC用户还要为那几十K的内存优化费劲一样,C++程序员那穷尽极致的节约系统资源,已经被看做是费力不讨好,新手们自然不选择C++了。
其实百度和《魔兽世界》都是C++写出来的。
看C++ 11的新特性
C++没有垃圾回收机制,未来似乎也没有。如果你不小心没管住内存,那么就要对不起了,内存崩溃的情况不是不可能。在Java和.NET都支持垃圾回收之后,C++ 11还是显得有些另类。当然我们也是猜测,这样对内存的精确控制,是不是出于对程序开发更加精确的考虑?
新的C++ 11里将会支持多线程开发,这个与目前多核CPU技术的发展密切相关,能极大的提高C++开发成品的效率。这个新特性应该是与时俱进的改变,还是没有多少创新性。Visual Studio 2010也已经实现C++并行构建的功能。
Lambda表达式也是此次C++ 11标准中最为人诟病的特性,甚至有C++程序员直言“这Lambda太丑陋了,还不如Java,尽管Java的Lambda也是极其丑陋。”也有清醒的C++程序员认为Lambda表达式在大型项目中的应用还是不错的,新的语言机制会带来新的效率,尽管这会有些阵痛。关于Java 7与C#中Lambda表达式的优劣,请点击这里。
借用一位C++程序员的例子来说明Lambda的正面作用,在C++中,STL的很多算法都要求使用者提供一个函数对象。例如for_each函数,会要求用户提供一个表明“行为”的函数对象。以vector<bool>为例,如果想使用for_each对其中的各元素全部赋值为true,一般需要这么一个函数对象,
- class filler
- {
- public :
- void operator ()( bool & i) const {i = true ;}
- } ;
这样实现不但麻烦,而且不直观。而如果使用lambda,则允许用户使用一种直观和见解的方式来处理这个问题。以boost.lambda为例,刚才的问题可以这么解决:
- for_each(v.begin(), v.end(), _1 = true );
面对Java和.NET这样的后起之秀,C++的转身似乎显得慢了一些。在移动开发和WEB应用红火的今天,C++的声音似乎小了一些,希望这次C++ 11的新闻不会被Java 7和HTML 5给淹没了。
C++ 11标准放出,骂的人比捧的人要多。一是认为原有的C++老标准已经满足需要,二是认为新标准加入的新功能让初学者更不能适应。这两种意见有道理,就如同Windows XP已经很方便了,Windows 7全新的操作让很多人不适应一样。
搞C++要有革命热情
一切只能等C++ 11真正出台,让更多的C++程序员用到C++ 11才能有说服力。仅凭媒体放出的一些新特性恐怕还不足以让大家完全了解C++ 11的真面目。51CTO编辑认为,C++ 11能把C++这款“老”编程语言带到一个新的高度,C++还会是排名三甲的编程语言。
【编辑推荐】