有人说C++程序是个强大的语言,可以用于做别的语言做不了的工作,但是有人也说C++语言发展到现在,还是以C语言作为模板进化升级而成,C++程序在性能方面最大的威胁可能来自硬件带来的问题。
在计算机行业,50年已经是一个几乎不可思议的时间了;虽然到今年为止,晶体管已有60年的历史。所以,在我问“C++的未来在哪里?”这个问题的时候,实际上是想问在接下来的10年,20年或者30年,C++会有什么变化?
在文章中,Stephan引经据典,提到了Bjarne Stroustrup发布的一篇关于C++程序的论文,和Alexander Stepanov关于C++底层机器模型的访谈。然后他指出,尽管C++作为一门语言一直关注性能的问题。
但根据Herb Sutter在2005年发表的一篇关于并发的趋势以及语言必须演进以迎接这些挑战的论文,由于工艺的限制,底层硬件的发展现在处于一个不稳定的状态。Stephan说:在C++改变最大的核心语言属性列表中,应该包括可变参数模板(Variadic Template)、概念和左值引用(rvalue reference)等。
前两个会使得写模板更加有趣,这当然很好,因为模板是生产高效代码的一个很有力的方法。另外第三个主要面向C++03中最为薄弱的领域之一——复制数值的趋势。一个叫Jared的评论者也同意Stephan的观点,但对.NET能否像C++那么长盛不衰,没有太大的信心:
说得好,但是我相信C++会一直兴盛到2057年。实际上我认为C++会比.NET撑得更久。(我认为.NET最终会因为市场驱动而成为一个技术实体,但不好说)Jim Grow不同意关于托管C++没有像其他.NET语言引起别人注意的论点:看上去C++程序将会被打入冷宫,只有几个顽固不化的分子坚守阵地。
大部分人都已转投.NET编码阵营。因为C++和现代的工具集那么地不合拍,公司和开发人员在无路可走的时候才会选择它。真的好惨,C++本来可以使.NET平台上的一个非常优秀的语言。可悲地是,有些人却别有动机,说.NET开发人员都在使用其他的语言。
Olivier Giroux担忧的是C++内存模型在未来的表现:在单个芯片里同时运行100多个线程的性能,和只运行2到8个的情况是非常不同的,尽管你知道将来的趋势是可以做到的。因为有足够多的线程同时运行,指令就非常充足,你可以将已有的指令全都塞满。很快,阿姆达尔定律(译者注:该定律指出在体系结构的优化设计过程中。
应该挑选对整体有重大影响的部件来进行优化,以得到更好的结果。)就把你牢牢拴在内存接口处。在过去,我们用缓存设计解决这样的问题,但那要比一个超线程负载需要更多的分部一致性。#t#
所以,C++在性能方面最大的威胁可能来自硬件,因为通过C++程序现在提供的内存模型还不容易对其进行相应的编程工作。那么InfoQ中文站的读者对于C++作为一门语言的前景是如何理解的呢?它是会继续昂首上前,还是即将辉煌不再?
C++是个强大的语言,可以用于做别的语言做不了的工作。但是,这种强大功能是有代价的。开始使用C++时,你可能会遇到内存溢出和访问失效等问题,使程序死机。这里用最简短的篇幅介绍C++程序基础。
C++语言本身有专著介绍,这种书还特别厚,所以别指望我能用三言两语说清楚。读者学完本书并使用C++ Builder一般时间之后,最后对C++语言再作更深入的了解。 C++可以最充分地利用面向对象编程(OOP)的优势。
OOP不只是一个新名词,而有它的实际意义,可以生成可复用的对象。新术语 对象(object),和前面介绍的构件一样,是完成特定编程任务的软件块(构件是对象,但对象不全是构件,稍后会解释这点)。
对象只向用户(使用对象的编程人员)显示必须的部分,从而简化对象的使用。用户不必知道的所有内部机制都隐藏在幕后。这一切都包括在面向对象编程的概念中。OOP可以用模块化方法进行编程,从而避免每次从头开始。C++ Builder程序是面向OOP的,因为C++ Builder大量使用构件。
生成构件后(你生成的或C++ Builder内置的构件),就可以在任何C++ Builder程序中重复使用。构件还可以扩展,通过继承生成具有新功能的新构件。最妙的是,构件隐藏了所有内容细节,使编程人员能集中精力充分利用构件。
【编辑推荐】