声明和转换. (当然在实战中,上面这个例子使用图形开发环境开发也 不需要写这么多代码. ) 看上去脚本语言好像比较容易出错,其实实战中,脚本语言的安全程度和系 统编程语言一样高. 例如, 上述 tcl 程序中字体的大小不是一个数字而是 xyz 时, 系统是能够检测出
来的.脚本语言在最后时刻才去检测错误,此时已经开始使用 这些特性值了.虽然强类型语言在编译阶段就发现错误,减少运行时的消耗,但 是这样的代价是增加限制,编写更多的代码,牺牲程序的灵活性.
脚本语言是解释性语言
与需要编译的系统编程语言相比,脚本语言的另一个特定是它是解释性语言. 解释性语言使得在开发过程中编程可以不断反复,而不需要考虑编译的时间.解 释器也能够运行程序在运行时有很大的灵活性. 脚本语言没有
系统编程语言那样有效率.一部分原因是因为这种语言需要在 运行时进行解释,另一部分原因是脚本语言连接的是组件而不是直接操作硬件. 例如,脚本语言经常使用可变长度字符串,而系统编程语言使用二进制值直接适 应于一个机器 word 中,脚本语言使用哈希表而系统编程语言使用索引数组. 幸运的是,脚本语言的性能问题不是关键问题.用于脚本语言的应用通常都 不大,其性能常常取决于它所用到的组件,而这些组件常常是用系统编程语言编 写的. 由于脚本语言的一行代码能够做更多的事情,所以可以认为脚本语言是比系 统编程语言更高级的语言.一行脚本语言语句可以等效成成百上千的机器指令. 一部分原因是脚本语言使用解释器, 而另一部分原因是脚本语言的原始操作符功 能更强.例如,perl 调用整数加和减的表达式是一样容易.在 TCL 中,一个变量 带有一个追踪关联,如果设定一个变量的值反而会有副作用.例如,一个 trace 可能持续地在页面上更新一个变量. 脚本语言使得粘结式应用开发成为可能.表一中描述了几种不同应用使用系 统编程语言和脚本语言开发比较.可以看出,脚本语言开发的代码少,开发时间 短,比例 2-60 倍.脚本语言的优势在首次开发时并没有优势.脚本语言的优势
依赖于应用.在表一的最后一个例子中,GUI 是用脚本语言,而模拟器则不是. 表中的信息由 comp.lang.tcl.newsgroup 提供.
不同的工作不同的工具.
脚本语言不是系统编程语言的替代者.系统语言也不是脚本语言的替代者. 它们完成的是各自不同的任务.对于粘接和系统集成,使用脚本语言开发效率会 比是使用系统语言高 10 倍.而对于复杂的算法和数据结构,使用系统编程语言 较好. 如果执行速度是关键, 那么使用系统编程语言可以提高 10-20 倍的速度, 因为不需要多少运行时的检查. 在选择采用系统编程语言还是脚本语言之前,需要回答以下一些
问题: 应用是连接已有应用组件吗? 应用要处理许多不同的事务吗? 应用是否包括 GUI? 应用是否需要处理大量的字符串? 应用是否需要应对大量的功能演化? 系统是否需要开展? 对上述问题的肯定性答案多,就需要使
用脚本语言.另一方面,如果对下述 问题的肯定性答案多,则需要使用系统编程语言. 系统是否实现复杂的算法和数据结构? 应用是否需要处理大的数据集,例如在一个图片中的 pixel,而且处理速 度很重要 系统功能定义的很好,今后变化不会太大?
在过去的 30 年里,大多数的计算平台都提供系统编程语言和脚本语言.例 如,OS360 上提供的工作控制语言 JCL,虽然很原始,但能够使得 OS360 的工作 步骤顺序执行.每个工作步骤用 PL1,fortran 或汇编编写的.1980 年代的 UNIX 机器上,C 是主要的系统编程语言,而 csh 则是 shell 脚本语言.在 PC 机时代,C 和 C++是主要的系统编程语言,VB 则是脚本语言.在 Internet 时代,Java 是系统 编程语言,
JavaScript,Perl,Tcl,Python,Ruby 等等则是脚本语言. 脚本语言和系统编程语言混合使用,功能是非常强大的.系统编程语言用来 开发组件,脚本语言把他们