强大、灵活、复杂:C++ 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一。为了找出原因,TechRepublic 采访了 C++ 之父 Bjarne Stroustrup。


C++ 的起源可以追溯到 1979 年,那时编程语言的创造者 Bjarne Stroustrup 第一次开始研究 C++ 这门语言,当时被称为“带类的 C”(C with Classes)。该语言的设计初衷是作为对 C 编程语言的改进,添加了一些基于面向对象编程的功能。


Stroustrup 告诉 TechRepublic 说:“C++ 的成功显然令人吃惊。我认为 C++ 的成功在于其最初的设计目标:高效地使用硬件,再加上强大的抽象机制,并在实际使用反馈的基础上谨慎地改进”。如今,它已经成为最受开发人员欢迎的语言之一,支撑着世界各地的系统和服务。


Stroustrup 解释道:“我想建立一个多计算机系统,它有一个通信系统,既可以是共享内存,也可以是网络。”


“我的重点是软件。我需要编写接近硬件的低级代码,例如内存管理器、进程调度器和设备驱动程序来分离软件组件,以便它们能够在通信方式定义明确的不同计算机上运行。”


在那时,还没有一种语言能够胜任这项任务,因此 Stroustrup 致力于构建一种语言来胜任这项任务。他这样描述这种语言:“带类的 C 应该结合了 C 接近硬件工作的能力和类似 Simula 的抽象和代码组织能力。”


从相当早的时候起,Stroustrup 就认识到,他不能在控制语言方面实行“专制”。尽管早期 C++ 的工作仅仅涉及到他和贝尔实验室(Bell Labs)的几个同事,但当 C++ 语言标准化的努力开始时,这方面的工作才迅速增加到几十人。


如今,C++ 的标准委员会中有大约 400 名成员,以及关注并试图影响该语言发展方向的广大用户社区。


那么,在面对满怀热忱的人们时,该如何使编程语言保持连贯性呢?“这是一个机遇,也是一个巨大的问题,”Stroustrup 说。


“最困难的部分是确定重要内容并保持连贯性。一旦你知道自己想要什么,最终,你就会发现一种很好的技术方法来达到目的。”


记住 Vasa


1998 年,C++ 正式实现了标准化,并成为可靠的主力军。至此,C++ 已成为世界上最常用的编程语言之一,并且一直保持到今天。


Stroustrup 说,正是 13 年后 C++11 的到来,这才为该语言未来的发展奠定了基础。他说:“C++11 使 C++ 感觉像是一种全新的语言。”


“对并发类型的安全支持是必不可少的。C++11 提供了一个密集的网络,其中包含相互支持的功能,如用于编译时计算的(常量表达式)函数、lambdas、自动类型推导以及可变模板。”


尽管 C++11 引入了一些新的特性和功能,使得该语言变得更简单,更快速,更具表现力,但这种语言仍然以难以掌握而著称,Stroustrup 也承认了这一点。


Stroustrup 说:“C++ 确实很复杂,要想学好用好它,需要付出很多努力。不幸的是,人们不只是想要简单,他们还想要某种不可能的东西:一种更简单的语言,拥有更多的特性,并且还不会破坏他们现有的代码。”


Stroustrup 对这个“三难问题”的回应,正如他所说的那样,就是增加一些特性,“让简单的事情变得简单”,举例来说,通过对常见的用例进行泛化或直接支持——同时还要保持兼容性和稳定性。


对于像 C++ 这样的“庞然大物”,或者任何主流编程语言来说,这件事说起来容易做起来难。Stroustrup 解释说,在决定采用哪种新特性还是省去哪种特性方面,达成共识是一个巨大的挑战,需要大量的努力、讨论、时间和耐心。


即便如此,也并不是所有的优秀特性都能被接受。他解释说:“你必须试着只加入那些真正能帮助人们的东西,然后再加入一些这样的东西——因为如果我们接受那些能够帮助人们的特性,语言就会不堪其重而倾覆。”


Stroustrup 指的是Vasa,这是 17 世纪瑞典的一艘大型战舰,由于设计不佳,在处女航时就在斯德哥尔摩港沉没了。


他说:“在国王——最高管理者的坚持下,这艘战舰满载漂亮的雕塑和大炮,这与技术人员的专业判断相悖,造成这艘战舰头重脚轻,结果被一阵风给掀翻了。”


“我反复谈论并撰写关于 Vasa 的文章,来提醒和警告那些渴望通过添加特性来改进 C++ 的人:记住 Vasa!因此到目前为止,C++ 还没有‘倾覆’。”


