C家族的发展史
在网上搜索了半天,虽然收获颇丰,但是却没有找到一个令我满意的讲述C语言历史的文章。索性就写一篇博客讲述C语言的历史吧!一方面,可以集各家之所长,写出一篇较为全面的讲述C语言历史的文章,另一方面,也可以自己对文章的内容不断地改进与完善,以期为更多对C语言感兴趣的同志提供一个越发完善的C的世界。
初学C语言时,我们都见过这样一个程序:printf(“Hello World!”);
就像这第一个程序体现出来的那样,当你走进C语言的大门,你就会发现:我们的世界,就是C的世界!或者说:C语言描述了一个新的世界——信息世界。
God’s Programming Language
1. C语言的家
提到C语言,就不得不提一下贝尔实验室,提到贝尔实验室,就不得不再提一下AT&T。
所以,AT&T是什么?
这让我怎么跟你说呢……嗯,先说个你知道的——手机,手机又叫做什么?——移动电话,对了,电话你也知道,那么电话是谁发明的呢?这个我们在小学课本里都学过:电话是贝尔发明的(其实事实可能并不是如此,请继续往下看)。
既然提到了贝尔,那我就可以很明确地告诉你AT&T是什么了。假如阿里巴巴是马云的儿子,那么AT&T就是贝尔的儿子,所以,你明白了吧?AT&T是(American
Telephone & Telegraph 美国电话电报公司)的简称,由亚历山大 ·
贝尔于1877年创立,距今(2017年)已有140年的历史。
贝尔实验室,我想你肯定听说过吧?如果你仔细阅读了前面的内容,很容易就可以猜到他们之间的关系。没错,贝尔实验室是AT&T的科学大脑,也的确是一个伟大的实验室。从某个角度来说,贝尔实验室可以说是全人类的实验室,因为在它那里产生了很多目前全人类都在使用的而且很重要的发明创造。例如,目前信息时代的材料基础:晶体管和半导体;目前信息世界的理论基础之一:《信息论》;还发明了Unix操作系统、射电天文望远镜;发射第一颗商用卫星,铺设第一条商用光纤等等,其中很多都对我们今天的生活产生了深刻的影响。
关于AT&T和贝尔实验室,这里就不再展开说明了,如果你觉得这段历史很有趣,请参考拙作《Brandon的IT简史——AT&T(贝尔电话公司)》
地址:http://blog.csdn.net/weixin_40108380/article/details/78155933
2. C语言的父亲
相信看完下面这段内容,你会感叹:有一个爱玩的爸爸是如此的重要。
如果你有一个爱玩的父亲,一不小心……这么说好像不太好哎 ●-●
不过,正是因为C语言有个爱玩的父亲,才用心地从B语言改进出了C语言,也可以说是造就了我们今天用的C语言的主体。这段C语言诞生的历史如下:
背景:
20世纪60年代,贝尔实验室的研究员Ken Thompson(肯·汤普森)发明了B语言,并使用B编了个游戏 - Space
Travel,他想玩自己这个游戏,所以他背着老板找到了台空闲的机器 -
PDP-7,但是这台机器没有操作系统,于是Thompson着手为PDP-7开发操作系统,后来这个OS被命名为 -
UNIX。(******的背景,其实就是另一个伟大事物——操作系统Unix的诞生史)
Where there is a shell,there is a way.
起因:
D.M.Ritchie(DM里奇)玩心大发,也想要玩同事Ken Thompson开发的游戏Space Travel,所以加入了Ken
Thompson,合作开发UNIX,他的主要工作是改进Thompson的B语言(取BCPL的第一个字母,至于BCPL是什么,请继续往下看)。
重要的时间点:
1971年,有了上边那个起因;
1972年,爱玩的父亲改着改着就改出了一个新的语言,取名为——C语言(取BCPL的第二个字母,也是B的下一个字母)
1973年,生孩子完毕,C主体完成!接下来就是C语言漫长的成长期了。
玩,究竟是不是人类的终极目的?不得而知。但是玩是启发灵感的一剂妙药却是真实存在的。
爱玩的D.M.Ritchie和他爱玩的同事Ken
Thompson迫不及待的开始用C语言完全重写了UNIX。不过,此时编程的乐趣已经使他们完全忘记了那个“Space
Travel”,一门心思的投入到了UNIX和C语言的开发中(看样子只有父亲脱离低级趣味的玩,儿子才能够健康茁壮的成长)。自此,C语言和UNIX相辅相成的发展至今。
3. C语言的兄弟姐妹
如果说C语言的哥哥是B语言,那么B语言的哥哥就是BCPL,那么BCPL的哥哥就是CPL,那么CPL的哥哥就是ALGOL60,虽然C语言有这么多兄弟,很可惜他们不是同一个父亲的孩子;
如果说C语言穿上面向对象的铠甲成为了C++,那么它还有两个会飞(不依赖具体平台)的小弟弟Java和C#,很可惜他们也都不是同一个父亲的孩子。
这段复杂的家族史主要如下:
- ALGOL60(ALGOrithmic Language) - 1960
ALGOF60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序。 - CPL(Combined Programming Language) - 1963
CPL是1963年剑桥大学发明的。 - BCPL(Base Combined Programming Language) - 1967
剑桥的Matin Richards 对CPL做了简化,推出了BCPL。 - B(B Programming Language) - 1969
贝尔实验室的Ken Thompson(肯·汤普森) 对BCPL又做了改进,设计出了简单的且接近硬件的B语言,并用B语言写了第一个UNIX OS。 - C(C Programming Language) - 1972
贝尔实验室的另外一个人Dennis MacAlistair Ritchie(D.M.Ritchie - DM里奇)在B的基础上设计出了C语言。C 保持了B的优点(精炼、接近硬件),又克服了他的缺点(过于简单,数据无类型)。 - C++(C plus plus Programming Language) - 1983
还是贝尔实验室的人,Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 在C语言的基础上推出了C++,它扩充和完善了C语言,特别是在面向对象编程方面。一定程度上克服了C语言编写大型程序时的不足。 - Java(Java Programming Language) - 1995
Sun公司的Patrick Naughton的工作小组研发了Java语言,主要成员是James Gosling(詹姆斯·高斯林)。 - C#(C Sharp Programming Language) - 2000
Microsoft公司的Anders Hejlsberg(安德斯·海尔斯伯格)发明了C#,他也是Delphi语言之父。
如果说这么多编程语言是异父同母的兄弟,那么它们共同的母亲应该说是计算机,那么难道信息世界是一个母系氏族的社会?
好基友:Thompson(L)和Ritchie(R)
4. C语言的版本
第一个事实上的C标准——《K&R》标准
以1978年发布的UNIX第七版中的C语言编译程序为基础,Brain W.Kernighhan和 Dennis
M.Ritchie(合称K&R)合著了影响深远的名著《The C Programming
Language》,这本书中介绍的C语言成为了后来广泛使用的C语言版本的基础。
ANSI C
1983年,美国国家标准协会(ANSI)根据C语言问世以来各种版本对C语言进行了发展和扩充,公布了第一个C语言标准草案(83 ANSI C)。ANSI C比原来的C有了很大的发展。
C89
1989年,ANSI公布了一个完整的C语言标准-X3.159.1989,简称C89。 K&R在1988年修改了他们的经典著作《The C Programming Language》,按照即将公布的ANSI C重新写了该书。
C90
1990年,国际化标准组织IOS(International Standard Organization)接受C89为IOS C的标准,通称C90. C90与C89基本相同。
C99
1999年,IOS又修订了C语言标准,简称C99。
目前流行的C语言编译系统大多是以C89为基础进行开发的,并未实现C99所建议的所有功能。
附:Bell的黑历史
2002年6月15日,美国国会通过一项决议,判定意大利人安东尼奥·梅乌奇(Antonio Meucci)为电话的发明者。换言之他才是“电话之父”!那么历史到底是怎样的呢?
根据可以网上可以查到的资料显示:
意大利人梅乌奇在1849年的一天在他研究电生理学的过程中发现了“电话的原理”并开始研究他称之为“会说话的电报机”的装置。此时,亚历山大·贝尔才两岁…
在移居美国之后,因为不会英语的关系他始终融入不进主流社会,得不到应有的认可,甚至他连申请专利的钱都不够。更加让人心寒的是,1876年和梅乌奇共用一个实验室的贝尔向美国专利局提出申请电话的专利权!
当然,梅乌奇愤而提起上诉,当时最高法院已经同意以欺诈罪指控贝尔,但就在胜利曙光要显现时,年近80穷困潦倒、病魔缠身的梅乌奇却于1889年带着遗憾离开了人世。
历史就是如此具有魔力,成王败寇,从来如此。贝尔获得了电话的专利权,成为“电话之父”,名声大噪,创建了贝尔电话公司(at&t前身)。自此,历史的车轮一直走到了今天。当然,我们不能因为一点而完全否认一个人,贝尔还是为社会、科技的发展作出了卓越的贡献!
后人只能从当时留下的不知真假的只言片语中猜测当时发生了什么。如果以上是真实的历史,那么我相信随着美国国会的一纸决议,梅乌奇终于可以稍感欣慰了。
(转载之知乎)