脚本语言

脚本语言 100100110010:通用脚本语言 1001001100100:shell脚本 10010011001000000:bash 10010011001000001:DOS Command.com batch 10010011001000010:REXX 10010011001000011:sh 10010011001000100:AppleScript 10010011001000101:Windows PowerShell WindowsPowerShell 10010011001000110:Windows Script Host 10010011001000111:Cmd.exe batch 10010011001001000:4NT 10010011001001001:ARexx Amiga Rexx 10010011001001010:csh 10010011001001011:DCL 10010011001001100:JCL 10010011001001101:ksh 10010011001001110:tcsh 10010011001001111:其他shell脚本:Winbatch,zsh,Basic

1001001100101:动态脚本 10010011001010000:Perl 10010011001010001:PHP Eclipse Zend Apache10010011001010010:Python 10010011001010011:Ruby 10010011001010100:Smalltalk 10010011001010101:Tcl TclTK10010011001010110:SuperCard 10010011001010111:Scheme 10010011001011000:APL 10010011001011001:Dylan 10010011001011010:Groovy 10010011001011011:MUMPS 10010011001011100:newLISP 10010011001011101:Nuva 10010011001011110: 10010011001011111:

100100110011:领域脚本语言 1001001100110:扩展嵌入脚本 1001001100111:程序定制脚本 10010011001100:GUI脚本:AutoHotkey; autoitNSIS Expect 10010011001101: 10010011001110:web编程脚本: 10010011001111:文本处理脚本:AWK ; Perl ; sed ; XSLT

1001001100111:程序定制脚本 10010011001110000:ActionScript 10010011001110001:Lingo 10010011001110010:AutoLISP 10010011001110011:Visual Basic for Applications 10010011001110100:ASP VIDVisualInterDev VSSVisualSourceSafe10010011001110101:JSP 10010011001110110:VBScript 10010011001110111:其他web编程脚本:CFColdFusion ColdFusion (Application Server) ; Lasso ; Miva ; SMX ; IPTSCRAE 10010011001111000:Emacs Lisp 10010011001111001:Game Maker Language 10010011001111010:HyperTalk 10010011001111011:IPTSCRAE 10010011001111100:IRC script 10010011001111101:QuakeC 10010011001111110:NWscript 10010011001111111:其它程序定制脚本:Maya Embedded Language,BlobbieScript,Action Code Script,mIRC script,UnrealScript,ZZT-oop

1001001100110:扩展嵌入脚本 10010011001100000:扩展嵌入脚本 10010011001100001:JavaScript 10010011001100010:JScript10010011001100011:Lua 10010011001100100:TclTK 10010011001100101:RBScript(REALbasic Script) 10010011001100110:Ch (C/C++ interpreter) SlickEdit 10010011001100111:ECMAScript a.k.a. DMDScript 10010011001101000:GameMonkeyScript 10010011001101001:Guile 10010011001101010:ICI 10010011001101011:Squirrel 10010011001101100:Z-Script 10010011001101101: 10010011001101110: 10010011001101111:

一,概述

