Bjarne Stroustrup 在剑桥读博的时候,需要实现一个「分布式的操作系统」。他回忆起自己在丹麦读大学的时候就用过 Simula,认为 Simula 的一些特性比如「类型表达」、「编译排错」能力以及「类」和「协程」都很有吸引力,于是选择 Simula 语言作为工具来实现这个系统。
结果他实现的系统慢得不能接受,为了能按时毕业,他只好用 BCPL 重写了那个程序。他也在那时暗下决心,之后要是没有顺手的工具,他再也不会去处理类似这种的问题。当然他也对顺手的工具做出了定义,它应该:
- 具有 Simula 这种对程序组织的支持——某种形式的类分层结构,对并发的某种支持以及基于类的静态检查。
- 运行得像 BCPL 一样快
- 支持高度可移植实现
毕业之后,他来到了贝尔实验室。工作过程中有一个需求是要去分析 Unix 内核,然后把它部署在一个局域网上。这时候他面临了两个问题,一是如何分析因为内核分布造成的网络流量,其次是怎么将内核模块化。
那时的他也更明确了自己所描述的语言会以什么样的形式诞生,他形容这种语言是『带有 「Simula 类」的「Algol 68」』。但他坦言,如果要构造以及实际工具,C 还是稍微比 Algol 68 要合适一些,因为在当时,C 语言可以用到当时几乎所有领域,同时程序员可以用 C 语言有效地利用硬件资源,并且在当时已有可用的 C 编译系统和标准库,以及一些相关的工具,所以在灵活性,高效性,可用性和可移植性方面,C 语言都当仁不让。这也是为什么 C 成为了 C++ 的母语言。在实现新语言的过程中,BS 最初的需求是:可以像使用 Simula 一样使用 C,让程序员去描述类型。于是他采用了 Simula 中的术语 Class 来让 C++ 支持定义类型。