这么多年来,是什么秘密使 C++ 保持活力?“从小处着手,阐明基本原则,明确长期目标,并根据现实世界中实际使用的反馈进行开发。”


事实上,C++ 在诞生 35 年后,依然保持着强大的生命力。今天的 C++ 远比早期的 C++ 更强大,更具表现力。但即使在今天,最初的设计依然可见。


Stroustrup 说:“40 年前编写的一些简单的程序,到今天还可以运行。”


“对必须工作几十年的语言来说,稳定性是一种重要的特征。实际上,许多早期的想法只有在 C++20 中才能实现。我从一开始就知道,我不可能构建理想的语言,因此我必须以渐进式发展为目标:改进。说真的,我并不相信完美语言的想法:要怎样就算是完美呢?对谁来说(是完美的)?”


他补充说:“为了应对不断变化的世界的挑战,融入新思想,改进是必须的。”


实践中的 C++


截至 2020 年 9 月,C++ 是全球第四大流行的编程语言,仅次于 C、Java 和Python,而且根据最新的 TIOBE 索引来看,它也是增长最快的语言


作为一种通用的编程语言,C++ 以其强大的功能和灵活性而受到开发人员的青睐,这使得它成为操作系统、网络浏览器、搜索引擎(包括 Google 的)、游戏、企业应用等的理想选择。


Stroustrup 总结道:“如果你有一个问题需要高效地利用硬件,同时还需要处理高度复杂性,那么 C++ 显然是一个不错的选择。如果你没有这两种需求的话,那么低级高效的语言或者高级但不高效的语言都是可以的。”


然而,即使 C++ 广泛流行,Stroustrup 也指出,要想准确地确定 C++ 确切的用途和用处,是非常困难的。


“对这两个问题的答案,估计是‘无处不在’,”他说。


“在任何大型系统中,你通常会在低级和性能关键部分发现 C++ 的影子。系统的这类部分往往不会被最终用户看到,甚至不被系统其他部分的开发人员看到,所以我有时把 C++ 称为一切的无形基础。”


同时他也强调了在评估特定编程语言的流行程度时,开发人员调查相对不可靠:“计算程序员的人数既困难又简单。网络调查通常只是测量‘噪音’,也就是说,统计的是人们都在谈论的,而非他们实际使用过的。”


C++ 的未来


如今,Stroustrup 是 Morgan Stanley 的技术研究员。他与国际标准化组织(ISO)合作制定 C++ 标准和 C++ 核心指南的工作,这被认为是他在这家金融巨头公司的角色的一部分,他仍然非常积极地参与 C++ 的开发。


最值得注意的是,Stroustrup 是方向小组的成员,该小组提出并讨论关于编程语言未来的建议。他还关注改进小组,并参与有关新语言特性的讨论。


然而,当涉及到 C++ 的日常运行方面时,Stroustrup 更乐意担任次要角色。“我关注行政工作,但尽量少做。我并不是一个伟大的管理者,”他承认。


在新冠肺炎疫情之前,Stroustrup 会经常四处授课,并通过他的书籍、文章和采访向全世界解释 C++,但和世界其他地方一样,这一工作在 2020 年暂告一段落。


Stroustrup 说:“在我的工作中,我非常依赖于与人们交谈,了解他们的问题,并且倾听我的想法是如何帮助他们的。”


“在这个新冠肺炎疫情期间,我得不到急需的反馈。而虚拟会谈和现实不一样,在讨论设计和想法时,Zoom 会议的效果并不如真正的面对面会议。”


新冠肺炎疫情阻碍了 C++ 编程语言的下两个迭代版本:C++20 和 C++23 的开发。但 Stroustrup 确认,“几乎所有”的C++20 将在 2020 年发布


“除此之外,还有 Unicode、数字、游戏开发和低延迟、工具、人工智能等方面的工作都要去做。”他说。


“当一个特性(语言和库)准备就绪时,我们就会进行发布,并且我们每三年会发布一个修订的标准。已按时发布的有 C++14、C++17 和 C++20。值得一提的是,标准的制定与主要实现者是高度同步的。”


“让 C++ 保持连贯性,并作为一个稳定的开发平台,这一点至关重要。”


作者介绍:


Owen Hughes,ZDNet 和 TechRepublic 驻伦敦记者。


原文链接:


https://www.techrepublic.com/meet-the-team/uk/owen-hughes/