脚本语言
- 格式:doc
- 大小:25.00 KB
- 文档页数:2
C语言是国际上广泛流行的,很有发展前途的计算机高级语言.它适合作为系统描述语言,即可用来编写系统
软件,也可用来编写应用软件.
早期的操作系统等系统软件主要是用汇编语言编写的(包括 UNIX操作系统在内).由于汇编语言依赖于计算
机硬件,程序的可读性和可移植性都比较差.为了提高可读性和可移植性,最好改用高级语言,但一般的高级语
言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作),例如:对内存地址的操作,位操作等).人
们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身.于是,C语
言就在这种情况下应运而生了.
C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL 60. 1960年出现的ALGOL 60是一种
面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序.1963年英国的剑桥大学推出了
CPL(CombinedProgram- ming Language)语言.CPL语言在ALGOL 60的基础上接近了硬件一些,但规模比
较大,难以实现.1967年英国剑桥大学的Matin Richards对 CPL语言作了简化,推出了BCPL(Basic
Combined Programming Language)语言.1970年美国贝尔实验室的 Ken Thompson以 BCPL语言为基础,
又作了进一步简化,设计出了很简单的而且很接近硬件的 B语言( 取 BCPL的第一个字母),并用 B语言写
第一个UNIX操作系统,在PDP-7上实现. 1971年在PDP-11/20上实现了B语言,并写了UNIX操作系统.
但B语言过于简单,功能有限.1972年至 1973年间,贝尔实验室的 D.M.Ritchie在B语言的基础上设计出了
C语言(取 BCPL的第二个字母).C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的
缺点(过于简单,数据无类型等). 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计
的.1973年,K.Thom- pson和D.M.ritchie两人合作把UNIX的90%以上用 C改写(UNIX第5版.原来的
UNIX操作系统是1969年由美国的贝尔实验室的 K.Thompson和D.M.Ritchie开发成功的,是用汇编语言
写的).
后来,C语言多次作了改进,但主要还是在贝尔实验室内部使用.直到1- 975年UNIX第6版公布后 ,C语言
的突出优点才引起人们普遍注意.1977年出现了不依赖于具体机器的C语言编译文本《可移植C语言编译
程序》,使C移植到其它机器时所做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实
现.例如,VAX,AT&T等计算机系统都相继开发了UNIX.随着 UNIX的日益广泛使用,C语言也迅速得到推
广.C语言和UNIX可以说是一对孪生兄弟,在发展过程中相辅相成.1978年以后,C语言已先后移植到大,中,
小,微型机上,已独立于UNIX和PDP了.现在C语言已风靡全世界,成为世界上应用最广泛的几种计算机语
言之一.
以1978年发表的UNIX第7版中的C编译程序为基础,Brian W.Kernighan和 Dennis M.Ritchie(合称K&R)
合著了影响深远了名著《The C Programming Lan- guage》,这本书中介绍的C语言成为后来广泛使用的
C语言版本的基础,它被称为标准C.1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对C
的发展和扩充 ,制定了新的标准,称为ANSI C.ANSI C比原来的标准C有了很大的发展.K&R在1988年修
改了他们的经典著作《The C Progra- mming Language》 ,按照ANSI C的标准重新写了该书.1987年,ANSI
C又公布了新标准--87 ANSI C .目前流行的C编译系统都是以它为基础的.
脚本语言
脚本语言,像Perl,Python,Rexx,Tcl,Visual Basic和Unix shells代表了与系统程序设计语言完全不同的编程.
脚本语言假设已经存在了一系列由其他语言写成的有用的组件.脚本语言不希望随机地产生请求,他希望主
要是把组件接在一起.例如,Tcl和Visual Basic可以被用于在屏幕上安排一系列用户图形控制,而Unix shells
scripts被用于把过滤程序集合入管道.脚本语言常用于扩展组件特性,但他们很少用于复杂的算法和数据结
构;这些东西常由组件提供.脚本语言有时涉及胶着语言或系统整体语言.
为了简化连接组件的工作,脚本语言被设计为无类型的:所有的东西无论是看起来还是使用起来都是完全一
样的,因此他们可以互换.例如,在Tcl或Visual Basic中一个变量可以一会儿处理字符串,一会儿又处理整型.
代码和数据也常可互换,因此,可以用一个程序写另一个程序,然后高速执行,脚本语言一般是面向字符的,因
为它为许多不同的事物提供了一致的描述.
无类型语言使组件更容易连在一起.在使用时没有优先级限制,并且所有的组件及其值都用统一的方式描述.
除此之外,任何组件和值都可以在任何情况下使用;为某一目的而设计的组件可以被用于设计者完全没有预
见过的完全不同的目的.例如,在Unix shells中,所有的过滤程序从输入读入字节流,并把字节组成的字符串
写入输出;任何两个程序都可以通过把一个的输出连到另一个的输入而把两者联系起来.
脚本语言和系统程序设计语言的另一个重要不同是脚本语言是被解释而系统程序设计语言是被编译.被解
释的语言由于没有编译时间而提供快速的转换.通过允许用户运行时编写应用程序,解释器使.应用程序更加
灵活,例如,许多整体线路的综合分析工具,包括Tcl解释器;程序用户编写Tcl 脚本来使他们的设计具体化并
控制工具操作.通过快速设计代码解释器可以实现强大的功能.例如,一个基于Tcl的网页浏览器可以通过把
网页中的HTML转换为使用一些常规表达替代物的Tcl脚本,从而从语法上分析网页然后执行脚本把页面翻
译显示在屏幕上.
脚本语言不如系统程序设计语言效率高,部分是因为他们使用解释器而不是编译器,而且因为他们基本组件
的选择标准是功能强大和易于使用而不是有效地对应基本硬件.例如,脚本语言经常使用长度可变的字符串,
而同样的情况下系统程序设计语言使用对应一个机器字的二进制值;脚本语言经常使用哈希表,而系统程序
设计语言使用变址阵列.
幸运的是,脚本语言的性能不经常是一个主要的问题.脚本语言应用程序通常比系统程序设计语言的应用程
序要小,并且脚本应用程序的执行受组件执行的支配,而这些组件是系统程序设计语言提供的典型工具.
脚本语言比系统程序设计语言更高级,平均一个指令可以做更多的工作.一个典型的脚本语言指令执行成百
上千条机器指令,而一个典型的系统程序设计语言指令执行大约五条机器指令(参图一).部分不同是因为脚
本语言使用翻译器,这不如系统程序设计语言中被编译的代码.但是主要的不同是因为脚本语言的初期操作
有更强大的功能.例如,Perl中唤醒一个常规表达替代和唤醒一个整型加法一样简单.在Tcl中,变量会有与它
相联系的图标,因此,设置变量会导致侧面影响.例如,一个图标可能会被用于保持变量的值在屏幕上持续更
新.