脚本语言与混合编程

上传人:kms****20 文档编号:41184266 上传时间:2018-05-28 格式:DOC 页数:8 大小:34.50KB
返回 下载 相关 举报
脚本语言与混合编程_第1页
第1页 / 共8页
脚本语言与混合编程_第2页
第2页 / 共8页
脚本语言与混合编程_第3页
第3页 / 共8页
脚本语言与混合编程_第4页
第4页 / 共8页
脚本语言与混合编程_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《脚本语言与混合编程》由会员分享,可在线阅读,更多相关《脚本语言与混合编程(8页珍藏版)》请在金锄头文库上搜索。

1、脚本语言与混合编程脚本语言与混合编程本文由 banpeiyong 贡献doc 文档可能在 WAP 端浏览体验不佳。建议您优先选择 TXT,或下载源文件到本机查看。脚本语言: 脚本语言:21 世纪的高级编程语言Sun 公司 John K. Ousterhout 著 武占春 编译随着计算机速度的提高以及对应用快速变更的要求,脚本语言变得越来越重 要了.与系统编程语言不同,脚本语言的作用是把应用“沾“在一起,从而使得 它们比系统语言能够更快的开发出应用程序来. 脚本语言的设计初衷与系统语言是不同的.系统语言的目的是从无到有编写 数据结构和算法,例如从利用内存里的一个 word 开始.与之相反,脚本语

2、言的 目的是“粘连“ .脚本语言假设已经存在一批功能强劲的组件,而脚本语言则把 它们连接在一起.系统语言是强类型语言,这样才能有效管理程序的复杂性.而 脚本语言是无类型的,这样才能简化组件之间的连接,提高开发速度. 系统语言和脚本语言是互补的. 1960 年代以来的计算平台都包括了这两种编 程语言.这些语言同时在一个组件框架下使用:组件由系统语言编写,再用脚本 语言粘连在一起.但是近年来的一些趋势,使得脚本语言变得越来越重要了.这 些趋势,如运行更快的机器,GUI 的发展,更好的脚本语言,Internet 的迅速发 展,良好的组件框架等等.这些趋势在下个十年还会是主旋律,今后,很多的应 用完全

3、是由脚本语言编写的,而系统语言则只是用来开发应用组件.系统编程语言要想理解脚本语言和系统语言的区别,最好还是先回顾一下系统语言的发展 历程.系统语言的出现是为了替代汇编语言.使用汇编语言编程,程序需要反映 机器硬件的各个方面,汇编语言的每个语句都代表了一条机器指令,程序员需要 处理诸如寄存器,过程调用顺序等底层问题.结果是,编写和维护汇编语言程序 非常困难. 1950 年代后期,高级编程语言,如 LISP,FORTURN,ALGOL 开始出现.这些 语言的语句不再与机器指令一一对应, 而是由编译器负责把语句转换成一系列二 进制指令.经过一段时间的发展,出现了一系列系统语言,从 ALGOL,到

4、PL/1, PASCAL,C,C+和 Java.系统语言没有汇编语言那样高效,但能够很快的编写出 应用程序来,所以后来系统语言实际上几乎完全取代了汇编语言.高级语言系统编程语言与汇编语言的差异体现在两个方面.系统编程语言是高级语言, 是强制类型的.所谓“高级“指的是很多细节是被自动处理的,所以程序员只需 编写较少的代码就能完成任务.例如: 寄存器分配由编译器处理,这样程序员就不用编写程序让信息在寄存器和内存之间移动.进程调用是自动生成的,程序员不必为在堆栈中移动参数而劳神. 程序员使用简单的关键字如 while 和 if 进行程序结构控制,编译器生成所有 详细的指令去实现这些控制结构. 平均而

5、言,一行系统编程语言可以等效为 5 行机器指令,而汇编语言中一行 程序等于一行机器指令. (在一次非正式分析中,我发现一行 C 程序等效于 3-7 行机器指令.Caper Jones 的数据是 3-6) .一个程序员不管用什么语言编程,他 一年能写出来的代码行数是一定的.因此,使用高级语言能够比汇编语言更快的 开发出应用来.类型化汇编语言与系统编程语言的另一个区别是类型.我使用“类型化“ (typing) 这个词儿,用来表征信息在使用前被明确定义的程度.在强类型语言中,程序员 需要定义每一个要用到的信息类型,防止这些信息另作它用.在弱类型语言中, 信息不是预先被定义出来,而是在使用这些信息时才

6、确定下来. 现代计算机基本上都是无类型的.内存中的每个 word 可以保留任何一种类 型的值,可以是 Integer,floating-point,一个 pointer 或者是一个指令.值的含 义是在使用的时候确定下来的.如果程序在内存的 word 中遇到了指针,则把它 当作指令,如果一个 word 被引用 Integer+指令则它被当作一个整数.同一个 word 在不同时间被用作不同用途.与之相反,系统编程语言则是强类型的.例 如:系统编程语言中的每个变量必须被声明为某种特定的类型,如 integer 或指 向 string 的指针等. 变量可以集合起来定义成为 structs 或者对象,

7、里面有定义好的结构以及操作 的方法一种类型的对象不可能被另一种对象使用. 这种强类型是有它的优势的.首先,它让大型程序变得可管理.因为强类型 明确了一个事务如 何被使用,区分了事 务本身及其使用方 式.第二,编译器使 用类型信息检测可 能的错误,比如使用 floating point 作为一 种指针类型就是错 误的.第三,类型能 够让编译器生成特 定的代码从而提高 了性能.例如,如果 编译器知道一个变 量经常保存的是 integer 值,编译器就 可以生成一个整数指令去操作这个变量. 如果编译器不知道这个变量是 integer, 那么它就要生成大量多余代码用于在运行时检测这个变量的类型.脚本语

8、言脚本语言,比如 Perl,Python,Rexx,Tcl,VB,Unix 的 shell 等代表了与系统 编程语言不同的语言类型. 脚本语言假定一些有用的组件已经由其它语言编写完 毕了.脚本语言不是从无到有地编写应用,而是把已有的组件组装起来.例如, tcl 和 VB 能够把 UI 控件组合起来,Unix 的 shell 脚本可以把过滤器程序组装到 pipeline 里.而且,脚本语言常常用来扩展组件的特性.但是,脚本语言很少用 来编写复杂的算法和数据结构.脚本语言有时称为胶水语言或系统集成语言.脚本语言一般而言是无类型语言为了简化连接组件的任务,脚本语言一般是无类型的.无类型语言能够更容

9、易把连接在一起.没有预先的限制约束事务如何被使用,所有的组件和值都使用 统一的表示方式.组件可以用其在设计者想象不到的地方.例如,Unix 的 shell 可以让所有的过滤器程序从输入读入一个字节流,然后写入一个输入流中.任何 两个程序都可以把其中一个输入与另一个程序的输出连接起来. 下面的一段 shell 命令中,可以把三个过滤器连在一起统计其中的文字“scripting“ Select | grep scripting | wc Select 程序读取从显示而来的文本,打印到它的输出中;grep 程序从它的输 入中读取带有 scripting 的文本打印到它的输出中,wc 则从中记录. 强

10、类型的系统编程语言则不鼓励重用,它鼓励的是每个程序员编写不兼容的 接口,每个接口需要特定类型的对象,编译器要防止其接口被其它对象使用.为 了使用新对象的接口,程序员需要编写转换代码.这就需要重新编译整个应用, 而现今许多应用是以二进制形式存在的,这样的重新编译实际上是不可行的. 我们利用下面的 Tcl 代码展示无类型语言的优势. button.b text Hello! fontTimes 16 command puts hello 这个命令创建了一个 Button 控件,能够显示一个 16 号大小的 Times 字,当 用户点击这个 Button 时,一个短消息就显示出来了.这个命令包括了

11、6 个不同 类型的事务:一个命令名称(button) ,一个 button(.b),特性名称(-text, -font, -command),简单的字符串(Hello! hello), 一个字体名称(times 16) ,一个 Tcl 脚本 puts hello.Tcl 完全使用字符串表现所有上述事务.在这个例子中,特性可 以用任意顺序定义,没有定义的特性使用缺省值.在这个例子中,有 20 个特性 没有定义. 这个例子用 Java 写得用两个方法,7 行代码.用带有 MFC 的 C+得写 25 行 代码和 3 个过程.下面是 C+中用于设定字体的代码就得象下面的代码这样CFont *fontP

