脚本语言

脚本语言Script languagescripting languagescripting programming language)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批次处理语言或工作控制语言。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程式设计师快速完成程式的编写工作。而宏语言则可视为脚本语言的分支,两者也有实质上的相同之处。

虽然许多脚本语言都超越了计算机简单任务自动化的领域,成熟到可以编写精巧的程序,但仍然还是被称为脚本。几乎所有计算机系统的各个层次都有一种脚本语言。包括操作系统层,如计算机游戏,网络应用程序,字处理文档,网络软件等。在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。

目录

  • 1 源起与目的
  • 2 定义
  • 3 脚本语言分类
    • 3.1 工作控制语言和shell
    • 3.2 GUI 脚本
    • 3.3 应用程序定制的脚本语言
    • 3.4 WEB编程脚本
    • 3.5 文本处理语言
    • 3.6 通用动态语言
    • 3.7 扩展/可嵌入语言
    • 3.8 其它
  • 4 参见
  • 5 外部链接
  • 6 常见的脚本语言

源起与目的

脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程式。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比 C语言、C++语言 或 Java 之类的系统编程语言要简单容易,也让脚本语言另有一些属于脚本语言的特性:

  • 语法和结构通常比较简单
  • 学习和使用通常比较简单
  • 通常以容易修改程式的“解释”作为执行方式,而不需要“编译”
  • 程式的开发产能优于执行效能

一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个Shell脚本主要由原本需要在命令行输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组序列。主要用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令序列的指令,还可以编写更复杂的程序。

定义

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


许多脚本语言用来执行一次性任务,尤其是系统管理方面。它可以把服务组件粘合起来,因此被广泛用于GUI创建或者命令行,操作系统通常提供一些默认的脚本语言,即通常所谓shell脚本语言。

脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。

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

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

综上所述,脚本编程速度更快,且脚本文件明显小于如同类C程序文件。这种灵活性是以执行效率为代价的。脚本通常是解释执行的,速度可能很慢,且运行时更耗内存。在很多案例中,如编写一些数十行的小脚本,它所带来的编写优势就远远超过了运行时的劣势,尤其是在当前程序员工资趋高和硬件成本趋低时。