脚本语言(Script languages,scripting programming languages,scripting languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的,使得本来要用键盘进行的相互式操作自动化的计算机编程语言。

此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批处理语言或工作控制语言。虽然现在许多脚本语言都超越了计算机简单任务自动化的领域(简单的用户命令序列的指令),成熟到可以编写精巧的程序,但仍然还是被称为脚本。几乎所有计算机系统的各个层次都有一种脚本语言。包括操作系统层,如计算机游戏,网络应用程序,字处理文档,网络软件等。在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。

二,特性

计算机语言是为了各种目的和任务而开发的,一个常见任务就是把各种不同的已有组件连接起来以完成相关任务。大多脚本语言共性是:良好的快速开发,高效率的执行,解释而非编译执行,和其它语言编写的程序组件之间通信功能很强大。

1,shell脚本语言:许多脚本语言用来执行一次性任务,尤其是系统管理方面。它可以把服务组件粘合起来,因此被广泛用于GUI创建或者命令行,操作系统通常提供一些默认的脚本语言,即通常所谓shell脚本语言。一个Shell脚本主要由原本需要在命令行输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组序列。

2,通用脚本语言:有些脚本是为了特定领域设计的,但通常脚本都可以写更通用的脚本。在大型项目中经常把脚本和其它低级编程语言一起使用,各自发挥优势解决特定问题。脚本经常用于设计互动通信,它有许多可以单独执行的命令,可以做很高级的操作,(如在传统的UNIX shell (sh)中,大多操作就是程序本身。)

dsl语言:(domain-specific programming language,domain-specific language, DSL)领域编程语言

gpl语言:(general-purpose programming language,general-purpose language, GPL)通用编程语言

3,灵活性及其代价:

A,简化编程:这些高级命令简化了代码编写过程。诸如内存自动管理和溢出检查等性能问题可以不用考虑。在更低级或非脚本语言中,内存及变量管理和数据结构等耗费人工,为解决一个给定问题需要大量代码,当然这样能够获得更为细致的控制和优化。脚本缺少优化程序以提速或者降低内存的伸缩性。

B,文件体积,脚本文件脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译,明显小于如同类C程序文件。

C, 执行效率代价:脚本通常是解释执行的,速度可能很慢,且运行时更耗内存。

D,在很多案例中,如编写一些数十行的小脚本,它所带来的编写优势就远远超过了运行时的劣势,尤其是在当前程序员工资趋高和硬件成本趋低时。

4,然而,在脚本和传统编程语言之间的界限越来越模糊,尤其是在一系列新语言及其集成畅出现时。在一些脚本语言中,有经验的程序员可以进行大量优化工作。在大多现代系统中通常有多种合适的脚本语言可以选择,所以推荐使用多种语言(包括C或汇编语言)编写一种脚本。

三,脚本语言分类

(一),工作控制语言和shell

通常也是一种shell脚本语言

此类脚本用于自动化工作控制,即启动和控制系统程序的行为。大多的脚本语言解释器也同时是命令行界面,如Unix shell和MS-DOS COMMAND.COM。其他如AppleScript,可以为系统增加脚本环境,但没有命令行界面。

具体分类有:4NT ; AppleScript ; ARexx (Amiga Rexx) ; bash ; csh ; DCL ; JCL ; ksh ; Cmd.exe batch (Windows, OS/2) ; Command.com batch (DOS) ; REXX ; tcsh ; sh ; Winbatch ; Windows PowerShell ; Windows Script Host ; zsh

(二),GUI 脚本语言

GUI出现带来一种专业的控制计算机的脚本语言。它在用户和图形界面,菜单,按钮等之间互动。它经常用来自动化重复性动作,或设置一个标准状态。理论上它可以用来控制运行于基于GUI的计算机上的所有应用程序,但实际上这些语言是否被支持还要看应用程序和操作系统本身。当通过键盘进行互动时,这些语言也被称为宏语言。

具体分类有:AutoHotkey; AutoIt; Expect

(三),应用程序定制的脚本语言

许多大型的应用程序都包括根据用户需求而定制的惯用脚本语言。同样地,许多电脑游戏系统使用一种自定义脚本语言来表现NPC(non-player character,non-playable character,non-player class)和游戏环境的预编程动作。

此类语言通常是为一个单独的应用程序所设计,虽然它们貌似一些通用语言(如QuakeC, modeled after C),但它们有自定义的功能。

具体分类:Action Code Script ; ActionScript ; AutoLISP ; BlobbieScript [1] ; Emacs Lisp ; Game Maker Language ; HyperTalk ; IPTSCRAE ; IRC script ; Lingo ; Maya Embedded Language ; mIRC script ; NWscript ; QuakeC ; UnrealScript ; Visual Basic for Applications ; VBScript ; ZZT-oop

(四),web编程脚本

应用程序定制的脚本语言中有一种重要的类别,用于提供WEB页面的自定义功能。它专业处理互联网通信,使用网页浏览器作为用户界面。当然,大多现代WEB编程语言都比较强大可以做一些通用编程。

具体分类:ColdFusion (Application Server) ; Lasso ; Miva ; SMX ; IPTSCRAE-一些网络开发团队用于创建论坛的工具.

(五),文本处理语言

处理基于文本的记录是脚本语言最早的用处之一。如Unix's awk最早是设计来帮助系统管理员处理调用UNIX基于文本的配置和LOG文件。PERL最早是用来产生报告的,现在它已经成了全面成熟的语言。

具体分类:AWK ; Perl ; sed ; XSLT

(六),通用动态语言

一些语言,比如PERL,从一门脚本语言发展成了更通用的编程语言。由于“解释执行,内存管理,动态”等特性,它们仍被称为脚本语言。但它们已经用于应用程序编写,用户也不把它们看作脚本语言。

具体分类: APL ; Dylan ; Groovy ; MUMPS (M) ; newLISP ; Nuva ; Perl  PHP ; Python ; Ruby ; Scheme ; Smalltalk ; SuperCard ; Tcl (Tool command language)

(七),扩展/可嵌入语言

少数的语言被设计通过嵌入应用程序来取代应用程序定制的脚本语言。开发者(如使用C等其它系统语言)包入使脚本语言可以控制应用程序的hook。这些语言和应用程序定制的脚本语言是同种用途,但优点在于可以在应用程序之间传递一些技能。

具体分类: Ch (C/C++ interpreter) ; ECMAScript a.k.a. DMDScript, JavaScript, JScript ; GameMonkeyScript ; Guile ; ICI ; Squirrel ; Lua ; Tcl ; RBScript (REALbasic Script) ; Z-Script

JavaScript直到现在仍然是网页浏览器内的主要编程语言,它的ECMAScript标准化保证了它成为流行的通用嵌入性语言。

Tcl作为一种扩展性语言而创建,但更多地被用作通用性语言,就如同Python, Perl, Ruby一样。

(八),其它

BeanShell (scripting for Java) ; CobolScript ; Escapade (server side scripting) ; Euphoria ; F-Script ; Ferite ; Groovy ; Gui4Cli ; Io ; KiXtart ; Mondrian ; Object REXX ; Pike ; Pliant ; REBOL ; ScriptBasic ; Shorthand Language ; Simkin ; Sleep ; StepTalk ; Visual DialogScript

四,脚本语言与数据库的连接技术

1,HTTP网关

有些HTML请求还需要HTTP服务器把自己的数据传到另一台服务器或别的应用数据库,而且这些请求还必须包括一些命令,以告诉HTTP服务器启动一个可在其主机上运行的专门程序。这些就需要用到HTTP网关。 现在用得最多的是公共网关接口(CGI)脚本,其他可选方案还有微软的Internet服务器应用程序接口(1SAPl),

Java Servlets。

客户端脚本

为了解决访问数据库时,保证有效处理带宽使用之间的矛盾,Web应用程序的开发者们同时在客户端和服务器端进行开发。

客户端脚本的过度使用,会形成庞大的文件并增加下载时间。

除了这些性能上的问题外,还存在固有的安全隐患。

2,公共网关接口–CGI

CGI是最普遍的网关,否则就称不上”Common”了。CGI工通过响应用户请求,处理用户提交的数据,把处理结果传递回用户。

CGI的优点:

CGI是一个历史悠久的解决方案,现在很多人都在用它,用Perl、 C++等编写的脚本在网络上大行其道,许多程序员都可以快速高效的开发CGI。

它的另外一个重要优点就是良好的可移植性。

CGI缺点:

. CGI的一个缺点是具有昂贵的进程开销,所有的脚本在服务器上是分立执行的。

. CGI的另一个缺点在于,如果程序编程的不是很完善,那将无法处理不明用户的请求。

. 除了具有昂贵的进程开销,CGI还带来安全问题。

. CGI脚本不能区分不同的会话,每一个会话都会打开一个新的进程。需要分配更多的CPU时间。

3,CGI服务器程序接口的选择

为解决CGI带来的问题,服务器开发者们设计了使用动态负载对象库的网关。

应用程序接口l(API)

一个API仅仅是供应用程序使用的一组函数。DOS的中断函数在技术上可以认为是DOS的API,如果你用database编写数据库程序,你使用的dbase函数也可以认为是dbase的API。

. 服务器应用程序接口(SAPI)

SAPI为CGI提供了一些解决方案。但是现今的网关都是独有的,即每种办法都捆绑在特定的生产厂家。

. 互联网服务器应用程序接 (ISAPl)

ISAPI是HTTP服务器扩展使用的,它允许服务器在没有CGI昂贵的进程开销的前提下执行程序。

ISAPI应用程序的主要优点就在于可以支持更多的客户请求同时对服务器没有很大的开销。

ISAPI的另一个好处是可以根据客户请求跟踪客户的状态。

、 NETSCAPE服务器应用程序接NSAPI

NSAPI同样是为HTTP服务器扩展使用的,允许服务器在没有CGI昂贵的进程开销的前提下执行程序。

.ISAPI和NSAPI脚本的存放

因为ISAPI和NSAPI都是用动态连接库,所以它们的文件都具有”.dll的扩展名,存储在操作系统或HTTP服务器的特定目录里。

4,CGI脚本解决方案的选择

流行的解决方案有:ActiveServerPages(ASP)、Netscape的Server-Suide JavScript(SSJS)、Allaire公司的ColdFusion这三种解决方案是需要购买授权的,还包括JavaServer Pages(JSP)、PersonalHomePage(PHP)-这两种则是免费的。

Active Server Pages(ASP)

ASP脚本易于编写和阅读,执行效率也很不错,与数据库的连接也很好,而且它可以和微软的其他产品完美的整合。

Server-Side Java Script(SSJS)

SSJS与ASP很是相似,同样使用对象,同样是解释型语言,同样可以嵌入在普通的HTML代码中, 同样需要购买授权。

SSJS的优点:

SSJS使用的Java Script语言远比ASP使用的VBScript语言流行,不少的互联网用户已经会写上几句客户端Java Script代码

SSJS需要EnterpriseServer支持,但是EnterpriseServer能在时下流行的所有操作系统上运行

Personal Home Page(PHP)

PHP现在很是流行,PHP是代码开放运动(open-source)的一面旗帜,这一运动的目标就是让用户可以免费的下载、使用、修改和复制各种应用和系统软件。

JavaServer Pages(JSP)

JSP的运行依赖JavaServlet(服务器上一种专用的Java语言,可以扩展服务器的功能)而不是解释程序,JSP使用的JavaServlet称为JSP引擎,JSP引擎司以运行在NT,Novell和大多数的UNIX平台上。

JSP具有以下优点:

1) JSP支持多线程。

