找回密碼
 入住家園
查看: 876|回復: 1

【转帖启发】程序(流程)设计语言(Program Language)发展部分史

[複製鏈接]
發表於 2006-3-20 16:32:23 | 顯示全部樓層 |閱讀模式
计算机语言也称程序设计语言(Program Language),即编写计算机程序所用的语言。计算机语言是人和计算机交流信息的工具,它是软件的重要组成部分。粗略地,计算机语言分为机器语言、汇编语言和高级语言。高级语言是接近人类习惯使用的自然语言和数学语言的计算机程序设计语言。它独立于计算机,用户可以不了解机器指令,也可以不必了解机器的内部结构和工作原理,就能用高级语言编程序。高级语言通用性好、易学习、易使用、不受机器型号的限制,而且易于交流和推广。

早期电脑都直接采用机器语言,即用“0”和“1”为指令代码来编写程序,读写困难,编程效率极低。为了方便编程,随即出现了汇编语言,虽然提高了效率,但仍然不够直观简便。从1954年起,电脑界逐步开发了一批“高级语言”,采用英文词汇、符号和数字,遵照一定的规则来编写程序。高级语言诞生后,软件业得到突飞猛进的发展。

1953年12月, IBM公司程序师约翰·巴科斯(J. Backus) 写了一份备忘录,建议为IBM 704设计一种全新的程序设计语言。巴科斯曾在“选择顺序控制计算机”(SSEC) 上工作过3年, 深深体会到编写程序的困难性。他说:“每个人都看到程序设计有多昂贵,租借机器要花去好几百万,而程序设计的费用却只会多不会少。”巴科斯的目标是设计一种用于科学计算的“公式翻译语言”(FORmula TRANslator) 。他带领一个13人小组,包括有经验的程序员和刚从学校毕业的青年人,在IBM 704电脑上设计出编译器软件, 于1954年完成了第一个电脑高级语言——FORTRAN语言。1957年,西屋电气公司幸运地成为FORTRAN的第一个商业用户, 巴科斯给了他们一套存储着语言编译器的穿孔卡片。 以后,不同版本的FORTRAN纷纷面世,1966年,美国统一了它的标准,称为FORTRAN 66语言。 40多年过去,FORTRAN仍然是科学计算选用的语言之一,巴科斯因此摘取了1977年度“图林奖”。

FORTRAN广泛运用的时候, 还没有一种可以用于商业计算的语言。美国国防部注意到这种情况, 1959年5月,五角大楼委托格雷斯·霍波博士领导一个委员会,开始设计面向商业的通用语言(COmmon Business Oriented Language) ,即COBOL语言。COBOL最重要的特征是语法与英文很接近, 可以让不懂电脑的人也能看懂程序;编译器只需做少许修改,就能运行于任何类型的电脑。委员会一个成员害怕这种语言的命运不会太长久, 特地为它制作了一个小小的墓碑。然而,COBOL语言却幸存下来。1963年,美国国家标准局将它进行了标准化。用COBOL写作的软件,要比其他语言多得多。

1958年,一个国际商业和学术计算机科学家组成的委员会在瑞士苏黎世开会,探讨如何改进FORTRAN,并且设计一种标准化的电脑语言,巴科斯也参加了这个委员会。1960年,该委员会在1958年设计的基础上,定义了一种新的语言版本——国际代数语言ALGOL 60,首次引进了局部变量和递归的概念。 ALGOL语言没有被广泛运用,但它演变为其他程序语言的概念基础。

20世纪60年代中期, 美国达特默斯学院约翰·凯梅尼 (J. Kemeny) 和托马斯·卡茨(T.Kurtz) 认为,像FORTRAN那样的语言都是为专业人员设计,而他们希望能为无经验的人提供一种简单的语言,特别希望那些非计算机专业的学生也能通过这种语言学会使用电脑。于是, 他们在简化FORTRAN的基础上, 研制出一种“初学者通用符号指令代码”(Beginner’s All purpose Symbolic Intruction Code) ,简称BASIC。由于BASIC语言易学易用, 它很快就成为最流行的电脑语言之一,几乎所有小型电脑和个人电脑都在使用它。经过不断改进后,它一直沿用至今,出现了象QBASIC、VB等新一代BASIC版本。

1967年,麻省理工学院人工智能实验室希摩尔·帕伯特(S.Papert) ,为孩子设计出一种叫LOGO的电脑语言。帕伯特曾与著名瑞士心理学家皮亚杰一起学习。他发明的LOGO最初是个绘图程序,能控制一个“海龟”图标,在屏幕上描绘爬行路径的轨迹,从而完成各种图形的绘制。帕伯特希望孩子不要机械地记忆事实,强调创造性的探索。他说:“人们总喜欢讲学习,但是,你可以看到,学校的多数课程是记忆一些数据和科学事实,却很少着眼于真正意义上的学习与思考。”他用LOGO语言启发孩子们学会学习,在马萨诸塞州列克星敦,一些孩子用LOGO语言设计出了真正的程序,使LOGO成为一种热门的电脑教学语言。

1971年,瑞士联邦技术学院尼克劳斯·沃尔斯(N. Wirth) 教授发明了另一种简单明晰的电脑语言,这就是以帕斯卡的名字命名的PASCAL语言。PASCAL语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。它一出世就受到广泛欢迎,迅速地从欧洲传到美国。沃尔斯一生还写作了大量有关程序设计、算法和数据结构的著作,因此,他获得了1984年度图林奖。Pascal语言不仅用作教学语言,而且也用作系统程序设计语言和某些应用。所谓系统程序设计语言,就是用这种语言可以编写系统软件,如操作系统、编译程序等。Pascal语言是一种安全可靠的语言。不过它的后继者Delphi已经成为最有生命力的编程语言之一,同时具有VB和C语言的优点,成为聪明的编程者的必然选择。

1983年度的图林奖则授予了AT&T贝尔实验室的两位科学家邓尼斯·里奇 (D.Ritchie) 和他的协作者肯·汤姆森(K. Thompson) ,以表彰他们共同发明著名的电脑语言C。C语言的设计哲学是“Keep It Simple,Stupid”,因而程序员可以轻易掌握整个C语言的逻辑结构而不用一天到晚翻手册写代码。于是,众多的Programmer倒向了C语言怀抱,C语言迅速并广泛地传播开来。C语言现在是当今软件工程师最宠爱的语言之一。

里奇最初的贡献是开发了Unix操作系统软件。他说,这里有一个小故事:他们答应为贝尔实验室开发一个字处理软件,要求购买一台小型电脑PDP-11/20,从而争取到10万美元经费。可是当机器购回来后,他俩却把它用来编写Unix系统软件。Unix很快有了大量追随者,特别是在工程师和科学家中间引起巨大反响,推动了工作站电脑和网络的成长。1970年,作为Unix的一项“副产品”,里奇和汤姆森合作完成了C语言的开发,这是因为研制C语言的初衷是为了用它编写Unix。这种语言结合了汇编语言和高级语言的优点,大受程序设计师的青睐。1983年,贝尔实验室另一研究人员比加尼·斯楚士舒普(B.Stroustrup) ,把C语言扩展成一种面向对象的程序设计语言C++。如今,数以百万计的程序员用它来编写各种数据处理、实时控制、系统仿真和网络通讯等软件。斯楚士舒普说:“过去所有的编程语言对网络编程实在太慢,所以我开发C++,以便快速实现自己的想法,也容易写出更好的软件。”1995年,《BYTE》杂志将他列入计算机工业20个最有影响力的人的行列。
發表於 2006-3-21 21:33:40 | 顯示全部樓層
我来补充一下(网摘)

==================================================================