然而,在脚本和传统编程语言之间的界限越来越模糊,尤其是在一系列新语言及其集成常出现时。在一些脚本语言中,有经验的程序员可以进行大量优化工作。在大多现代系统中通常有多种合适的脚本语言可以选择,所以推荐使用多种语言(包括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
  • Matlab Embedded Language
  • 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
  • Dao
  • Dylan
  • Groovy
  • Lua
  • MUMPS (M)
  • newLISP
  • Nuva
  • Perl
  • PHP
  • Python
  • Ruby
  • Scheme
  • Smalltalk
  • SuperCard
  • Tcl (Tool command language)

扩展/可嵌入语言

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

具体分类:

  • Ch (C/C++ interpreter)
  • Dao
  • ECMAScript 亦称 DMDScript, JavaScript, JScript
  • GameMonkeyScript
  • Guile
  • ICI
  • Lua
  • RBScript (REALbasic Script)
  • Squirrel
  • Tcl
  • 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

参见

Domain-specific programming language

外部链接

  • 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
  • 学习 Shell Scripts 鸟哥的 Linux 私房菜

常见的脚本语言

  • C Shell
  • JavaScript
  • Nuva
  • Perl
  • PHP
  • Python
  • Ruby
  • Tcl
  • VBScript
  • CSS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Agent

一、什么是 Java Agent ? 笼统地来讲,Java Agent 是一个统称,该功能是 Java 虚拟机提供的一整套后门。通过这套后门可以对虚拟机方方面面进行监控与分析。甚至干预虚拟机的运行。 Java Agent 又叫做 Java 探针,Java Agent 是在 …

JDK 1.8 官网下载地址(linux / windows)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 JDK 1.8 官网下载地址: JDK 1.8 官网下载地址(linuxwindows) 上面连接可以直接点击,连接…

跟着太白老师学python day11 可迭代对象和迭代器

如果对象的属性中有__iter__属性就说明是可迭代的,容器类的数据类型都是可迭代对象 如果对象的属性中既有__iter__属性也有__next__属性,就说明这个对象是迭代器 如何判断一个函数是不是可迭代的,是不是迭代器 方法一 s 123 print(__iter__ …

搅局者奇虎360:特供机背后的周式隐忧

摘要:从未涉足制造,将来也“绝不参与制造”的360,却声称要进军智能手机。从未涉足制造,将来也“绝不参与制造”的360,却声称要进军智能手机。 5月4日晚间,“长达半年的思考”后,奇虎360董事长周…

数据结构基础入门知识

数据结构基础入门知识 ------ 数据结构:理解和练习《异类-不一样的成功启示录》IP/26 192IP/25 128IP/24192.12864 3216 2 1 NTP:时间同步服务器高手都是最仔细的,严谨的 telnet 查看某个端口是否可用,是否是开启状态的要有探索冒险的精神 --…

Linux下安装jdk8步骤详述

见:https://www.cnblogs.com/shihaiming/p/5809553.html 0.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择对应jdk版本下载。(可在Windows下下载完成后,通过文件夹…

用Kotlin撸一个图片压缩插件-实战篇(三)

简述: 由于个人原因,已经有很长一段时间没有写过文章,有句话是那么说的只要开始就不会太晚,所以我们开始《用Kotlin撸一个图片压缩插件》系列文章最后一篇实战篇。实际上我已经把源码发布到了GitHub,代码很简单。有了前两篇文章的…

后端进阶技术总结

1、SDK与API的区别? SDK是Software Development Kit的缩写,即软件开发工具包。可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,通过接口联通外界,相应的接…

最简容器化动手小实践——再战flappybird

《Flappy Bird》是一名越南开发者所开发的游戏,这款游戏的主要内容是帮助一只小鸟穿越水管的层层阻碍,玩家所需要的只是点击屏幕从而调整小鸟的高度。而令这款游戏与众不同的是,这款游戏的难度夸张的惊人,大多数玩家在初次上手之后…

为什么电影电视帧率不取整数?

英文名称:time code时间码概念时间码(time code)是摄像机在记录图像信号的时候,针对每一幅图像记录的唯一的时间编码。一种应用于流的数字信号。该信号为视频中的每个帧都分配一个数字,用以表示小时、分钟、秒钟和帧数…

linux下用rpm 安装jdk

1.下载jdk的rpm安装包,这里以jdk-7u4-linux-i586.rpm为例进行说明 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2. 将jdk-7u4-linux-i586.rpm 移动到合适的安装目录上,安装软件不要在/home路径下&#xf…

FFT 入门

推荐博客 : https://oi.men.ci/fft-notes/ 卷积的理解 : https://www.zhihu.com/question/22298352?rf21686447 题目链接 :http://uoj.ac/problem/34 这是一道模板题。给你两个多项式,请输出乘起来后的多项式。输入格式第一行两个…

MPEG4视频压缩编码技术详解

MPEG全称是Moving Pictures Experts Group,它是“动态图象专家组”的英文缩写,该专家组成立于1988年,致力于运动图像及其伴音的压缩编码标准化工作,原先他们打算开发MPEG1、MPEG2、MPEG3和MPEG4四个版本,以适用于不同带…

oracle orion hugepages_settings.sh(支持OEL 7,4.1内核)

orion需要首先配置hugepage,否则会出现下列错误。[rootyyxxdb01 ~]# /opt/app/11.2.0/grid_home/bin/orion -run oltp -testname mytestORION: ORacle IO Numbers -- Version 11.2.0.4.0************************ Large Pages Information *******************Param…

eclipse启动出现“An Error has Occurred. See the log file”解决方法

见:http://blog.csdn.net/ww130929/article/details/52652222 这段时间开发java的项目,刚开始启动Eclipse的时候经常遇到这个问题,写这篇博客来记录解决方法。 1.删除工程目录下的: “.metadata/.plugins/org.eclipse.core.resour…

初识NIO之Java小Demo

Java中的IO、NIO、AIO: BIO:在Java1.4之前,我们建立网络连接均使用BIO,属于同步阻塞IO。默认情况下,当有一条请求接入就有一条线程专门接待。所以,在客户端向服务端请求时,会询问是否有空闲线程…

RTP协议详解

RTP协议分析 第1章. RTP概述 1.1. RTP是什么 RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550(RFC1889为其过期版本)。RFC3550不仅定义了RTP&#xff0…

线程状态转换

一、线程状态转换 新建(New) 创建后尚未启动。 可运行(Runnable) 可能正在运行,也可能正在等待 CPU 时间片。 包含了操作系统线程状态中的 Running 和 Ready。 阻塞(Blocking) 等待获取一个排它…

Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法

见:http://outofmemory.cn/java/OutOfMemoryError/outofmemoryerror-permgen-space-in-tomcat-with-eclipse 有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: Per…

MPEG-4 AVC/H.264 信息

作者:haibara 来源:pcicp.com 本FAQ由(haibara)翻译,期间受到kaito_mkid(pcicp)帮助,在此感谢,由于Newbie的关系,如有翻译错误,还请各位指出&…