admin 管理员组

文章数量: 1184232


2024年1月25日发(作者:weight用英语怎么说)

第三章 编程语言发展简史

编程语言之于程序员就如枪之于军人。编程语言不仅是程序员的谋生工具,它们还让我们拥有了“从士兵到将军”的职业发展梦想。让我们先向历史上伟大的编程语言、伟大的人物、伟大的企业致敬。

本章讲述编程语言发展简史,穿插了一些有趣的故事。如今的编程语言比起几十年前的算是高度发达了,所以程序员的日子一天比一天好过,真是“前人种树后人乘凉”。

3.1编程语言大事记

1822年,英国人Charles Babbage设计了差分机。该差分机利用卡片输入程序和数据,类似于百年后的电子计算机。

1834年,Babbage 设计了一台分析机,在穿孔卡片(只读存储器)中存储程序和数据,基本实现了控制中心(类似于今天的CPU)和存储程序的设想。而且程序可以根据条件进行跳转,这有些类似于今天的程序形式 。

1848年,英国数学家George Boole创立了二进制代数学。差不多提前一个世纪为现代二进制计算机铺平了道路。此后,计算机的研制差不多沉寂了四十年,自然也没有什么人来设计程序。

1890年,美国进行人口普查。由于1880年的普查用了七年的时间进行统计分析,这意味着1890年的统计分析可能会超过10年。人口普查部门希望能有一台机器,帮助他们提高统计分析的效率。Herman Hollerith借鉴了Babbage的设计,用穿孔卡片存储数据和程序,并制造了处理机器。结果该机器仅仅用了6周就得出了人口普查的统计分析结果。Herman Hollerith因此大发其财,他的公司后来发展成了IBM公司,真乃时势造英雄。

1896年,Herman Hollerith创办了IBM公司的前身,开始大量制造穿孔卡片处理机。当真正意义上的电子计算机出现时,穿孔卡片自然地成为最早的程序载体。

1906年,美国的Lee De Forest发明了电子管。在这之前的计算机,都基于机械运行1924年2月,IBM公司成立了。从那时起直到今天,IBM公司始终在计算机工业界占据重要地位。

1937年,英国剑桥大学的Alan M. Turing出版了他的论文。没错,就是那个著名的图灵,他在论文中提出了“图灵机”数学模型。现在几乎所有的编程语言都建立在图灵机模型之上。

1937年,贝尔实验室的George Stibitz首先用继电器来表示二进制。如果你是那个时代的先知,也许你可以预见到今天的编码方式。

1939年 1月1日,加利福尼亚的David Hewlet和William Packard 在他们的车库里造出了Hewlett-Packard计算机。机器的名字是两人用投硬币的方式决定的。这两个人后方式,而在这之后,计算机开始进入电子时代。

来成立了著名的HP公司。

1943年,从这一年开始到1959年,出现了大量使用真空管的计算机,通常被称作第一代计算机。ENIAC (Electronic Numerical Integrator and Computer)是第一台真正意义上的数字电子计算机。它于1943年开始研制,完成于1946年2月。重30吨,占地170平方米,体积3000立方英尺,用了18000个电子管,功耗率25千瓦。主要用于计算弹道和研制氢弹。负责人是John W. Mauchly和J. Presper Eckert。

如果你有幸成为ENIAC的程序员,你将不得不用机器码和穿孔卡片编写所有的程序,并且直接在内存中读写指令和数据,安排和维护内存的分配。即使增加一行代码,也必须重新考虑所有指令和数据在内存中的分配。编制的程序完全像天书,全由0和1组成。

1949年的EDVAC (Electronic Discrete Variable Computer)是第一台使用磁带的计算机。这是一个突破,专家们可以在其上多次编写和存储程序。不过你还是必须使用机器码。这一年的科学杂志作了一个大胆的预测:“未来的计算机不会超过1.5吨”。

1952年,对于程序设计来说是具有重要里程碑意义的一年。MIT(美国麻省理工学院)在Whirlwind 系统上使用了符号地址,开始使用汇编语言来编写程序。Whirlwind被美国空军用于控制实时防御系统。

1954年,IBM公司的John Backus和他领导的研究小组开始研制Fortran(Formula

Translation)语言,这是一种用于科学计算的编程语言。Fortran语言于1957年研制完成。Fortran支持一些最常用的编码方式,如算术表达式、逻辑运算、过程调用、循环和条件等等。相对汇编语言来说,Fortran可以被称为高级语言,它提高了程序员的编程效率。Fortran历尽变迁,如今演变成为Visual Fortran。

1958年,Robert Noyce(Intel公司的创始人)发明了集成电路。1959年 Grace Murray

Hopper开始研制COBOL (Common Business-Oriented Language)语言,并于1961年完成。COBOL在银行系统和许多大型企业中得到了广泛的应用。直到今天,仍然有许多用COBOL编制的程序在大型机上运行。

1960年,来自丹麦、英国、法国、德国、荷兰、瑞士和美国的13名代表举行了一次国际会议,会后在计算机权威刊物CACM上发表了“关于算法语言Algol60的报告”。Algol是一种用日常英语以及与常用数学表达式相近的形式表现算法的语言,没有输入输出语句,全部以过程的形式进行描述,以块结构为基础。Algol是第一个结构化编程语言。

1961年,IBM的Kennth Iverson推出APL编程语言,专门用于矩阵运算。

1965年,Thomas E. Kurtz和John Kemeny研制了BASIC(Beginners All Purpose

Symbolic Instruction Code)语言。BASIC特别适合于计算机教育和初学者使用,后来发展成为Visual Basic,为Microsoft公司挣了很多钱。

1967年,Niklaus Wirth开始在 Algol基础之上开发PASCAL语言,于1971年研制完成。PASCAL后来成为Borland 公司用来对抗Microsoft公司的利器。但是这个时候,无论是Microsoft还是Borland都还没有出世。

1968年,Seymour Paper和他的研究小组在MIT开发了LOGO语言。LOGO语言非常有趣,适用于教育领域。LOGO语言的标志是一个有趣的忍者神龟。

1969年,ARPANET计划启动(Advanced Research Projects Agency Network),这是

现代Internet的雏形。1970年,许多大学和商业部门开始接入ARPANET。Internet的发展又带动了一批新的语言,但这是二十年之后的事了。

1970年 Ken Thomson和Dennis Ritchie开始研制UNIX操作系统。

1971年11月15日, Intel公司的Marcian E. Hoff研制成功第一块微处理器4004。它含2300个晶体管,是个4位系统,时钟频率108KHz ,每秒执行6万条指令。

1972年 ,贝尔实验室发明了C语言。C兼有低级语言和高级语言的功能,被人们称为中级语言。C是一个功能强大的编程语言,它最初因被用于开发Unix系统而闻名于世。到80年代,贝尔实验室又发明了C++语言。C和C++被誉为是程序员的“正宗编程语言”,它们的广泛应用极大地推动了软件业的发展。

1974年,这一年发生了许多重大的事件。4月1日Intel发布了8位的微处理器芯片8080。12月,MITS发布了Altair 8800,这是第一台商用个人计算机,价值397美元,内存只有256个字节。同年,Bill Gates和Paul Allen开始开发第一个在MITS 的Altair计算机上运行的BASIC程序,他们手头甚至没有Altair计算机。

1975年 Bill Gates和Paul Allen创办了Micorsoft公司。要是那个时候人们买了Microsoft公司的股票,那该多好啊。

1976年 Zilog推出Z80处理器,这是一个8位的微处理器。CP/M就是基于Z80的操作系统。

1979年 Jean Ichbiah 研制了Ada语言,被广泛用于美国军方。同年,IBM公司眼看着个人计算机市场被苹果等电脑公司占有,决定开发自己的个人计算机。Microsoft公司不但提供了用于IBM-PC的BASIC语言,还承担了操作系统的开发。

1981年8月,IBM推出了首款IBM-PC,同时也为Microsoft的崛起铺平了道路。在IBM-PC发布的同时,MS-DOS 1.0和PC-DOS 1.0也一起发布。Microsoft受IBM委托开发DOS操作系统,他们从Tim Paterson那里购买了一个叫86-DOS 的程序并加以改进。从IBM卖出去的叫PC-DOS,从Microsoft卖出去的叫MS-DOS。Microsoft精明地保留了继续开发的权利。DOS的最初版本里Bug很多,以至于被称为“Dirty Operation

System”,但这却是Microsoft独霸PC操作系统的开始。

1983年Borland公司成立。其创始人是Philippe Kahn和Anders Hejlsberg,他们合作研制了Turbo Pascal,并在著名的Byte杂志上登广告。售价49.99美元的Turbo Pascal是一个革命性的产品,它能够在RAM中常驻运行,又具有闪电般的编译速度,成为当时PC上最流行的开发工具。Borland也由此迈上了其影响PC软件开发工具十几年的道路。

1985年,Microsoft发布了Windows 1.0。最初的Windows存在很多严重的Bug,不仅少有人用而且被人讥笑。一直熬到1993年,Windows 3.1才获得成功。Windows的图形用户界面与Apple公司的类似,以致于被Apple公司控告。诉讼一直持续到1997年8月,Apple遇到了严重的财务危机,Microsoft伸出资本的双手,向Apple注资1.5亿美元,换来了Apple撤消其控诉。

1989年,欧洲物理粒子研究所的Tim Berners-Lee 创作了World Wide Web雏形,HTML语言开始流行,大大地推动了Internet的发展。

1994年 Netscape 1.0 浏览器发布。

1995年8月,Microsoft发布了32位的多任务操作系统Windows 95,该版本取得了

巨大的成功。

同年,号称“一次编译,到处运行”的Java语言诞生。

1995年12月年,Netscape发布了JavaScript。

1996年1月,Netscape Navigator 2.0发布,这是第一个支持JavaScript的浏览器。

2002年,Microsoft发布了.NET,开始与Java阵营竞争。

有人绘制了一张比较直观的编程语言关系图,见图3-1(取自Internet)。

图3-1 编程语言关系图

3.2 Ada的故事

Ada是一个女孩名字,为什么用她的名字来命名编程语言?

Ada于1815年12月10日降临人世,她是英国的诗人拜伦勋爵的女儿。

拜伦是位天才的诗人,但并不是一位称职的丈夫。他和妻子的关系极不和谐,在Ada出生五个月时,拜伦离家出走。据说主要原因是拜伦不欣赏妻子的出众才华。拜伦的妻子有极高的数学天分,曾学过代数、几何,甚至天文学,这在当时上流社会的妇女中是极少见的。想不到欧洲也曾流行“女子无才便是德”。

Ada是一位美丽而有修养的女子,她不幸患了小儿麻痹症,以致双腿瘫痪。Ada竭尽全力同疾病斗争,终于在13岁时她又可以独立行走了。并且在三年养病期间,她还研读了天文学和形而上学。

1838年,Ada和Babbage首次相遇,那时Babbage正试图制造分析机(一种机械式计算机)。尽管Ada只有18岁,可她被Babbage的工作深深地吸引了。Ada为Babbage的分析机编制了程序,她成为世界上第一位程序员。

Ada不仅仅为历史上第一台机械计算机开发了程序,她还预见了计算机的广泛应用,她甚至认为可以用计算机来作曲。她的思想在当时显得太过于超前。1852年,Ada在与癌症苦苦搏斗中去世,年仅37岁。

1977年,美国国防部计划开发一种新的编程语言,以替换美国陆、海、空三军使用的五花八门的编程语言。新语言应该叫什么名字呢?五角大楼的一位军官突然想起了多年前的一位年轻女子,历史上第一位程序员,她的名字是Ada。

Ada就这样成为一种编程语言的名称。

3.3 C++的演化

C++语言是贝尔实验室的Bjarne Stroustrup设计和实现的。让我们先看看Bjarne

Stroustrup的尊容(图3-2),按中国人的说法,Stroustrup先生果真是聪明绝顶。

图3-2 C++鼻祖Bjarne Stroustrup的尊容

在1980年,C++最初的版本被称作“带类的C”(C with classes)。面向对象的一些特性在1983年被加入C++之后,面向对象设计方法和技术就逐渐进入了C++领域。在1985年,C++第一次投入商业市场。在1987至1989年间,支持泛型程序设计(Generic

programming)的功能也被加进了C++。

C++标准化工作在1990年启动。标准化工作由ANSI(American National Standard

Institute)以及后来加入的ISO(International Standards Organization)负责。1998年正式发布了C++语言的国际标准。关于C++的设计和演化,在Stroustrup的著作中有详细的叙述。Stroustrup总结了C++的一些设计原则:

 C++的每一步演化和发展必须是由于实际问题所引起的。

 C++是一门编程语言,而不是一个完整的系统。

 不能无休止地一味追求完美。

 C++在其存在的“当时”必须是有用处的。

 每一种语言特性必须有明确的实现方案。

 总能提供一种变通的方法。

 不强制于人。

……

从一开始,C++面向的就是那些从事软件开发工作的程序员。所谓的“完美”被认为是不可能达到的。在C++语言的演化过程中,来自用户的反馈和语言实现者们积累的经验是最为重要的。

3.4 Borland 与Microsoft之争

Borland公司成立于1983年,曾经是世界第三大软件公司。在软件开发工具领域,Borland和Microsoft曾经围绕软件开发工具展开了一场没有硝烟的持久战争。

在九十年代初期,那时还是DOS时代。Borland公司的Turbo C/C++在编译性能和易用性方面可谓独领风骚,Turbo系列风靡全球。相比之下,Microsoft 的C/C++产品越发显得笨拙。在C/C++领域,那时Borland与Microsoft的形象之比犹如香港影片里的周星驰与吴孟达。

那个时期是Microsoft的C/C++产品部门最难过的日子,Microsoft的员工们都认为公司里最笨的人全集中在C/C++部门了。还有一个滑稽的事件,在Microsoft的开发工具刊物上,出现了一个名字叫做Buck Forland的作者,不断发表各种文章嘲笑Borland公司的产品,引起了Borland公司及其拥护者的强烈不满。许多人推测该作者应该是Microsoft的软件工程师,用这个笔名来发泄不满。如果你不明白的话,请把两个单词的首字母颠倒一下。这种做法并不少见,多年以后,Oracle公司的总裁在记者招待会上把Microsoft的.NET称为.Not。和布什总统不同的是,他还不愿意承认这是口误。

在Windows 3.X流行的那几年里,Microsoft的Visual C++ 1.0仍然不敌Borland

C/C++。Microsoft毕竟比Borland财大气粗,既然明着斗不过,那就挖Borland公司的墙角。据说后来Visual C++小组的成员有60%是从Borland公司跳过来的。

自从Windows 9X推出之后,Visual C++逐渐占据了上风,因为没有人能比Microsoft更好地利用Windows操作系统的特性。

虽然在C/C++领域败下阵来,但是Borland公司还握有Pascal这张王牌。与C++有ANSI标准不同的是,Pascal几乎是被Borland公司独家拥有。1995年,Borland公司推Borland公司几乎是高品质的代名词。

出了Pascal的现代版本Delphi 1.0。Delphi是个卓越的快速应用软件开发工具(RAD),迟来的Visual Basic 3.0在Delphi面前一败涂地。从此,Delphi赢得了一个令人肃然起敬的绰号“VB Killer”。这大概又会成为Microsoft Visual Basic小组心中的痛。Microsoft只好继续使用挖人的手段,甚至把Delphi的首席设计师Anders Hejlsberg也挖走了。若干年之后,Microsoft为了反击Java而开发了C#,而C# 首席设计师就是从Borland公司挖过来的Anders Hejlsberg,真是“它山之石可以攻玉”。