2) JSPservlet可以存储已经执行的JSP文件所生成的数据。

六,Java Servlet

Servlets是基于HTTP服务器的Java补充服务,因为Java是一种编译型语言,冈此它远比普通的解释性脚本语言功能强大。

Java Servlet的特点

JavaServlet和许多脚本语言一样也使用对象 ,也具有平台无关性,不过JavaServlet具有一些特别的属性。

1) 拥有Servlet链接的功能。

2) 由Java语言建立,Java有脚本语言无法比拟的优势。

3) 还可以协同其它的服务器进行工作。

4) 可以将自身加载在备有虚拟机的其它系统上,这一优点可以让网络中的机器不通过镜像就可以实现负载平衡。

参见

Shell脚本学习笔记(一)--预备知识|

Scripting Languages 簡介|

为什么Script叫脚本|

Scala,静态类型,函数和面向对象语言|

AUTOIT CN autoit中文论坛|acn|autoit汉化版|autoit交流

Larry Wall是许多着名开源软件的作者,其中包括Perl脚本语言,他同时也是位风趣而博学的人。Larry Wall每年都会写一些关于语言的个人体会,许多观点见解独到,这里是他刚刚发布的[http://www.perl.com/pub/a/2007/12/06/soto-11.html 第11年度总结性报告]。 “基本上,脚本并非是技术术语。当我们称某物为脚本语言,我们主要是从语言和文学上作判断,而不是技术判断。在我看来,脚本是一种人文科学,语言是根。谈起这根….要回溯到Ada Lovelace的时代。如果你询问她脚本(script,剧本)和程序(program,节目)的区别。她看着你,可能会觉得很好笑。然后,她会说,剧本是给演员看的,节目是给观众看的。Ada Lovelace是位非常聪明的女士…….” Larry Wall从最基本的语言BASIC一个接一个的谈下去,在文章最后他有趣的写道,“什么是脚本语言的未来?我个人完全无偏见的观点是:Perl 6。:)”。其实很多人心里一直想着[http://developers.slashdot.org/article.pl?sid=07/12/07/1511240 脚本语言早点去死]。

A study of the Script-Oriented Programming (SOP) suitability of selected languages –; from The Scriptometer.

Hotscripts.com -A collection of many scripts written in an assortment of languages

OpenSourceScripts.com -A collection of open source scripts

A Slightly Skeptical View on Scripting Languages by Dr. Nikolai Bezroukov

Scripting: Higher Level Programming for the 21st Century by John K. Ousterhout

Are Scripting Languages Any Good? A Validation of Perl, Python, Rexx, and Tcl against C, C++, and Java (PDF) —; 2003 study

Free Classified ASP Script Site Software