专访Andrei Alexandrescu:对C++要有信心 保持乐观[转]

来源:互联网 发布:淘宝增加权重 编辑:程序博客网 时间:2024/05/18 22:45

Come from :   嵌入式在线   2007-12-04 

 

Andrei Alexandrescu先生日前接受了相关媒体的专访,我们就C++当前情况和与其它语言的比较以及发展前景进行了深入的讨论。总的来说,Andrei Alexandrescu先生号召C++程序员要保持乐观和信心,继续努力开发优秀的软件。

        采访嘉宾简介:Andrei Alexandrescu是新一代C++天才的代表人物,他创造力非凡,思维方式不循常理,剑走偏锋,却往往能收到奇效;善于在各种“标准”中游走,发现提升空间,有“庖丁解牛”之功力。其他身份:华尔街咨询师,摇滚乐队鼓手,古典吉他演奏家,罗马尼亚伞兵。

        2001年,Andrei撰写了开风气之先的经典名著《Modern C++ Design》,由于其中对Template技术的精湛运用,该书震撼了整个C++社群,开辟了C++编程领域的“Modern C++”新时代;2005年,Andrei与C++标准委员会主席Herb Sutter合作的是《C++ Coding Standard》则回归朴实,将C++社群二十多年积累的宝贵智慧汇集于一本薄薄的小书之中。Andrei陆续发表了多篇思想深邃、技术精湛的文章,更开发了若干富于高度技巧性的软件和程序库,得到了整个C++社群的广泛尊重,被Scott Mayer列入五位最重要的C++开发人员之列,公认为C++领域最顶尖的一位天才人物。当人们感叹于他对于问题缜密清晰、透彻入里的思考能力和匪夷所思的创造力时,他已经把眼光投向了当前系统编程领域中最热门的话题:并行编程和D语言。

        Andrei Alexandrescu日前接受了51CTO记者的专访,就C++当前的情况进行了广泛而深入的讨论,他号召C++程序员保持乐观和信心,继续努力开发优秀的软件。在整个采访过程中,Andrei Alexandrescu给出了C++五大方面的看法。

        前段时间,Linux之父对C++进行了炮轰,说它是糟糕程序员的垃圾语言,可谓是一石激起千层浪,引起众多程序员朋友的关注和讨论。51CTO网站还特别制作了专题“C++是垃圾语言?!”,博引国内外专家的正反观点,引发网友的激烈讨论。从我们网友投票结果中对“您认为Linux之父为什么要对C++进行炮轰呢?”的原因分析里,认为“Linux之父之前在C++编程上吃过大苦头”占到最多的37%的比例。我们就先以这一事件作为引子,请教Andrei Alexandrescu先生对这一事件的的态度来开始我们的对话。

        1、Linux之父炮轰C++语言事件

        Andrie Alexandrescu先生首先肯定C++很好,希望程序员不要对它失去信心和乐观。因为Linux之父Linus Torvalds是天才级人物,擅长C语言,作为出色的程序员,可以和最高水平的团队一起工作,从他的技术能力角度来说,C++是不必要的,因为他使用C语言就可以做到他想做的所有事情。可是,这也有一个限制。因为对于不同的项目,不同水平的人会有不同的选择。在你做大项目时,需要和其他不同水平的人合作,那些C++相比C多出来的特征,如面向对象和模板,就变得很必要了。

        另外,对于天才级的程序员,他都会钟爱于自己使用的工具,所以,我们可以理解他前面提到的那种对待C++的态度。

        2、C++是带有心智包袱的语言

        对于C++带来的对一个程序功能实现的多种可选择的处理方式,增加了程序员的心智负担方面,Andrei Alexandrescu先生解释说因为C++是基于C语言的基础逐渐发展起来的,它的这一自身限制使它无法去除C语言的负担,不可能达到精致的设计,实现对每个问题有一个确定答案。确实是C++如果没有C语言的负担,就不会增加这么大的心智负担。比较幸运的是,C++拥有很强的惯用法,同时,在我们的社区存在大量成熟的经验可以供大家参考!C++的那些惯用法和C语言对等的功能相比起来,功能要强大,具有很强的抽象性和性能效力。一旦你掌握了这些惯用法,成为出色的程序员,肯定要比那些只会用C语言的程序员要更具有竞争力。其实,这也符合一个规律,当你实际上需要更多的特征时,就需要承担更多的东西。

       从我们的网友投票结果来看,“您认为要不要学习C语言呢?”的结果中“当然要,C语言是入门必学的基础语言”的支持率是66%,可见C语言拥有良好的群众基础。

       3、C++与其他语言的比较

       C++目前处于一种被夹攻的态势,一方面在企业级系统开发(数据密集、业务规则复杂多变)中,C++已经基本被Java和C#等淘汰出局,另一方面在系统编程和嵌入式等更接近硬件的领域,又遭到C的强烈狙击。那么,Andrei Alexandrescu先生是如何看待C++与其他语言的比较呢?

       当然,C++相比于10年、20年之前,它的应用领域确实是狭窄了,这是事实。但是,如果在你的应用中,有两个需求同时发生,你就必须要考虑采用C++,第一是对性能的要求要高,还有一个是有很强的抽象和建模能力。这两种能力,很多语言只具备其中一个,比如C语言和Phyhon有性能,而Java和C#有很强的建模能力,还有Ruby、Leda等。但是,目前同时具有这两种能力的,只有C++。

       在C++与其他语言的比较上,Andrei Alexandrescu先生给出了一个非常有趣的回答(这个比喻的讲解援引于另一个C++的作者Scott Douglas Meyers的说法)。让我们换种角度来看,哪种语言写出来的软件最挣钱?你可以看到世界上最挣钱的程序可能是微软的Office,这个程序是用C++写的。其次是微软的Windows,实际上也是用C++写的。而Java和.Net在企业级应用这块,只是为了把这些软件卖出去,所花的市场经费最多。而且,他认为用C++写出的软件最挣钱这件事上,在他所能预见到的未来不会发生变化。

         4、C++Ox标准的制定情况

        根据记者的了解,C++标准委员会主席Herb Sutter透露,C++0X的草案将很有可能在07年10月完成。可是现在快到年底了,仍然没有任何的消息。作者籍此机会向Andrei Alexandrescu先生了解C++标准委员会的工作进展情况。Andrei Alexandrescu先生表示一直在跟踪这一标准的制定。整个标准委员会也一直都在积极工作,因为很多人都会牵扯之中,很耗时。截至目前,所有主要、重要功能已经出来,标准肯定是一个往前推进当中,但是并不能承诺今年或者明年会出来。

       看来,我们还是要耐心的等候一段时间了。

        新的C++标准主要在四个方面对C++标准进行了扩充:

       ◆增强STL库,标准库TR1和TR2中的新组建,比如“正则表达式”
       ◆并发内存模型和并发库(面向多核处理器)
       ◆垃圾收集器
       ◆可简化的泛型程序的开发

       在这些新制定的标准中,Andrei Alexandrescu对两个特征比较喜欢,一个是editor template里可变参数的模板,它是在参数后面打几个点,这样可以不必强调类型名。另一个是O2的关键字,它可以大大的简化代码,可以自己编译、推导,不需要程序员自己写很多的代码。这样大幅度提高了代码的可维护性,比如它不需要在很多地方强调类型的名字,只需要在一个地方放这个类型的签名,然后改动一个地方,其他地方就可以相应的改变。这有点类似于引进动态语言的特征。

       另外,还有一个是概念的特征,现在标准委员会还没有确定是否可以进入标准。因为它可以使模拟实现脱离繁琐,当然希望它可以进入标准。但是相比较而言,它没有第一个特征提到的那个可变参数有用。

       5、C++还是C++吗?

       随着51CTO记者对C++新标准中功能的理解,就有了这样的疑问。比如有了垃圾收集器的C++,并且所有内存和指针操作都被建议用STL代替,那还是C++吗?之后还会有什么新的内容,会不会有一套GUI库?如果是那样的话,是不是就成了Java了?

       接着,Andrei Alexandrescu先生的回答打消了我的顾虑。C++中的新功能,比如有迭代词替换指针,还有智能指针帮你管理内存,这是很好的功能。如果你不想要这些功能,你也可以自己去管理那些底层的东西,比如指针等细节的东西。结论就是你可以两个都有,既可以使用高级的性能,也可以做底层的东西。这样对程序员来说,就变成好事情了。

       6、兼顾D语言

       D语言是一门新兴的语言,国内的好多程序员对它不是很了解。我们请D语言的领袖人物之一Andrei Alexandrescu先生简单介绍它的适用范围和它存在的与其他语言间的差别。

       D语言首先是一个系统级别的语言,然后是具有很多动态语言特征的静态语言。它有很多的特征可以提高你编程的效率,比如模块化特征,很强的系统开发能力等。

       备注:D语言由著名的语言设计和实现专家Walter Bright创造,是一个集废料收集、手工内存操作、契约式设计、高级模板技术、内嵌汇编、内置正则表达式、内置单元测试、Mixin风格多继承、类Java包管理机制、内置同步机制、内建运行时信息于一身的系统级语言。与当今出现的其他高级语言不同,D语言的定位是系统编程语言,它的目标是既要C语言的强大威力,又要Python和Ruby的开发效率。

       7、未来的计算机语言发展方向的展望

       本次专访我们都是围绕着编程语言展开,我们在这里也请Andrei Alexandrescu先生帮我们展望下未来计算机语言的发展方向。

       Andrei Alexandrescu先生认为未来的时代会是一个多核的时代,一个CPU上有很多核,不止几个核,而是有几百上千个核,这就可能从根本上改变我们编程的想法。在那个时代里,我们所说的函数式语言将会卷土重来,因为在函数式语言中做并行计算会变得很轻松、容易。这个会是一个很重要的趋势。总的来说,这是一个很难回答的问题。

原创粉丝点击