C 和 C 是编写大量代码的标志性语言。他们经历了什么道路才成为一体?本文介绍了 C 的出现及其正式标准化的开始。此外,您还将了解 C with Classes 及其最终转变为 C 。
1969。阿波罗 11 号访问月球。 AT&T 贝尔实验室开发了一种我们今天熟知的 C 语言。此时,Unix 操作系统正处于早期开发阶段。
事实上,C 语言继承了 B 语言的主要功能。以及它名字的由来。至于Unix,最初是用汇编语言实现的,甚至没有高级语言的编译器。该项目的开发归因于C语言创建的原因之一。
1971 年,C 语言的编译器和一些实用程序被包含在 Unix 的第二个版本中。 1973 年,Unix 内核主要是用 C 编写的。
Dennis Ritchie 和 Brian Kernighan 于 1978 年 2 月 22 日出版了第一版《C 编程语言》。这本书是第一本广泛使用的 C 语言材料。
图N1 - 《C 编程语言》第一版的封面
从发布到第一个官方语言认证,它已经成为 C 开发的标准。该“标准”被称为 K&R——以作者姓氏的第一个字母命名。
本书介绍了“Hello World”程序作为最小工作程序的示例。 1978 年之后,几乎所有有关编程语言的书籍都离不开这个代码示例。如今,将“Hello World”作为您的第一个程序显示已成为一项既定的传统。
#include <stdio.h> main() { printf("Hello, World\n"); }
K&R 展示了多种语言特性。例如,结构体 - 一组多个变量分组在一个名称下以便于引用,以及 long int 和 unsigned int 数据类型。
带赋值的加法/减法运算符在 K&R C 中也发生了变化。以前,要将值加一,必须编写 a = 1,但此类运算符会让 C 编译器感到困惑。此外,从人类的角度来看,a = 1(加一)和a = 1(赋值)之间的差异看起来相当脆弱。正是在K&R C,这些算子变成了我们熟悉的算子——a = 1.
书中的代码示例采用统一的风格设计,也以创建者姓氏的首字母命名。 K&R 风格以使用八个空格作为主要缩进而闻名(尽管更常用的是四个空格)。它也被称为“内核风格”,因为 Unix 内核就是用这种风格编写的。
#include <stdio.h> main() { printf("Hello, World\n"); }
1979 年 5 月,贝尔实验室员工 Bjarne Stroustrup 开始开发一个系统,该系统将成为第一个 Unix 集群。换句话说,他开始创建一个分布式计算系统,连接到由多台计算机组成的公共网络。
问题是缺乏合适的工具包。在现有的编程语言中,有两种选择可以帮助解决这个问题,但两者都有细微差别。 BCPL 语言速度很快,但不适合大型项目,因为它非常接近低级语言。另一方面,面向对象的编程语言 Simula 适合这项任务,但速度相当慢。因此 Stroustrup 开始实现他自己的基于 C 的语言。
早在 1979 年 10 月,向 C 添加类的 CPRE 预处理器就准备好了。这种语言被称为 C with Classes。人们可以编写程序代码并将其传递给预处理器。然而,它仍然被认为是 C 的扩展。
除了类之外,带有类的 C 的第一个版本还包括:
该语言越来越受欢迎:
但即使有这样的人气,C也只有K&R的不言而喻的水准。编译器的开发人员对该语言引入了许多非标准的更改。这就是代码可移植性问题开始升温的时候。鉴于这一系列问题,第一个 C 标准开始出现。
1983年,美国国家标准协会(ANSI)成立了一个委员会来起草该规范。标准化进程直到 1989 年才结束,当时该语言的第一个标准被批准为“ANSI X3.159-1989:编程语言 C”。同年,《C 编程语言》一书的第二版出版,描述了标准中出现的语言。一年的时间里,该标准经过微小修改就获得了国际标准化组织(ISO)的批准。
图N2 - 《C 编程语言》第二版的封面
除了自 K&R 以来语言发生的一些变化之外,该标准还包括全新的功能,例如函数原型和更复杂的预处理器。该标准还包括对标准库组成的描述。此外,一些之前没有定义的手段被给出了更精确的定义。
1982 年,Bjarne Stroustrup 开始致力于改变 C with Classes 的状态,其创建者称之为“中等成功”。从那时起,开发编译器花了一年的时间。 Cfront 于 1983 年问世。
它的主要功能是将带有类的 C 语言转换为 C 代码。之后,转换后的代码被传递给C编译器。此功能使更多人能够使用该编译器,以及在现有的 Unix 基础设施上使用它。
随着语言的发展,它的名称发生了多次变化。它最初被称为 C84,因为社区简称它为 C。然而,这个名称也具有误导性,因为它更像是一个新的 C 标准,而不是该语言的子集。而这实际上并没有帮助解决以前名字的问题。最终该语言被称为 C ,即 C 和增量运算符。
从带有类的 C 迁移到 C 时,该语言中出现了其他新功能:
至今仍在使用的注释风格在语言发展的这个阶段扎根。该样式也用于其他语言。
这就是C在没有正式认证之前的生活。 Stroustrup 相当迅速地响应了程序员社区的请求。他正在出版代表该语言标准描述的作品。所以,该语言得以维持主要归功于其创建者的努力。
1985 年 2 月,C 的第一个可发行版本发布。同年 10 月,语言创始人 Bjarne Stroustrup 发布了第一版《C 编程语言》一书。
图N3 - 《C 编程语言》第一版的封面
它就像 Kernighan 和 Ritchey 的书《C 编程语言》一样成为 C 语言的第一个默认标准。直到第一个官方标准。
在书中,Stroustrup 从 C 角度涵盖了语言特性和设计问题,并用大量代码示例为每一点增添了趣味。
此后,这本书又重印了三次,每次都有语言更新。在撰写本文时,最新的第 4 版包含 C 11 标准。
1989年7月,Cfront 2.0编译器发布。它与之前的版本相比有了很大的修改,也给C语言带来了新意。
此时,模板已经成为热门话题。没有人怀疑它们会得到实施,因为这是一个现实的目标。至于另一个潜在的突出特性——多重继承——对编程社区的创建者来说是一个真正的挑战。许多人说在 C 中实现多重继承是不可能的。例如,在 Simula 中,由于垃圾收集器不可避免的复杂性,类似的建议被拒绝。然而,多重继承是非常需要的,因为它会大大简化库的开发,如果没有多重继承,库的代码会变得相当麻烦。
所以,Cfront 2.0 终究还是加入了多重继承。这种语言的添加引发了争议。例如,有些人认为,面向对象编程的缩影 Smalltalk 语言不具有多重继承。这就是为什么C当然不应该采用它。语言的创造者认为这种反应是由于过于重视多重继承而造成的。
上面的C版本还介绍了:
1990 年,Borland 发布了 Borland C 集成开发环境,用于开发 C 和 C 程序(真是一个转折,哈?)。它最初是为了在 DOS 下开发,但后来也引入了 Windows 支持。
图 N4 - Borland C 的屏幕截图
从历史上看,Borland C 是 Turbo C 的后代,但融合了 C 的特点——支持面向对象编程。
每个版本的环境都有自己的编译器支持自己的标准。随着时间的推移,Borland C 获得了许多用于快速应用程序开发的专用库。
Borland C IDE 的最后一个版本于 1997 年发布,之后被 Borland C Builder 系列所取代。 Borland C 的终结是在 2000 年,随着带有编译器的 Borland C 5.5 的发布。
Borland C 是一个非常舒适的 DOS 编辑器。甚至还有某种语法着色。
PVS-Studio分析器C和C核心架构师Yuri Minaev
Borland 四年后,微软发布了 Visual C 集成开发环境。
1986 年,Bjarne Stroustrup 写了一篇文章《什么是面向对象编程?》其中他指出了 C 的三个缺陷:
多重继承于 1989 年随 C 2.0 引入,其余缺陷于 1990 年通过新的语言功能得到修复。 Stroustrup 在《Annotated C Reference Manual》一书中对它们进行了描述。
模板和异常处理很快就相继出现。模板于 7 月在西雅图获得批准,异常处理机制于 11 月在帕洛阿尔托获得批准。它们的发布之所以接近,是因为这两项创新都解决了类似的问题。根据语言创建者本人的说法,模板允许您通过扩展静态类型系统的功能来减少程序执行期间的错误数量。而异常允许您处理剩余的错误。
参数化类型早在 C 的第一版中就被考虑过。然而,由于缺乏时间对设计和实施问题进行充分研究,它们不得不推迟。出于同样的原因,例外情况也被推迟。这并不是毫无意义的。他们的设计从1984年持续到1989年。
《带注释的 C 参考手册》还介绍了命名空间以及运行时识别类型的能力。
通用编程从那时开始获得动力。使用模板的 C 并不是先驱。在创建模板时,创建者从 ML、CLU 和 Ada 编程语言中汲取灵感。
但是,可以肯定地说,C 语言正在推广这种范式。在许多情况下,模板使得无需宏即可编写代码成为可能,从而减少了搬起石头砸自己脚的机会。美中不足的是,只有 C 20 才出现了简化泛型编程工作的完整操作功能。但即便如此,当程序员了解到模板可以在编译阶段启用计算时,他们并没有停下来......
另一方面,C 中的异常并不是那么明确。不幸的是,与早期的方法相比,他们并没有解决所有的错误处理问题。使用异常时,控制流变得非常重要。有很多方法会搬起石头砸自己的脚,比如私有继承异常、按值捕获异常、或者以错误的顺序排列 catch 块等。因此,一些编码标准禁止使用它们,例如 Google C 代码风格。
Philipp Khandelyants,PVS-Studio C 和 C 开发团队的团队负责人
《带注释的 C 参考手册》在某种程度上已成为官方 C 标准化的先驱。它描述了所有很快将成为该语言标准的创新。
在这篇文章中,我们介绍了从 1969 年到 1990 年 C 和 C 的历史事件。在下一篇文章中,我们将深入研究从 1991 年到现在的 C 历史:
以上是C 和 C 的历史。第一部分:C语言的产生和标准化。带类的 C 变为 C的详细内容。更多信息请关注PHP中文网其他相关文章!