Java的诞生及其历史影响
Java是Internet上的世界语。
Java是最佳的网络应用开发语言。
Java的诞生,从根本上解决了Internet的异质,代码交换,以及网络程序的
安全性等诸多问题。首先,Java是一种平台无关语言。Java程序编译后,
生成字节代码(byte-code),运行在Java虚机器(实际上是一个解释器)上。一
个操作系统平台只要提供Java虚机器,Java程序就可以在上面运行。从理
论上讲,Java程序可以运行于所有的操作系统平台上,从根本上解决了
Internet的异质问题。其次,Java采用了可移动代码技术,在网络上不仅可
以进行无格式的数据信息交换,而且可以进行程序交换。Java是比较纯的
面向对象语言,它的绝大多数程序实体都是对象,利用对象的封装性可以
大大降低网络上程序交换的复杂性。第三,Java可以和HTML(HyperText
MarkupLanguage)无缝的集成,把静态的超文本文件变成了可执行的应用程
序,极大地增强了超文本的可交互操作性。最后,Java是一种更安全的语
言,它消除了C和C++中众多的不安全因素,提供了诸多安全保障机制,
例如:异常处理,代码检查等,比其它语言更适合网络应用软件的开发。
Java不仅仅是一个程序设计语言,更是一个网络操作系统。这是因为:第
一,Java的可以不依赖于任何现有操作系统,可以直接运行在某种机器或
CPU上(例如:Java芯片,80x86);第二,Java有自己的内存管理功
能;第三,Java支持多线程程序,可以个用C实现的EMACS的文本编辑器。
在研究开发过程中,Gosling深刻体会到消费类电子产品和工作站产
品的开发哲学之间差异:消费类电子产品要求高可靠、费用低、标准化、
使用简单,而工作站用户要求强大的计算能力,而不在此乎价格以及操作
的复杂性。消费类电子产品用户并不关心CPU的型号,也不欣赏专用昂贵
的RISC处理器,他们需要建立在一个标准基础之上,一系列可选的方案,
从8086-80586都可以上。
从C++开始
为了使整个系统与平台无关,Gosling首先从改写C++编译器着手。但
是Gosling在改写过程中感到仅C++是无法满足需要的,于是在1991年6
月份开始准备开发一个新的语言,那么给它起一个什么名字呢?Gosling回
首向窗外望去,看见一棵老橡树,于是建一个目录叫Oak,这就是Java语
言的前身。(后来发现Oak已是Sun公司的另一个语言的注册商标,才改名
为Java,即爪哇,太平洋上一个盛产咖啡的岛屿的名字)。
Gosling在开始写Java时,并不局限于扩充语言机制本身,更注重用的顶置盒
式操作系统,但实践证明,这个市场尚未成熟。例如:好几家交互式有线
电视网的实验都以失败告终。
Naughton立即认识到研究方向应该转移。在Naughton的努力下,研究
开始向在线服务,CD-ROM和基于网络的台式机方向转移。最后
FirstPerson解散,一部分人去了SunInteractive开发数字视频数据服务器,
而另一部分开始把Java用于基于网络的台式机系统。
Java语言的转折点
到了1994年,WWW已如火如荼的发展起来。Gosling意识到WWW
需要一个中性的浏览器,它不依赖于任何硬件平台和软件平台。它应是一
种实时性较高,可靠安全,有交互功能的浏览器。于是Gosling决定用Java
开发一个新的Web浏览器。
这项工作由Naughton和Jonathan payne负责,到1994年秋天,完成了
WebRunner的开发工作。WebRunner是HotJava的前身,这个原型系统展
示了Java可能带来的广阔市场前景,给SunLab两位领导:BertSutherLand
和EricSchmidt留下深刻印象,这一点非常重要,因为这两个人是Sun的首
席技术官员。特别是Sun的总裁McNealy对Java抱有坚定的信念,为Java
进入WWW立下了汗马功劳。正如McNealy所料,WebRunner改名为
HotJava,并于1995年5月23日发表后,引起了产业界巨大的轰动,Java
的地位也随之而得到肯定。McNealy卓越的洞察力和果断的决策,挽救了
这项差点锁进文件柜的脊有C++的运算符重载和多继承也被排除在Java之外。Java
为了追求语言简单性的另一惊人之举,是把C程序员推崇倍至的指针取消
了。指针实际上是C和C++最容易出错的方面,往往有时出了错很难定位,
例如有一段C程序:
/*上面有若干行C代码*/
int*p,;
p=(int*)malloc(10*sizeof(int));
for(i=0;i*p++=0
/*下面有若干行C代码*/
......
a=index[n];/*index是一个整型数组*/
如果这段程序在前面不对end取值做检查,则极容易出错。当end>10
时,数组越界,在Unix中可能出现SegmentViolation错误,在DOS和
Windows环境中就可能“死机”。奏个class可以组成一个包(package)。Java
的class和C++的一样有层次结构,子类可以继承父类属性和方法。Java
类中的方法,均缺省为虚函数。Java的类是可以动态加载的。
由于Java是比较纯粹的面向对象语言,它没有支持C++的模板(template)
机制。我们大家都熟悉,在C++中可以定义一个模板类Stack,实现
个新类加载到当前环境中,这和传统程序开发的编
译、链接、测试有很大不同。这样的好处是支持快速原型开发,特别是字
节代码中带有编译时刻的信息,运行中出现错误很容易定位。
健壮性
Java的最初设计的目标是应用于电子类消费产品的控制,要求很高的
健壮性(Robust)。Java尽可能消除了C++的不可靠因素,可以防止许多编
程错误,因而更容易写出健壮的软件。当然,完全可靠的系统单靠语言是
无法保证的。
Java是一种比C++还强的强类型语言。Java要求显式的方法声明,这
保证了编译器可以发现方法调用错误,保证了程序更加可靠。
Java内存模型是提高程序可靠性最重要手段。Java不支持指针,这杜
绝了内存的非法访问。Java自动的无用单元收集防止了内存丢失等动态内
存分配所导致的问题。Java解释器运行时也实施检查,可以发现数组和字
符串访问的越界。
异常处理是Java保证程序健壮性的另一重要手段。一般认为,异常处
理是成熟语言的标志。异常是一个信号,这样开发的程序很容易在多种平台上使用。
可移植
平台无关性本身就提供了一种良好的可移植(Portable)。Java还提供
了实现无关性(noimplementationdependent),例如:Java中的原始数据类型
的长度在任何平台上都一样。Java环境本身对硬件平台和操作系统也是可
移植的。Java的编译器是用Java写的,Java的运行系统是用ANSIC写的。
高性能
Java是一个解释型语言。众所周知,解释型语言除不可能达到编译型
语言的速度外,其它性能(例如:可根据运行的上下文和当前值决定执行
走向等)并不逊色于编译型语言。实际上,Java程序平均要比C慢20倍。
为了解决高性能(High-performance)问题,Java的设计者们正在开发
“Justintime”编译器,这种编译器可以在运行时把Java的字节代码翻译
成特定CPU的机器码。SUN申称转化成机器码的字节代码在性能上接近
于C或C++。
多线程
Java是一个多线程(Multithreaded)语言,它可以同时运行多个线程处
理多个任务。多线程技术可以提高图形用户界面的交互性能。使用C或C++
开发多线程应用程序往往是令人头痛的。首要的困难是要保证多个例程可
被若干并发线程运行。如果一个例程改变了状态变量的值,那么一次只可
能有一个线程执行。用C和C++编写多线程应用程序,需要程序员负责例
程的锁定与释放。这种显式地控制锁的方式一方面繁琐,另一方面又极易
产生死锁。
Java提供了语言内置的多线程控制,从而大大简化了多线程应用程序
的开发。Java的Java.lang包提供了一个类Thread,由它负责启动一个线
程,运行一个线程,终止一个线程,检查线程状态。
Java的线程支持还包括一组同步原语。罩网络编程。包括套接字(soc
ket),Internet地址,网
络数据包,统一资源定位URL(UniformResourceLocator)等。
java.util。由一些通用的数据结构工具类组成,包括目录树、hash表、
日期、栈、位集、字符串等。虽然这个包没有某些商品C++库覆盖面广,
但可以胜任大多数网络应用程序的开发。
3运行动的无用单元收集,程序无需显示释放占有的空间,无用单元自动回
收的算法依赖于虚机器最终实现的硬件环境。
Java虚机器的方法区是编译后的代码区域,它包括方法代码、符号表
符等。
4Java带来的影响
Java作为语言,在Internet上已是灸手可热,大有“听取蛙声一片”的
气势。虽然新闻界的报导有些言过其辞,但勿庸置疑的是,Java作为软件
开发的一种革命性的技术,其地位已被确立,这表现在以下几个方面:
(1)计算机界的许多大公司已经购买了Java的许可证,包括IBM,
Apple,DEC,Adobe,SiliconGraphics,HP,Oracle,Toshiba,
Netscape以及最不情愿的Microsoft。Microsoft已在其Web浏览器
Explorer3.0版中增加了对Java的支持。这一点说明,Java已得到了工业界
的认可。
(2)众多的软件开发商开始开发支持Java的软件产品。例如:Borland
公司正在开发的基于Java的快速应用程序开发环境Latte,预计产品会在
1996年中期发布。Borland公司的这一举措,推动了定的硬件平台,操作
系统以及网络环境,软
件的可移植性差,软件之间的通讯基本上限于数据通讯,无法进行代码的
交换。随着Internet的发展,以网络为中心的计算普及,客观上,需要一种
独立于平台的,代码可移动的计算技术,Java恰恰填补这一空白,这把
Wintel垄断的软硬件市场打开了一个巨大的缺口,引发了一场软件开发的
革命。
我们可以设想未来的计算方式,每个HomePage的实质是一个多媒体
应用程序,这些程序用Java来开发。Java应用程序运行在异质的机器、异
质的操作系统之上,甚至于电冰箱,烤面包箱,防盗电子设备之中,用Internet
把所有的电子设备连接起来,通过T发商也会大幅度降低销售成本。软件
的销售将变成类似杂志订阅活动。
对应用软件开发的影响
以前的应用软件开发商,为了使应用软件通用,通常要维护若干个操
作系统的版本,如:DOS的,Windows3.1的,Windows95的,Solari2.0
的等等,这是一个很大的开销。采用Java后,这些开销会大幅度削减,
保证正确的数据访问,接受用户对数据的
修改。有关OpenDoc的基本技术和方法是美国加州构件集成实验室
(ComponentIntegrationLabs)完成。商品化的产品主要由Apple,IBM开发。
Java作为分布式对象技术远比OpenDoc和OCX要简单得多,关键是
在于Java提供一代码的可移动性和平台无关性。胜人一筹之处在于,网络
信息交换可以是数据信息,也可以是程序实体,是一项最有前途的分布式
对象技术。
Java连同Internet,WWW改变应用软件的开发和使用方式,一切都
要围绕着网络,围绕着平台无关。Word、Excel等传统的信息处理工具都
必然走向萎缩,因为它们是单机时代的产物。信息的价值在于使用和共享,
Internet和Web是信息的使用和共享最快捷、最便宜的方式,Word将演化
成为Web写作工具,Excel则将演化成Web上的电子表格。

==============================================================================

本人学java为主,c++为辅

请多多指教

[ 本帖最后由 Tiyz 于 2006-03-21 21:36:55 编辑 ]
您需要登錄後才可以回帖 登錄 | 入住家園

本版積分規則

手機版|小黑屋|吳語書院

GMT+8, 2026-9-4 17:21 , Processed in 0.030636 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表