第一章:C语言历史


C语言诞生于1972年,由伟大的美国计算机科学家Dennis MacAlistair Ritchie发明。C语言的发明,是计算机科学发展史上的一个伟大的创举,直接影响了后来的IT技术革命和互联网技术革命。时至今日,绝大多数的底层软件,包括操作系统(如Windows, Linux, UNIX等),数据库软件(如MySQL),办公软件(如OpenOffice),杀毒软件,网络通信协议,包括JAVA语言的实现,互联网,以及各种内核驱动等都是用C语言开发的。C语言作为编程语言之王,是当之无愧的。

 

截止20169月,C语言在TIOBE编程语言使用排行榜上依然占据TOP2的位置,仅次于排名第一的Java语言。

 

1.1 编程语言的演变与进化

那么C语言为什么叫“C语言”呢?下面,我们来一起追溯一下C语言诞生的这段不平凡的历史。

 

在高级编程语言的进化历史中,最重要的里程碑就是ALGOL算法语言的推出。ALGOL是算法语言(ALGOrithmic Language)的简称,是在计算机发展史上首批清晰定义的高级语言,由欧美计算机学家合力在1950年代所开发。国际计算机学会(Association for Computing MachineryACM)ALGOL模式列为算法描述的标准,启发ALGOL类现代语言PascalAdaC语言等出现。

 

1950年代末期,大量的新增计算机语言涌现,而这些新语言大都围绕单个体系结构如UNIVAC计算机、IBM700系列计算机等开发,使不同系统用户间的交流变得困难。美国一些主要的计算机用户组建议研究与开发适用于与计算机无关的科学用程序设计语言。195852761,德国的应用数学和力学学会(Gesellschaft für Angewandte Mathematik und Mechanik,GAMM)ACM派人出席在苏黎世举行第一次设计会议,为新语言定下目标。新语言先被命名为国际代数语言(International Algebraic LanguageIAL) ,后定名为ALGOL,即算法语言。后来改称Algol 58,成为ALGOL家族的第一个成员。

 

图灵奖获得者:艾伦.佩利(Alan J.Perlis)在巴黎举行的有全世界一流软件专家参加的讨论会上,发表了"算法语言Algol 60报告",确定了程序设计语言Algol 60Algol60语言的第一个编译器由Edsger W. Dijkstra来实现。1962年,艾伦。佩利又对Algol 60进行了修正。

 

Algol 60是程序设计语言发展史上的一个里程碑,它标志着程序设计语言成为一门独立的科学学科,并为后来软件自动化及软件可靠性的发展奠定了基础。200631 ACM宣布彼得.诺尔(Peter Naur,丹麦天文学家)为2005A.M.图灵奖的获得者。这个奖项是由于诺尔在定义Algol 60这种程序设计语言方面的先驱性工作(把BNFBcakus-Naur-Form,由巴克斯首创,但经诺尔改进而成的)范式引入Algo60中)而颁发给他的。Algol 60是许多后来的程序设计语言,包括今天那些必不可少的软件工程工具的原型。


图灵奖获得者Peter Naur

 

2002年,前图灵奖得主Edsger DijstraAlgol 60的发展描述为"一个绝对的奇迹",标志着他所说的"计算科学"的诞生,因为Algol 60首次显示了自动计算能够并且应当成为学术关注的主题。 Algol 60的发展是一群极具天赋的人才的工作成果,其中包括几位以后的图灵奖获得者。


Edsger W. Dijkstra

 

1963年英国剑桥大学推出了CPLCombined Programming Langurage)语言。CPL语言在ALGOL 60 的基础上接近硬件一些,但规模比较大,难以实现。


英国剑桥大学

 

1967年英国剑桥大学的 Matin RichardsCPL语言做了简化,推出了 BCPL Base Combined Programming Langurage)语言。



1970年美国贝尔实验室的 Ken Thompson BCPL 语言为基础,又作了进一步的简化,设计出了很简单的而且很接近硬件的 B 语言(取BCPL的第一个字母),并用B语言写出了第一个 UNIX 操作系统。

 

B 语言过于简单,功能有限。1972年至1973年间,贝尔实验室的 D.M.Ritchie B 语言的基础上设计出了 C 语言(取BCPL的第二个字母)。C语言即保持 BCPL 语言和 B 语言的优点(精练、接近硬件),又克服了他们的缺点(过于简单,数据无类型等)。

 

1973年初,C语言的主体完成。ThompsonRitchie开始用它完全重写了UNIX。随着UNIX的发展,C语言自身也在不断地完善。

 

1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》


图灵奖获得者:Ken Thompson(左)与Dennis M. Ritchie(右)

 

1983年,贝尔实验室的Bjarne StroustrupC语言基础上推出了C++,更早以前,尚在研究阶段的发展中语言曾被称为“new C”,之后是“C with Class”。 C++进一步扩充和完善了C语言,是一种面向对象的程序设计语言。


C++之父Bjarne stroustrup

 

C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。

 

1995年,互联网的蓬勃发展给了Oak机会。Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的AppletApplet是一种将小程序嵌入到网页中进行执行的技术),并将Oak更名为Java(在申请注册商标时,发现Oak已经被人使用了,再想了一系列名字之后,最终,使用了提议者在喝一杯Java咖啡时无意提到的Java词语)。523Sun公司在Sun world会议上正式发布 JavaIBMAppleDECAdobeHPOracleNetscape和微软等各大公司都纷纷停止了自己的相关开发项目,竞相购买了Java使用许可证,并为自己的产品开发了相应的Java平台。

 

19961月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。


Java之父James Gosling

 

一般而言,CC++java被视为同一系的语言,它们长期占据着程序使用榜的前三名。

1.2 C标准的制定

1982年,很多有识之士和美国国家标准协会(ANSI)为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。

 

1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.1591989,简称“C89”,人们也习惯称其为“ANSI C”。

 

1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC 9899:1990 - Programming languages -- C[5] 。因为此标准是在1990年发布的,所以有些人把简称作C90标准。不过大多数人依然称之为C89标准,因为此标准与ANSI C89标准完全等同。

 

1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 98991999,简称“C99”

 

2011128ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。



看文字不过瘾?点击我,进入周哥教IT视频教学
麦洛科菲长期致力于IT安全技术的推广与普及,我们更专业!我们的学员已经广泛就职于BAT360等各大IT互联网公司。详情请参考我们的 业界反馈 《周哥教IT.C语言深学活用》视频

我们的微信公众号,敬请关注