跳转至

2 C++ 的诞生

约 783 个字  预计阅读时间 3 分钟

2.1 Simula的优点及缺陷

C++ 他爹 Bjarne Stroustrup 上学的时候用 Simula 写了个模拟器。他写得十分开心, 因为Simula 提供 (class) 的概念;
这使得他能把具体问题中的概念直接映射到语言结构中,从而提供非常好的可读性。

他提到,Simula 的类、协程 (coroutine) 和广泛深入的类型检查非常有助于编写大规模的程序;这些特性使得代码的可维护性并没有随着代码规模增加而降低。整个程序更像是若干小程序的组合,因而更容易写、理解和排除错误。

Info

这里提到的「类」会在下一节具体讨论;「协程」的讨论可能会更晚一些。

但是,当BS写完代码后,他发现代码根本跑不起来。这是由于Simula的性能很差,其编译和链接很慢,运行时的表现也因为广泛存在的运行时类型检查、动态内存分配、垃圾回收 (GC) 等等而非常差。因此他不得不用BCPL重新写了一遍他的模拟器;

这次经历给他留下了深刻的心理阴影。他发誓:

在没有合适工具的情况下绝不去冲击一个问题。

2.2 BS 对合适工具的理解

  1. 类似 Simula 的对程序组织的支持(面向对象)。
  2. 编译、链接、运行应当像 BCPL 一样高效。
  3. 应当保证良好的可移植性。

而在当时,C 语言灵活(通用)、高效,各种平台都有 C 编译器,因此可移植。因此,BS 在各种系统程序编程语言中比较喜欢 C。

他后来指出,希望 C++ 一方面能够像 C 一样接近机器,另一方面又能接近需要解决的问题。

2.3 C++的诞生历程

2-birth-1.png

2.3.1 C with Classes

flowchart TD
A[1981/12: 设计了 C with Classes 及预处理程序 Cpre,</br>来将 C with Classes 处理成 C </br> 其中的名字「class」来自 Simula]
--> B[1982: C with Classes 是成功的,但是不完全成功]

为什么说C with Classes成功呢?
因为它确实很有用,而且有不少人用,从而也能支持维护成本。
那为什么说它不完全成功呢?
因为用的人又不够多,因此不足以支持一个开发组织,这会使得BS本人被迫个人长期维护C with Classes。

因此他决定基于在 C with Classes 的经验,开发一种新的、更好的语言。经过一些讨论和发展,这门语言被命名为 C++。

2.3.2 从设计一个工具到设计一门语言

C++ 不能带有特别复杂的编译的或运行时的 feature,同时必须能使用原来的链接器,并且产生的代码一开始就要和 C 的一样高效。

2.3.3 C++ 的诞生

flowchart TD
A[1984/8: Cfront Release 1.0 </br> 一个完整的编译器前端,</br>负责对 C++ 程序进行语法和语义的分析和检查</br>源代码会先通过预处理器 Cpp 完成预处理,</br>然后交给 Cfront 检查并生成 C 代码。]
--> B[1989: Release 2.0]
--> C[1991: Release 3.0]
--> D[标准化: C++98, C++03, C++11, C++14, C++17, C++20 ...]

2.4 小结

C++ 能够作为一种「高级汇编语言」,即在不付出额外的运行时间和空间代价的前提下支持必要的抽象。

  • 「好的低层程序设计语言」: better C

  • 「直面高层系统程序设计的要求」: 适应程序迅速增长的规模和复杂性

评论