1. C语言的三世轮回
C语言是一个通用的程序设计语言,它并不”很高级”,也不是很庞大,并且和其他语言不同的是,它也并不限于某个特定的应用领域,也不受特定的机器和操作系统的限制,如雷贯耳的UNIX操作系统,以及其上运行的大部分程序,如我们熟知的ls,cp这些程序都是C语言的杰作,由于C语言很适合用于编译器(如gcc)和操作系统领域,因此也被称作”系统编程语言”,但它在其他领域一样攻城拔寨,无坚不摧。
C语言的前世
20世纪60-70年代,是计算机技术发展的黄金时期,UNIX和C语言就是诞生在这个阶段。Dennis M. Ritchie用设计了C语言,并用C语言重写了UNIX的操作系统内核。
C语言的前身可以追溯到1960年的ALGOL 60语言(在那个年代,这是一个重要的编程语言,很多大师都为其做出了努力,并获得巨大的成果,它的后继者是PASCAL语言)。1963年剑桥的CPL语言,以及1967年的Martin Richard的BPCL语言。重要的阶段是1970年,Bell Labs的Ken Thompson设计的B语言,熟悉UNIX历史的读者都知道,最初作为UNIX操作系统上的编程语言就是B语言,B语言是解释性语言。Ken Thompson和Dennis M. Ritchie为了提高UNIX的性能,设计了NB语言,尝试重写UNIX系统的内核,NB最后演化而成C。
小常识:
ALGOL:
CPL:
BPCL:
B:
C:
C语言的今生
C语言是伴随着UNIX而诞生的,Dennis M. Ritchie设计了原始的C语言编译器,虽UNIX操作系统一同发布。在Unix Version 6的版本中派生Whitesmith C编译器---这个重新的实现成为了第一款商业的C编译器。而现代的C语言编译器都是以Steven C. Johnson的 ”可移植C编译器(PCC)”为模型,该编译器在Unix Version 7开始亮相,在System V和BSD中完全取代了DMR的编译器。
在Unix Version 6的版本发行时,Mike Lesk 发布了他的可移植的C语言函数库,该库提供了可在任何支持C的机器上进行IO的库例程,Dennis M. Ritchie重写了该库并将之命名为标准IO库(stdio)
1978年,K&R出版了C语言的第一本参考手册<>,即<<白皮书>>。在ANSI C标准之前,这本C语言的教课书成为实际意义的C语言标准,称K&R C,或者叫原始C。该书在1988年再版,是最重要,最权威,也是最有价值的C语言参考书。
C语言的标准化发展一直是一个保守的过程,原始C语言的精髓的以小心的保存,更加任何现存编译器中的实验技术 而不是发明新的特征。
许多人都没有意识到C语言标准化努力的工作是多么的不同寻常,尤其是最初的ANSI C工作,它坚持只将经过测试的特征列入标准。很多语言的标准委员会把大量的时间花在新的语言特性上,而几乎不考虑应该如何实现。
--Henry Spencer.
第一个官方的C语言标准称为ANSI C,始于1983年,正式的标准在1989年发布,故称C89;该标准在1990年,为ISO所接受,成为ISO标准,或称C90;ANSI C89 与ISO C90这两个标准间差异极小。
最新的标准成于1999年,又称C99标准,对C89作了比较大的变动,但改变还是”本着C语言精神”进行的,而不会对其伤筋动骨,又或颠覆重来,语言的基本性质未曾改变,且向上兼容。
对于C语言,引用C expert中的一句:”不要添乱,---立即解散ISO工作小组”.我们不敢说他讲得对,但是我们应该以K&R的<>这本书为风向标,即使C99做了比较大的变动,K&R的这本参考书还是停留在1988年,巍然不动,足见C语言是稳定的,其修订是异常保守的。同样也预示着学习C语言是一本万利,一劳永逸的美差。
C语言的转世
Dennis Ritchie对C语言的评语:”C诡异离奇,缺陷重重,却获得极大的成功”。但自上世纪90年代以来,面向对象语言的大行其道,被大肆吹捧为解决软件复杂度问题的银弹(Frederik Brooks的经典<<人月神话>>之一篇”没有银弹”).
C++之面向对象的特性对于C语言是一个压倒性的优势,其拥趸者期望C++能够把C送进历史。
似乎,拥有”C with Class”将成为C的转世,然Brooks的预言似乎没有那么容易攻破,近十几年的经验,足可证明面向对象不足攻克软件复杂度的难题,而C++虽称霸一时,但仍不可达到C语言的王者的高度。
C似乎正值青春年少,现在讨论它的转世还言之过早。
总结语
现在既已进入21世纪的第二个十年,C已经风风雨雨经历了38个春秋,见证了百千后辈的出生入死,或昙花一现,或胎死腹中,或夭折于襁褓,又或一时如日中天,称雄称霸,终归难免有大势所去之感叹。唯有C屹立不动,38个寒暑,一直都作为主流的语言而活跃于各个领域。它将和Fortran, Lisp这些老前辈一样青春常驻,而他的成就却是其前辈无可比拟的。