从技术上讲,Borland的开发工具的确称得上是无与伦比的卓越。Borland每次推出新产品或者新版本时,都会赢得程序员们的赞誉。可以说Borland的产品是被Microsoft公司的Windows垄断地位和大批量挖人的方式打压下去的。Microsoft胜之不武,但这是商业竞争,我们不能因此对Microsoft怀恨在心。

90年代初期的C/C++程序员对Borland公司有深厚的仰慕之情。本书作者在读大学时用盗版的Turbo C 2.0和Borland C++ 3.1开发过不少软件。我曾对同伴们说:等我以后挣钱了,一定要买Borland的正版软件。

大约5年后的今天,在我的项目购买Borland的CORBA产品时,我对Borland销售人员讲了我在读大学时候的那个心愿,并希望购买Turbo C 2.0和Borland C++ 3.1作为留念。可惜这两个产品已经没得卖了。

Borland犹如楚楚动人的少女,带着美丽和忧伤步入了红尘,经受着岁月对它的侵蚀。这些回忆仿佛触动了尘封多年的初恋情节,令人一丝丝心痛。

我们温柔地期待Borland走好。

3.5 Java阵营与Microsoft的较量

1995年5月23日,Sun公司的John Gage和Netscape公司执行副总裁Marc Andressen联合推出了Java技术。当时Netscape的浏览器是进入Internet世界的最主要工具,Netscape大有“微软终结者”的姿态。

Java最初只是Sun公司一个秘密项目的编程工具。Java的开发者们当初甚至没有想到把它发展成一种编程语言的“野心”,更不用说后来的Java平台了。那是1991年,那个秘密项目叫做“Green Project”,项目人数最多的时候也只有13人。Sun公司启动这个秘密项目的动机是,他们认为,计算模式将转向基于消费类设备的分布式计算。

“Green Project”小组开发了一个叫做StarSeven的数字设备。当时“Green Project”成员所在办公室的电话系统将任何电话切过来的操作方式是*7。StarSeven是一个不同数字设备之间的代理(Agent)。StarSeven可以控制多种不同平台的设备,这得益于Gosling发明的一种叫做“OAK”的跨平台编程工具,这个“OAK”就是后来大名鼎鼎的JAVA。OAK的名字来自于Gosling办公室窗外的一棵橡树。这些人无意之中发明了可以改变计算机计算模式的技术。

Internet的迅速普及拉开了Java时代的帷幕……

和绝大多数公司一样,Microsoft也取得了Java的开发许可证。但在随后推出的 Visual

J++中,Microsoft提供了依赖于Windows平台的Java实现,这与Sun推崇的“一次编译,到处运行”的口号大相径庭。于是Sun发起了一场“100% Pure Java”的宣传运动,其声势浩大,几乎成为了一种文化。

Sun还对Microsoft提出诉讼,要求赔偿35亿美金。Microsoft最后被判决赔偿两千万美金。Microsoft咽不下这口气,随之作出了Windows XP系统不再支持Java的决定。Sun又针对Microsoft的这个决定打起了官司,指责Microsoft利用垄断的力量阻碍Java的发展。

正如评论所说,Sun和Microsoft的这场官司,真正受害的是广大开发者。

现在,Java阵营的最新平台是J2EE,Microsoft则推出.NET与之对抗。最有名的一次交锋是“Pet Store”(宠物商店)性能竞赛。

Pet Store是Sun公司推出的一个范例应用程序,用来帮助人们在J2EE平台上开发应用软件。完整的Pet Store提供了一个基于浏览器的B2C购物环境(当然,你只能买宠物),一个基于XML的网站管理工具,和一个基于Web Service的B2B交易系统。

除了展示J2EE的功能之外,它还展现了Java平台的其它功能。看看图3.1,注意到不同的国旗了吗,这代表了Pet Store的不同语言的版本(可惜没有五星红旗)。在Java中实现多语言是一件比较容易的事。

Pet Store虽小,但是五脏俱全,常用的搜索、账号和购物车功能都实现了。许多J2EE应用服务器的供应商都在其产品中提供了Pet Store的相应实现。因此在J2EE社区里,Pet Store被奉为圣典。Pet Store对应于J2EE的版本,现在已经推出了1.3版,增加了许多新功能,其无限版本也发布了,这个好东西可是免费的。

