1.1.1 C语言的诞生
C语言是由著名的计算机科学家Dennis Ritchie创造的,其历史可以追溯到ALGOL 60。ALGOL 60,也称为A语言,是纯粹的面向描述计算过程的语言。虽然A语言并没有被广泛使用,但它引入的分程序结构、递归、动态、局部性概念等思想,对后来的程序设计语言影响深远。1963年,英国剑桥大学在A语言的基础上设计了CPL(Combined Programming Language)语言。CPL语言比ALGOL 60更接近硬件,但由于过于复杂而难以实现。1967年,剑桥大学的Martin Richards简化了CPL,设计了BCPL(Basic Combined Programming Language)语言。
C语言的直接前身B语言就是从BCPL发展而来的。1969年,Dennis Ritchie和另一名计算机科学家Ken Thompson在贝尔实验室从事DEC PDP-7计算机的研究。Ken Thompson为DEC PDP-7计算机设计了一个操作系统软件,也就是最早的UNIX操作系统。当时,在DEC PDP-7上写程序很困难,只能用很底层、很高深的汇编语言。汇编语言依赖于计算机硬件,编写的程序不具可读性和可移植性,而且难以调试。
Ken Thompson最初设计的UNIX操作系统就是用汇编语言编写的。为了克服汇编语言编写效率低下的缺点,Ken Thompson在BCPL的基础上设计了一种高级程序语言,并把它命名为B语言。B语言是一种无类型的语言,更加便于编写系统软件,它直接对机器码操作,这一点和后来的C语言有很大不同。作为系统软件编程语言的第一个应用,Ken Thompson还使用B语言重写了其自身的解释程序。但是B语言仍然过于简单,因为它采用解释模式而非编译模式。这些设计缺陷,使它在内存的限制面前一筹莫展。
在1972年—1973年间,Denis Ritchie改进了B语言,为其添加了数据类型的概念,他将原来的解释程序改写为可以直接生成机器代码的编译程序,并将其命名为C语言。C语言既保持了BCPL语言和B语言精炼、接近硬件的优点,又克服了它们过于简单、缺少数据类型等缺点。最初的C语言只是为了描述和实现UNIX操作系统而设计的。1973年,Ken Thompson和Denis Ritchie在PDP-11机上用C语言重新改写了UNIX操作系统的内核,即UNIX第5版。
此后,随着UNIX操作系统的日益推广,C语言的突出优势引起了人们的广泛重视,开始有人研究如何把C语言从UNIX操作系统移植到其他系统中。1977年,不依赖于具体机器的C语言编译文本《可移植C语言编译程序》的面世大大简化了C语言移植到其他系统的工作。C语言的易移植性也进一步推动了UNIX操作在其他机器上的实现。随着UNIX操作的广泛使用,C语言也得到更快的发展。现在,C语言已成为用途最为广泛的计算机高级语言,不仅可以用于编写系统软件,还可以用于构建各个领域的应用软件。