Bjarne Stroustrup于1979年设计出C++语言,而这一面向系统编程工作的通用型语言已经成为全球各地开发人员的方案之一。尽管面临着来自Java、JavaScript、Python、Go以及苹果刚刚公布的Swift语言的频频冲击,C++仍然保持着稳固而崇高的地位。
  作为摩根士丹利投资公司技术专家兼哥伦比亚大学与德克萨斯农机大学教授,Stroustrup在采访中与我们探讨了C++在当今技术环境下所扮演的角色以及软件开发领域出现的新生事物——包括谷歌的Go与苹果的Swift语言。

  记者:您如何看待C++在当今技术环境下的角色定位?您又如何看待像Python与JavaScript这样的脚本语言与Java甚至是谷歌Go这样的语言?面对数量繁多而又各类各异的竞争对手,C++如何成功在当今多元化生态体系中生存、延续并求得发展?

  Stroustrup:&p;p;这是个好问题。很多人都预计C++语言会在诞生起的二十年后迅速走向消亡,但实际情况是、其仍然保持着旺盛的发展态势。基本上,没有其它哪种语言能像C++这样以卓越的速度表现处理复杂任务。如果大家关注某些嵌入式领域、如果大家接触过图像处理任务、如果大家使用过某些电信应用程序、如果大家涉及到某些金融类应用程序,会发现C++仍然占据着统治地位。当然,如果仅仅将注意力集中在应用程序或者类似领域,各位可能感受不到C++的存在——这些也并不是C++的主要施展平台。相反,谷歌、Amazon、搜索引擎等真正对于性能提出较高要求的领域才是C++的活动空间。

  记者:谷歌的Go语言正逐渐引发业界的高度关注。您对于谷歌Go是如何看待的?

  Stroustrup:&p;p;目前来看,Go似乎属于那些能够在某些特定任务中发挥效果的语言之一。不过一旦太过专注某些特定任务,那么编程语言会在性能表现方面有所牺牲并丧失一部分通用能力。不过当然了,真正的结果还要由时间和市场来验证。

  记者:一部分此类新型脚本语言致力于降低开发人员的使用门槛。您觉得C++是否需要在此之外关注更多其它诉求?

  Stroustrup:&p;p;哦,当然了。C++的设计目的主要面向更为核心的应用程序,而且总是需要与脚本语言或者其它语言配合使用。初开发这款语言时,我的出发点是将C++打造成能够切实带来卓越性能表现的编程方案。此后,我又利用Unix shell作为自己的脚本语言。这是当时我个人的处理方式,也是当下大部分情况下的主流使用方法。C++专门为高性能表现、高可靠性、小体积、低能源消耗等优势而生。我并没有过多关注爱好者或者快速应用开发方面的需求,这也不是C++的关注重点。

  记者:苹果已经于六月二号发布了其Swift语言。您认为在苹果的大力支持之下,Swift是否会成为一款能够吸引开发人员倾情投入的重要编程语言?

  Stroustrup:&p;p;我想是的。开发人员已经在Objective-C身上倾注了大量心力,而如今的Swift语言又会再一次在开发业界内掀起新的高潮。

  记者:我近看到不少关于您新主题演讲的宣传内容。宣传中提到,“C++面临着两大挑战:帮助程序员们解决与性能表现、规模以及可靠性密切相关的迫切任务。它还必须帮助程序员以更高生产效率编写出易于理解的可维护代码。”对于这些问题,您是如何看待的?

  Stroustrup:&p;p;我希望通过这一次主题演讲解释以下两大事实。第一,如何深入有效地提取并利用硬件资源;第二,利用C++ 11与C++ 14中的新机制简化新代码的编写难度。

  今年将有基于这一标准的全新次级版本与大家见面,也是我们之前所提到的C++ 14。目前Clang与GCC已经开始着手进行该版本的发布工作。以我个人的描述,C++ 14真正完善了我们在C++ 11中所作出的尝试。当我们要发布像C++ 11这样的大型产品时,总会有一些特性或者功能无法被及时纳入其中——理由很简单,发布日期是不能妥协的。除此之外,也有不少问题需要在我们将全部组件整合起来并加以尝试后才能被确切发现。而C++ 14的作用正是将那些没能在C++ 11中实现,但却已经具备成熟构想的部分交付给用户。

  相较于我们在C++ 11中提供的lambda表达式,新版本中的lambda具备了通用特性,而且这些匿名函数能够利用语义移动实现捕捉等功能。这些都是纯技术类的内容——函数、返回、类型推导等都与lambda表达式一样实现了改进。其中“constexpr”复合函数——指那些能够在编译时执行的函数——现在能够被轻松包含在For循环当中。我们还提供多种类型的模板,并对内存初始化机制作出了改进。另外,用户定义常量也成为现实。

  记者:您如何看待编程工作中的安全问题?开发人员需要通过怎样的方式尽可能保障其程序成果的安全性?C++在安全性方面又是否超过其它语言呢?

  Stroustrup:&p;p;我对于硬件辅助安全方案非常推崇。从编程语言的角度来讲,如果大家希望编写出一款出色的程序,首先需要在代码中编写类型安全。当然,大家可以通过C++完成这项工作。不要没完没了地摆弄那些低级别功能,也不要完全依赖于那些自己无法确切追踪其进展过程的通用型解释器。基本上,安全是一个系统性问题。

  记者:您对于C++或者当下软件开发领域的其它事物还有什么需要补充的意见吗?

  Stroustrup:&p;p;我们应该致力于在软件开发领域中打造出一整套更为专业的生态体系。在我们的社会生活中,很多关键性组成部分可以说不容有失、而其能否正常运作往往取决于软件的实际表现。我们还需要将自己的系统作为整体加以考量,语言以及相关工作链则是其中的组成部分。我们更需要重视开发人员教学工作中的执行方式,确保对软件可靠性作出充分的强调。