C ++的起源可以追溯到1979年,当时Bjarne Stroustrup着手开发这种语言时,它还被称为“ C with Classes”。这门编程语言设计的初衷,是对C编程语言进行改进,增加了一些基于面向对象编程的功能。
1、C ++会成功我也很惊讶
Stroustrup谈到:“ C ++的成功令人惊讶。我认为,C ++成功的原因在于其最初的设计目标——有效地使用硬件,再加上强大的抽象机制,以及根据实际使用情况的反馈进行谨慎的调整。”
现在,这门语言是最受开发人员欢迎的语言之一,为全球的系统和服务提供支持。
“我想用通信系统创造一个多计算机系统,这个通信系统可以共享内存,或者网络,” Stroustrup解释说。
“我把重点放在软件上。我需要编写底层的,接近硬件的代码,比如内存管理器,进程调度程序和设备驱动程序,来分离软件组件,以便它们可以在沟通方式定义明确的独立电脑上运行。”
然而,当时没有任何一门语言能胜任这项工作,因此Stroustrup决定自己创造。他这样描述这种理想中的语言:“ C with Classes应该具备C语言接近硬件的能力,并且有与Simula类似的抽象和代码组织能力。”
从很早的时候开始,Stroustrup就意识到自己对这门语言没有什么独裁统治的控制权。早期的C ++工作只有他和Bell Labs的几个同事在搞,直到语言标准化开始后,这个数字才激增到几十人。
如今,C ++标准委员会大约有400名成员,并发展了更广泛的用户群体,他们是这门语言的追随者,同时也尝试影响它的发展方向。
那么,大家对C++如此热情,如何保持这种编程语言的连贯性呢?“这是一个机遇,也是一个巨大的问题,”Stroustrup坦承。
“最难的是找到重点所造并保持连贯性。一旦知道了自己想要的东西,最终就会找到一种很好的技术方法来做到这一点。”
2、记住Vasa
1998年是C ++正式标准化的一年,也奠定了它的地位。至此,C ++已成为世界上最常用的编程语言之一,并保持至今。
但Stroustrup认为,直到十三年后C ++ 11的到来,才为这门语言的未来发展奠定了基础。他说:“ C ++ 11使C ++感觉像是一种新语言。”
“对并发的类型安全的支持是必不可少的。C++ 11提供了一系列相互支持的功能,例如用于编译时计算、lambda、自动类型推导和可变参数模板的[恒定表达式]函数。”
尽管C ++ 11引入了一些使语言更简单、更快和更具表现力的新特性和功能,但却没有改变这门语言很难学的事实。Stroustrup也承认这一点。
“ C ++确实很复杂,很好地掌握它需要付出很多努力,”Stroustrup说。“不幸的是,人们不只是想要简单,他们还想要一些不可能的东西:一种更简单的语言,具有更多的功能,但不会破坏现有的代码。”
Stroustrup对这种“困境”的回应,是C ++添加了一些功能,这些功能“使简单的事情变得更简单”,例如,不仅支持常见用例,同时又保持兼容性和稳定性。
对于像C ++这样的“巨兽”或任何其他主要编程语言来说,做到这件事都是说起来容易,做起来难。Stroustrup解释说,最大的挑战之一是,就决定采用或忽略哪些新功能达成共识,这本身就需要大量的讨论、时间和耐心。
即使那样,也并不是所有好的功能都可以被采用。他解释说:“我们必须抉择,增加那些真正对人们有帮助的功能,而且很不能过多,要是所有有用的功能都添加,语言就会因不堪其重而沉船。”
就像Vasa一样。这是一艘17世纪的瑞典大型战列舰,由于设计欠佳,在首航时这艘巨轮就沉没在斯德哥尔摩港口。
“在最高管理者——国王的坚持下,没有采纳技术人员更专业的判断,它满载美丽的雕像和的沉重的枪支。因为超重,一阵风把它掀翻了。
“我反复谈论、写到很多有关Vasa的内容,来提醒和警告那些热衷于通过添加功能来改进C ++的人,请记住Vasa!所以目前为止,C ++还没有崩溃。”
在Stroustrup看来,这些年C ++的生存之道是什么?“从小处做起,阐明基本原则,明确长期目标,并根据实际使用情况的反馈来改进。”
确实,C ++诞生已经超过35年了。今天的C ++比早期的C ++更加强大和富有表现力。但是,直到今天,原始设计的痕迹仍然保留到现在。
Stroustrup说:“如今,仍有一些40年前的简单的程序至今还在运行。”
“对于使用了数十年的系统来说,稳定性是一种重要的语言功能。事实上,许多早期的想法只有在C ++ 20中才可用。从一开始我就知道没办法创造一门理想的语言,所以我必须以渐进发展为目标。老实说,我不相信存在一种完美的语言的想法。怎样就是完美了?对于谁来说?
他补充道:“改进是应对世界变化带来的挑战和吸纳新思想的必要条件。”
3、实践中的C ++
截至2020年9月,在全球范围内,C ++是仅次于C、Java和Python的第四大流行编程语言。根据最新的TIOBE索引,它也是增长最快的编程语言。C ++是一种通用的编程语言,由于其强大的功能和灵活性而受到开发人员的青睐,这使其成为操作系统、Web浏览器、搜索引擎(包括Google)、游戏、商业应用程序等的理想选择。
Stroustrup总结道:“如果你有一个问题,需要高效使用硬件,并且要应对高复杂性,那么C ++显然是个好选择。如果你并没有这两个需求,那使用低级但高效的语言,或者采用高阶但并不高效的语言就能做到。”
然而,虽然C ++这么受欢迎,但Stroustrup指出,很难准确指出C ++确切的用途和用处。
他说:“对这两个问题的答案,估计是'无处不在'。”
“在任何大型系统中,通常会在较低级别和对性能至关重要的部分中看到C ++的身影。而这些系统部分,一般终端用户,甚至系统的其他部分的开发人员都看不到。因此,有时我把C ++当作是一切的看不见的基础。”
他还强调了开发人员调查在评估编程语言的普及度方面其实并不那么可靠:“我们很难计算程序员的数量。Web调查通常只是计算一些“噪音”;也就是说,统计的是大家都在谈论的,而不是实际用过的。”
4、C ++的未来
现在,Stroustrup是摩根士丹利的一名技术研究员。在这家金融巨头中,与C ++标准的国际标准化组织(ISO)和《 C ++核心准则》的合作是他工作的一部分,但他仍重度参与C ++的开发。
最值得注意的是,Stroustrup还组织了一部分编程语言方向指导小组,这个小组会提出并讨论有关编程语言未来发展的建议。他还是改进小组的一员,参与有关新语言功能的讨论。
但是,在C ++的日常运行方面,Stroustrup更愿意扮演幕后角色。他承认:“我会参与管理工作,但尽量少做。我不是一个很好的管理者。”
在新冠爆发之前,Stroustrup会花很多时间四处传授知识,并通过他的书、文章和访谈向全世界介绍C ++。但由于新冠,这样的生活暂告一段落。
“为了更好地工作,我非常需要通过交流来了解大家遇到的问题,并尝试用我的方法帮助他们,” Stroustrup说。
“因为新冠疫情,我得不到我急需的反馈。线上交流毕竟和现实不同,在讨论设计和想法的时候,Zoom会议不如面对面的效果好 。”
COVID-19爆发也阻碍了C ++语言的下两个迭代版本——C ++ 20和C ++ 23的发展,但Stroustrup确认,“几乎所有”的 C ++ 20都将在2020年发布。
“除此之外,还有关于Unicode、数字、游戏开发和低延迟、工具、AI等方面的工作需要做。”他补充道。
“时机成熟后,我们将推出一项功能(语言和库),并且每三年发布一次修订的标准。C++ 14、C ++ 17和C ++ 20会按时交付。值得注意的是,C ++的标准制定工作与主要系统的进展基本是同步的。
“让C ++保持连贯性,并作为一个稳定的开发平台,这一点非常重要。”