脚本语言
脚本或脚本语言是一种支持脚本的编程语言。脚本通常是短小的计算机程序,它可以完成一个人一次可以完成的步骤。这使一项工作自动化,使其更容易、更可靠。脚本语言通常是一种比较简单的语言,比其他语言更容易学习,但仍然可以做很多事情。
脚本可能运行在另一个程序内部,比如在网络浏览器或Microsoft Excel中。它们也可以是一个从命令行界面运行的shell,并对操作系统(OS)进行调用。shell被认为是交互式的--用户可以选择输入什么,而shell会响应命令。这些可以用来控制主机和服务器上的工作。
有些人说,脚本语言必须与特定用途相联系。另一些人则使用更宽泛的定义,包括解释而非编译的通用编程语言。通用性意味着它可以以多种方式用于不同的事情。一些通用语言(如Java)有可以被脚本化的变体(Javascript)。关于什么是或不是脚本语言,没有具体的规则。
例子
脚本语言的一些常见例子。
- Bash和C shell,作为Unix或类似Unix操作系统的控制语言。
- 在另一个应用程序内部运行的脚本被称为扩展语言。Web浏览器允许几种脚本,包括ECMAScript(JavaScript)或XUL。例如,Google的主页就使用了JavaScript。微软Office内部使用的是Visual Basic for Applications。Lua是一种特意做为扩展语言的语言,可以在很多应用程序里面使用。
- 有脚本扩展的游戏包括Second Life虚拟世界和Trainz铁路模拟器。在其他游戏中,如Wesnoth,实际玩的各种游戏都是由其他用户编写的脚本。
- 文本处理语言sed和AWK
- 通用语言:Perl、Tcl和Python是高级编程语言(更接近人类语言而不是机器代码),可以用于许多不同的事情。其中一些语言最初是为某一特定用途而制作的,然后被改为通用语言。
特征
大多数脚本语言都是为了便于学习。它们通常可以是带有源代码的短文件,或者在命令行界面中一次输入一个命令,它有一个读--评价--打印循环(repl,语言外壳)。这通常意味着一组简单的命令。可能没有函数或main,它只是从头到尾运行。如果有些东西不工作,程序员可以快速修改并再次运行它。这使得脚本语言很适合做一个快速原型,看看一个想法是否可行。
例如,大多数人并不把Java称为脚本语言,因为它的语法冗长,并规定哪些类存在于哪些文件中,而且Java不能在REPL中交互式执行。它需要带有源代码的文件,而且这些文件只能包含必须由主机应用程序或应用程序启动器使用的定义。(Java和JavaScript不一样)。
但Python允许选择--函数可以放在文件中,它可以不使用函数而使用命令式编程方式运行,甚至可以交互式使用(每次打字和运行一行)。
打印
("
你好,世界
")
这一行Python代码打印出"Hello World";不需要main()函数或其他任何东西。
脚本语言通常由源代码或字节码解释。然而,必须有东西来运行脚本(解释它),以便计算机理解它。这就是应用程序,或者操作系统中的某些东西。这通常是用编译语言编写的,并以机器代码的形式发布(作为对人类没有意义的可执行文件)。
脚本语言可能被设计成供使用程序的人使用--最终用户开发。其他时候,它们可能是由程序员为自己的使用而构建的。脚本语言经常使用抽象,一种信息隐藏的形式。这意味着用户不需要知道变量类型、数据存储和内存管理的细节。
脚本往往是由执行脚本的人自己制作或修改的,但有些脚本是共享或出售给他人的。例如,当游戏的大部分内容是用脚本语言编写的。有时,一个脚本可以在别人使用它之前被编译。一旦编译后,它的运行速度会更快,不需要另一个应用程序来运行它。而且这样可以防止最终用户更改代码。
历程
早期的大型计算机(在20世纪50年代)不是交互式的,而是使用存储在批处理文件中的脚本。IBM的作业控制语言(JCL)是用于控制批处理的脚本语言的常见例子。
第一个交互式shell是在20世纪60年代制作的,以帮助远程操作第一个分时系统。这些使用shell脚本,可以在计算机程序中运行计算机程序,即shell。Calvin Mooers在他的TRAC语言中一般被认为是发明命令替换的功臣。这让命令改变脚本(自修改代码)。Multics称这些为主动函数。Louis Pouzin在1964年左右为CTSS写了一个早期的命令脚本处理器,叫做RUNCOM。MIT的Stuart Madnick在1966年为IBM的CP/CMS写了一种脚本语言。他最初称这个处理器为COMMAND,后来命名为EXEC。Multics包括了CTSS RUNCOM的一个分支,也叫RUNCOM。EXEC最终被EXEC 2和REX取代。
诸如Tcl和Lua等语言从一开始就被打造成可以放入任何应用程序的通用脚本语言。其他语言,如Visual Basic for Applications (VBA),也可以做同样的事情,但只需要在某些应用程序中工作。使用通用脚本语言而不是为每个应用程序制作一种新的语言,通常会使编写应用程序的人和编写脚本的用户都更容易。
脚本语言的类型
胶水语言
脚本有时被用来连接不同的应用程序。这就是所谓的胶水代码,专门为此目的制作的语言就是胶水语言。管道和shell脚本是胶水语言的常见例子。但如果在脚本文件中写了很多逻辑,最好把它简单地看作是另一个软件应用,而不是"胶水"。
胶水语言对于编写和维护特别有用。
- 命令壳的自定义命令。
- 比那些用编译语言更好实现的小程序。
- "包装"程序,在运行应用程序之前或之后做一些自动化的事情,如电子表格、数据库、编译器等。
- 脚本,可能会经常改变。
胶水语言范例。
- AppleScript
- 锥体
- JCL
- 路亚
- m4
- Perl
- Unix Shell脚本(ksh、csh、bash、sh等)
- VBScript
- 工作流程语言
- Windows PowerShell
- XSLT
像可编程计算器这样的设备也可能有自己的胶水语言。例如,德州仪器公司的TI-92,出厂默认可以用命令脚本语言进行编程。TI-NSpire核算机了解Lua言语。其他的则理解某种Basic语言,或许Lisp或其他语言。
工作控制语言和外壳
这类语言来自于作业控制的自动化,它涉及到启动和控制系统程序的行为,从IBM的JCL开始。这些语言的许多解释器也可以作为命令行解释器,如Unix shell或MS-DOS的COMMAND.COM。其他的语言,如AppleScript提供了使用类似英语的命令来建立脚本。
GUI脚本
在构建图形用户界面时,需要一种测试的方法。专门的脚本语言被制作出来,用来控制图形窗口、菜单、按钮等,就像人类用户一样。很多时候,这些语言可以用来复制人所做的动作(移动鼠标、点击或在键盘上打字)。这种被复制和记忆的动作或一组动作称为宏。
特定应用语言
许多大型的应用程序都包含了一种专门为该应用程序构建的脚本语言。该应用程序可以是一个游戏或商业程序。这种类型的语言是为单一应用而生的。它们使看起来像一种通用语言(如QuakeC,仿照C语言),它们有自定义的功能,以区别于它们。
扩展/可嵌入语言
这就像一个特定应用的脚本语言,它控制着一个应用程序,但该语言可以在许多应用程序中使用。
JavaScript最初是一种用于网络浏览器内部的脚本语言;但现在它是一种通用的可嵌入语言。例如,它也被用于Adobe产品中。
一些语言随着时间的推移从一种类型转变为另一种类型,通常是由于它们增加了做更多事情的能力。
问题和答案
问:什么是脚本语言?答:脚本或脚本语言是一种支持脚本的编程语言。
问:什么是脚本?
答:脚本通常是简短的计算机程序,它所做的步骤可以由一个人一次完成。
问: 脚本为什么有用?
答:这可以使一项工作自动化,使其更容易、更可靠。
问: 脚本语言难学吗?
答: 脚本语言通常是一种比较简单的语言,比其他语言容易学习,但仍然可以做很多事情。
问: 脚本可以在哪里运行?
答: 脚本可以在另一个程序内运行,比如在网络浏览器或微软Excel中。
问: 什么是脚本语言中的shell,它是如何使用的?
答: 它们也可能是一个从命令行界面运行并对操作系统(OS)进行调用的shell。shell被认为是交互式的--用户可以选择输入什么,而shell会对命令作出反应。这些可以用来控制大型机和服务器上的工作。
问:通用语言可以是一种脚本语言吗?
答: 有些人说,脚本语言必须与特定的用途相联系。另一些人则使用更广泛的定义,包括解释的通用编程语言,而不是编译的。通用的意思是它可以用很多方式来做不同的事情。一些通用语言(如Java)有可以编写脚本的变化。对于什么是或不是脚本语言,并没有具体的规定。