12、tr = new CFont(); fontPtr-CreatFont(16,0,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, “Times New Roman“) ; buttonPtr-SetFont(fontPtr) 使用这么多行代码的原因是强制类型造成的. 要设置 button 的字体, 需要调 用 SetFont 方法,但是这个方法必须传递来一个指向 CFont 的指针值.这就会建 立并初始化一个新的对象,为

13、了初始化 CFont 对象,它的 CreatFont 方法必须被 调用.而 CreateFont 有个严格定义的接口,需要 14 个不同的参数.而在 Tcl 中不 需要这些声明和转换. (当然在实战中,上面这个例子使用图形开发环境开发也 不需要写这么多代码. ) 看上去脚本语言好像比较容易出错,其实实战中,脚本语言的安全程度和系 统编程语言一样高. 例如, 上述 tcl 程序中字体的大小不是一个数字而是 xyz 时, 系统是能够检测出来的.脚本语言在最后时刻才去检测错误,此时已经开始使用 这些特性值了.虽然强类型语言在编译阶段就发现错误,减少运行时的消耗,但 是这样的代价是增加限制,编写更多的

14、代码,牺牲程序的灵活性.脚本语言是解释性语言与需要编译的系统编程语言相比,脚本语言的另一个特定是它是解释性语言. 解释性语言使得在开发过程中编程可以不断反复,而不需要考虑编译的时间.解 释器也能够运行程序在运行时有很大的灵活性. 脚本语言没有系统编程语言那样有效率.一部分原因是因为这种语言需要在 运行时进行解释,另一部分原因是脚本语言连接的是组件而不是直接操作硬件. 例如,脚本语言经常使用可变长度字符串,而系统编程语言使用二进制值直接适 应于一个机器 word 中,脚本语言使用哈希表而系统编程语言使用索引数组. 幸运的是,脚本语言的性能问题不是关键问题.用于脚本语言的应用通常都 不大,其性能常

15、常取决于它所用到的组件,而这些组件常常是用系统编程语言编 写的. 由于脚本语言的一行代码能够做更多的事情,所以可以认为脚本语言是比系 统编程语言更高级的语言.一行脚本语言语句可以等效成成百上千的机器指令. 一部分原因是脚本语言使用解释器, 而另一部分原因是脚本语言的原始操作符功 能更强.例如,perl 调用整数加和减的表达式是一样容易.在 TCL 中,一个变量 带有一个追踪关联,如果设定一个变量的值反而会有副作用.例如,一个 trace 可能持续地在页面上更新一个变量. 脚本语言使得粘结式应用开发成为可能.表一中描述了几种不同应用使用系 统编程语言和脚本语言开发比较.可以看出,脚本语言开发的代

16、码少,开发时间 短,比例 2-60 倍.脚本语言的优势在首次开发时并没有优势.脚本语言的优势依赖于应用.在表一的最后一个例子中,GUI 是用脚本语言,而模拟器则不是. 表中的信息由 comp.lang.tcl.newsgroup 提供.不同的工作不同的工具.脚本语言不是系统编程语言的替代者.系统语言也不是脚本语言的替代者. 它们完成的是各自不同的任务.对于粘接和系统集成,使用脚本语言开发效率会 比是使用系统语言高 10 倍.而对于复杂的算法和数据结构,使用系统编程语言 较好. 如果执行速度是关键, 那么使用系统编程语言可以提高 10-20 倍的速度, 因为不需要多少运行时的检查. 在选择采用系统编程语言还是脚本语言之前,需要回答以下一些问题: 应用是连接已有应用组件吗? 应用要处理许多不同的事务吗? 应用是否包括 GUI? 应用是否需要处理大量的字符串? 应用是否需要应对大量的功能演化? 系统是否需要开展? 对上述问题的肯定性答案多,就需要使用脚本语言.另一方面,如果对下述 问题的肯定性答案多,则需要使用系统编程语言. 系统是否实现复杂的算法和数据结构? 应

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号