banpeiyong(
网学)贡献
脚本语言: 脚本语言:21 世纪的高级编程语言
Sun 公司 John K. Ousterhout 著 武占春 编译
随着计算机速度的提高以及对应用快速变更的要求,脚本语言变得越来越重 要了.与系统编程语言不同,脚本语言的作用是把应用"沾"在一起,从而使得 它们比系统语言能够更快的开发出应用程序来. 脚本语言的设计初衷与系统语言是不同的.系统语言的目的是从无到有编写 数据结构和算法,例如从利用内存里的一个 word 开始.与之相反,脚本语言的 目的是"粘连" .脚本语言假设已经存在一批功能强劲的组件,而脚本语言则把 它们连接在一起.系统语言是强类型语言,这样才能有效管理程序的复杂性.而 脚本语言是无类型的,这样才能简化组件之间的连接,提高开发速度. 系统语言和脚本语言是互补的. 1960 年代以来的计算平台都包括了这两种编 程语言.这些语言同时在一个组件框架下使用:组件由系统语言编写,再用脚本 语言粘连在一起.但是近年来的一些趋势,使得脚本语言变得越来越重要了.这 些趋势,如运行更快的机器,GUI 的发展,更好的脚本语言,Internet 的迅速发 展,良好的组件框架等等.这些趋势在下个十年还会是主旋律,今后,很多的应 用完全是由脚本语言编写的,而系统语言则只是用来开发应用组件.
系统编程语言
要想理解脚本语言和系统语言的区别,最好还是先回顾一下系统语言的发展 历程.系统语言的出现是为了替代汇编语言.使用汇编语言编程,程序需要反映 机器硬件的各个方面,汇编语言的每个语句都代表了一条机器指令,程序员需要 处理诸如寄存器,过程调用顺序等底层问题.结果是,编写和维护汇编语言程序 非常困难. 1950 年代后期,高级编程语言,如 LISP,FORTURN,ALGOL 开始出现.这些 语言的语句不再与机器指令一一对应, 而是由编译器负责把语句转换成一系列二 进制指令.经过一段时间的发展,出现了一系列系统语言,从 ALGOL,到 PL/1, PASCAL,C,C++和 Java.系统语言没有汇编语言那样高效,但能够很快的编写出 应用程序来,所以后来系统语言实际上几乎完全取代了汇编语言.
高级语言
系统编程语言与汇编语言的差异体现在两个方面.系统编程语言是高级语言, 是强制类型的.所谓"高级"指的是很多细节是被自动处理的,所以程序员只需 编写较少的代码就能完成任务.例如: 寄存器分配由编译器处理,这样程序员就不用编写程序让信息在寄存器和内
存之间移动.进程调用是自动生成的,程序员不必为在堆栈中移动参数而劳神. 程序员使用简单的关键字如 while 和 if
进行程序结构控制,编译器生成所有 详细的指令去实现这些控制结构. 平均而言,一行系统编程语言可以等效为 5 行机器指令,而汇编语言中一行 程序等于一行机器指令. (在一次非正式分析中,我发现一行 C 程序等效于 3-7 行机器指令.Caper Jones 的数据是 3-6) .一个程序员不管用什么语言编程,他 一年能写出来的代码行数是一定的.因此,使用高级语言能够比汇编语言更快的 开发出应用来.
类型化
汇编语言与系统编程语言的另一个区别是类型.我使用"类型化" (typing) 这个词儿,用来表征信息在使用前被明确定义的程度.在强类型语言中,程序员 需要定义每一个要用到的信息类型,防止这些信息另作它用.在弱类型语言中, 信息不是预先被定义出来,而是在使用这些信息时才确定下来. 现代计算机基本上都是无类型的.内存中的每个 word 可以保留任何一种类 型的值,可以是 Integer,floating-point,一个 pointer 或者是一个指令.值的含 义是在使用的时候确定下来的.如果程序在内存的 word 中遇到了指针,则把它 当作指令,如果一个
word 被引用 Integer+指令则它被当作一个整数.同一个 word 在不同时间被用作不同用途.与之相反,系统编程语言则是强类型的.例 如:系统编程语言中的每个变量必须被声明为某种特定的类型,如 in