
1.3.1 C和C++简史
在第2届程序设计语言的历史(History of Programming Languages)大会[Bergin 1996]上,Dennis Ritchie发表了C语言的发展(The Development of the C Language)演讲。C语言是在20世纪70年代末期作为UNIX操作系统的实现语言而开发出来的。C语言源于无类型语言B语言[Johnson 1973],而B语言则源于BCPL(Basic Combined Programming Language,基本组合编程语言)[Richards 1979]。BCPL语言是由Martin Richards于20世纪60年代设计开发的,并且在20世纪70年代早期的一些项目中得到了使用。B语言可以看成是无类型的C语言,或者更准确地说,是BCPL语言被浓缩于8KB内存中的版本。
《The C Programming Language》一书(也就是通常说的“K&R”)[Kernighan 1978]最初于1978年出版。该书出版前后的一段时间里,对语言的改变主要是在移植性方面,这也是把代码移植到Interdata8/32计算机上的结果。那时候,C语言仍强烈地表现出其无类型的血统。
ANSI于1983年夏季成立了X3J11委员会。ANSI这么做的目的在于“将现有的通用的C语言的定义进一步形式化,形成一个清晰的、稳定的和无二义性的标准,以增强用户程序在不同的C语言环境中的移植能力”[ANSI 1989]。X3J11在1989年年底发表了一份报告,该报告随后被ISO(the International Organization for Standardization,国际标准化组织)接受,成为ISO/IEC 9899-1990。这两份报告没有技术上的差别,仅仅是将ANSI标准的章节序号按照ISO标准进行了重新编排。通常将这两份标准称为C89,偶尔也称为C90(根据其被批准的日期)。该标准的第1版随后被ISO/IEC 9899/COR1:1994、ISO/IEC 9899/AMD1:1995以及ISO/IEC 9899/COR2:1996改进和修正。通常将ISO/IEC 9899/AMD1:1995称为AMD1,有时将其所改进的标准称为C95。
这份标准的第1版(及修正版)随后被ISO/IEC 9899:1999 [ISO/IEC1999]所取代。通常将这份后来的C标准称为C99。最近,第二版的标准(修订)由ISO/IEC 9899:2011[ISO/IEC 2011]所取代,后者通常简称为C11。
严格意义上的C的后继语言有Concurrent C[Gehani 1989]、Objective-C[Cox 1991],C*[Thinking 1990]、当然还有C++[Stroustrup 1986]。C语言同时也广泛用作很多编译器的中间代码表示(作为一种可移植的汇编语言),包括其直接后继者如C++或者某些与其无直接关系的语言(例如,Modula3[Nelson 1991]和Eiffel[Meyer 1988]等)。
在这些C的后继者中,C++使用得最为广泛。C++是由Bjarne Stroustrup于1983~1985年间在贝尔实验室中开发的。在1983年前,Stroustrup也曾给C增加过一些特性,并且称其为“带类的C”(C with classes)。C++这个术语在1983年首次提出。
C++在首次发布后发生了巨大的变化。特别值得一提的是,《The Annotated C++ Reference Manual》[Ellis 1990](ARM C++)为其加入了模板和异常,ISO C++标准则为其加入了运行时类型识别(Runtime Type Identification,RTTI)、名字空间以及一个标准库。最新版本的C++标准是ISO/IEC14882:2011,通常简称为C++11[ISO/IEC14882:2011]。
C和C++语言在今天仍然在不断发展。C编程语言国际标准化工作组(ISO/IEC JTC1 SC22 WG14)负责C语言标准的维护。美国的立场由INCITS的PL22.11 C技术委员会代表。C++编程语言国际标准化工作组(ISO/IEC JTC1 SC22 WG21)负责C++标准的维护。美国的立场由INCITS的PL22.16 C++技术委员会代表。