图3.1 Pet Store的界面

Pet Store是一个如此有名的范例,以至于Microsoft在推出.NET平台时,专门实现了一个Pet Store的.NET版本,并且宣称这个版本比Sun的快了28倍。这在当时激起了轩然大波,无数人都在讨论这个话题。

但是,很快证明这只不过是Microsoft的营销手段而已。Microsoft大概高兴得昏了头,居然公开了源代码。于是真相大白了,Microsoft采用了一种与Sun完全不同的体系

结构。Pet Store的Sun版本是为了揭示J2EE平台的各种用法,因此采用了一种复杂的、极具扩展性的体系结构,涵盖了J2EE的方方面面。而Microsoft的Pet Store完全出于宣传的考虑,采用了一种极简单的结构:在ASP页面中直接调用存储过程,速度自然快了很多。数年前Microsoft在比较Delphi与Visual Basic时也采用了同样的手段,他们在Delphi示例程序中使用了一个远程的数据库调用,而在VB的代码中却使用了本地调用。然后宣传Visual Basic的性能比Delphi的优越。

最具讽刺意义的是,Oracle不久也公开宣称,它们实现了一个J2EE平台的Pet Store,比Microsoft的又快了3倍,天知道Oracle用了什么伎俩。事情发展到了这一步,变成一出闹剧。

抛开大公司之间的竞争话题不提,平心静气地看Microsoft的.NET和Sun的J2EE,尽管两者方法不同,但都具备许多优秀的特征,两者难分优劣。

.NET和J2EE的可移植性都非常好。虽然.NET的核心只能工作在Windows环境下,但从理论上讲可以支持多种语言开发,只要这些语言的子集已经定义好,并为它们建立了IL(Intermediate Language)编译器。对于J2EE来说,只要遵循Java VM规则和一组平台需要的服务,就可以在任何平台上工作。由于J2EE平台的所有规范都已经向公众公布,许多供应商可以提供J2EE的兼容产品和开发环境。

.NET并不是一种精巧的标志,而是意味着Microsoft产品战略的重大转移。Java清除了平台的障碍,但是为了用J2EE来做开发,用户必须在Java环境下工作。而.NET是想让用户使用自己喜欢的语言来建造.NET应用软件,这个设想是十分美妙的。

对于Windows环境下的软件开发商而言,.NET是一个好的构架,用户可以将许多事情交给.NET去做。例如比ASP好,比ADO和DCOM出色,C#比C/C++更好用。不过,虽然.NET平台描绘了美好的蓝图,但其设想要全部成为现实还有较长的路要走。例如IL公共语言的运行,目前还有某些明显的不足。想要把每一种语言和元件在运行时集成起来,必须定义这种语言的子集或超集,并清晰地影射到IL上;此外必须定义结构,以便提供IL需要的元数据;还有必须要开发适用于两种编译语言结构的编译器,集成到IL部件的代码中;同时还要生成对现有IL元件的语言专用接口。

由于历史原因,若想在Java语言中使用其它语言,必须要开发非Java语言到Java VM的众多转换器。因此,在Java环境中编写代码,就必须要承受额外的翻译工作。如果目标环境是J2EE,程序员通常会选择Java来编程。如果目标环境是.NET,那么程序员将会选择C#。……

3.6 小结

编程语言发展到今天,已经越来越平台化。掌握一门编程语言,不仅要求懂得语法,世上不存在最好的编程语言,每一种语言都有其优点和缺点,能够很好地解决应用还要能熟练使用该语言的集成开发环境和相应的库函数。

问题的编程语言就是好语言。开发人员应当根据待开发产品的特征,选择业界推荐的并且是自己擅长的编程语言来开发软件。

语言之间存在一定的相似性,学好一门语言后再学其它语言就容易得多。所以精通一门编程语言将使你长期受益。


本文标签: 公司 语言 编程语言 计算机 开发