编程语言王者:C语言的前世今生

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


曾经就职于Amazon和Google的卓越程序员Steve Yegge在他的文章《几种编程语言的优缺点》以及《程序员的呐喊》中指出“你必须懂C”,因为C最懂冯诺依曼计算机,而冯诺依曼计算机是当今计算机的架构标准。创业书籍《腾讯传》里指出:马化腾从大学二年级开始把很多精力花在了C语言的学习上。马化腾曾说:“我们最终是靠C打天下的”。


C语言作为编程语言之王,是当之无愧的。


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

编程语言王者:C语言的前世今生

编程语言排行榜TIOBE

1.1 编程语言的演变与进化

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


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


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


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


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


编程语言王者:C语言的前世今生

图灵奖获得者Peter Naur

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

编程语言王者:C语言的前世今生

Edsger W. Dijkstra


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

编程语言王者:C语言的前世今生

英国剑桥大学


1967年英国剑桥大学的 Matin Richards对CPL语言做了简化,推出了 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语言的主体完成。Thompson和Ritchie开始用它完全重写了UNIX。随着UNIX的发展,C语言自身也在不断地完善。


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


编程语言王者:C语言的前世今生

编程语言王者:C语言的前世今生

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


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


编程语言王者:C语言的前世今生

C++之父Bjarne stroustrup


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


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


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


编程语言王者:C语言的前世今生

Java之父James Gosling


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


编程语言王者:C语言的前世今生

C语言的进化树

1.2 C标准的制定

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


1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“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 9899:1999,简称“C99”。


在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。


分享到:


相關文章: