什么是脚本语言脚本语言的优缺点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是脚本语言脚本语言的优缺点相关的知识,希望对你有一定的参考价值。

参考技术A

  脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,那么你对脚本语言了解多少呢?以下是由我整理关于什么是脚本语言的内容,希望大家喜欢!

  脚本语言的定义

  脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。虽然许多脚本语言都超越了计算机简单任务自动化的领域,成熟到可以编写精巧的程序,但仍然还是被称为脚本。几乎所有计算机系统的各个层次都有一种脚本语言。包括操作系统层,如计算机游戏,网络应用程序,文字处理文档,网络软件等。在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个Shell脚本主要由原本需要在命令行输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组序列。主要用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令序列的指令,还可以编写更复杂的程序。

  脚本语言的特点

  1、脚本语言(javascript,VBscript等)介于html和C,C++,Java,C#等编程语言之间。 HTML通常用于格式化和链接文本。而编程语言通常用于向机器发出一系列复杂的指令。

  2、脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相像一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.

  3、与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。

  4、脚本语言是一种解释性的语言,例如Python、vbscript,javascript,installshield script,ActionScript等等,它不象c\\c++等可以编译成二进制代码,以可执行文件的形式存在,脚本语言不需要编译,可以直接用,由解释器来负责解释。

  5、脚本语言一般都是以文本形式存在,类似于一种命令。

  举个例子说:如果建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件,为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,自己的程序用这种规则来理解编写人的意图,并作出回应,那么,这一套规则就是脚本语言。

  6、相对于编译型计算机编程语言:用脚本语言开发的程序在执行时,由其所对应的解释器(或称虚拟机)解释执行。系统程序设计语言是被预先编译成机器语言而执行的。脚本语言的主要特征是:程序代码即是脚本程序,亦是最终可执行文件。脚本语言可分为独立型和嵌入型,独立型脚本语言在其执行时完全依赖于解释器,而嵌入型脚本语言通常在编程语言中(如C,C++,VB,Java等)被嵌入使用。

  7、和系统程序设计语言相比:不同是脚本语言是被解释而系统程序设计语言是被编译。被解释的语言由于没有编译时间而提供快速的转换,通过允许用户运行时编写应用程序,而不需要耗时的编译/打包过程。解释器使应用程序更加灵活,脚本语言的代码能够被实时生成和执行。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序设计师快速完成程序的编写工作。

  脚本语言的优缺点

  优点

  快速开发:脚本语言极大地简化了“开发、部署、测试和调试”的周期过程。

  容易部署:大多数脚本语言都能够随时部署,而不需要耗时的编译/打包过程。

  同已有技术的集成:脚本语言被Java或者COM这样的组件技术所包围,因此能够有效地利用代码。

  易学易用:很多脚本语言的技术要求通常要低一些,因此能够更容易地找到大量合适的技术人员。

  动态代码:脚本语言的代码能够被实时生成和执行,这是一项高级特性,在某些应用程序里(例如JavaScript里的动态类型)是很有用也是必需的。

  缺点

  脚本语言不够全面:它们会要求一门“真正的”编程语言的存在,必须找一个数据库驱动程序将其内置进脚本语言里。

  脚本语言并不是软件工程和构建代码结构的最佳选择,例如面向对象和基于组件的开发。

什么是“脚本语言”

很多人都会用一些“脚本语言”(scripting language),却很少有人真正的知道到底什么是脚本语言。很多人用 shell 写一些“脚本”来完成日常的任务,用 Perl 或者 sed 来处理一些文本文件,很多公司用“脚本”来跑它们的“build”(叫做 build script)。那么,到底什么是“脚本语言”与“非脚本语言”的区别呢?

其实“脚本语言”与“非脚本语言”并没有语义上,或者执行方式上的区别。它们的区别只在于它们设计的初衷:脚本语言的设计,往往是作为一种临时的“补丁”。它的设计者并没有考虑把它作为一种“通用程序语言”,没有考虑用它构建大型的软件。这些设计者往往没有经过系统的训练,有些甚至连最基本的程序语言概念都没搞清楚。相反,“非脚本”的通用程序语言,往往由经过严格训练的专家甚至一个小组的专家设计,它们从一开头就考虑到了“通用性”,以及在大型工程中的可靠性和可扩展性。

首先我们来看看“脚本”这个概念是如何产生的。使用 Unix 系统的人都会敲入一些命令,而命令貌似都是“一次性”或者“可抛弃”的。然而不久,人们就发现这些命令其实并不是那么的“一次性”,自己其实一直在重复的敲入类似的命令,所以有人就发明了“脚本”这东西。它的设计初衷是“批量式”的执行命令,你在一个文件里把命令都写进去,然后执行这个文件。可是不久人们就发现,这些命令行其实可以用更加聪明的方法构造,比如定义一些变量,或者根据系统类型的不同执行不同的命令。于是,人们为这脚本语言加入了变量,条件语句,数组,等等构造。“脚本语言”就这样产生了。

然而人们却没有发现,其实他们根本就不需要脚本语言。因为脚本语言里面的这些结构,在任何一种“严肃”的程序语言(比如 Java,Scheme)里面,早就已经存在了,而且设计得更加完善。所以脚本语言往往是在重新发明轮子,甚至连轮子都设计不好。早期脚本语言的“优势”,也许只在于它不需要事先“编译”,它“调用程序”的时候,貌似可以少打几个字。脚本语言对于 C 这样的语言,也许有一定的价值。然而,如果跟 Scheme 或者 Java 这样的语言来比,这个优势就非常不明显了。比如,你完全可以想一个自动的办法,写了 Java 代码之后,先调用 Java 编译器,然后调用 JVM,最后删掉 class 文件。或者你可以选择一种有解释执行方式的“严肃语言”,比如 Scheme。

很多人把 Scheme 误称为“脚本语言”,就是因为它像脚本语言一样可以解释执行,然而 Scheme 其实是比 C 和 Java 还要“严肃”的语言。Scheme 从一开头就被设计为一种“通用程序语言”,而不是用来进行某种单一简单的任务。Scheme 的设计者比Java 的设计者造诣更加深厚,所以他们对 Java 的一些设计错误看得非常清楚。像 Chez Scheme 这样的编译器,其实早就可以把 Scheme 编译成高效的机器代码。实际上,很多 Scheme 解释器也会进行一定程度的“编译”,有些编译为字节码,有些编译为机器代码,然后再执行。所以在这种情况下,通常人们所谓的“编译性语言”与“解释性语言”,几乎没有本质上的区别,因为你看到的“解释器”,不过是自动的先编译再执行。

跟 Java 或者 Scheme 这样的语言截然不同,“脚本语言”往往意味着异常拙劣的设计,它的设计初衷往往是目光短浅的。这些语言里面充满了历史遗留下来的各种临时的 hack,几乎没有“原则”可言。Unix 的 shell(比如 bash,csh,……),一般都是这样的语言。Java 的设计也有很多问题,但也跟“脚本语言”有天壤之别。然而,在当今现实的工程项目中,脚本语言却占据了它们不该占有的地位。例如很多公司使用 shell 脚本来处理整个软件的“build”过程或者测试过程,其实是相当错误的决定。因为一旦这种 shell 脚本日益扩展,就变得非常难以控制。经常出现一些莫名其妙的问题,却很难找到问题的所在。Linux 使用 shell 脚本来管理很多启动项目,系统配置等等,其实也是一个历史遗留错误。所以,不要因为看到 Linux 用那么多 shell 脚本就认为 shell 语言是什么好东西。

如果你在 shell 脚本里使用通常的程序设计技巧,比如函数等,那么写几百行的脚本还不至于到达不可收拾的地步。可是我发现,很多人头脑里清晰的程序设计原则,一遇到“写脚本”这样的任务就完全崩溃了似的,他们仿佛认为写脚本就是应该“松散”一些。很多平时写非常聪明的程序的人,到了需要处理“系统管理”任务的时候,就开始写一些 shell 脚本,或者 Perl 脚本。他们写这些脚本的时候,往往完全的忘记了程序设计的基本原则,例如“模块化”,“抽象”等等。他们大量的使用“环境变量”一类的东西来传递信息,他们忘记了使用函数,他们到处打一些临时性的补丁,只求当时不出问题就好。到后来,他们开始耗费大量的时间来处理脚本带来的麻烦,却始终没有发现问题的罪魁祸首,其实是他们错误的认为自己需要“脚本语言”,然后认为写脚本的时候就是应该随便一点。

所以我认为脚本语言是一个祸害,它几乎永远是错误的决定。我们应该尽一切可能避免使用脚本语言。在没有办法的情况下(比如老板要求),也应该在脚本里面尽可能的使用通常的程序设计原则。

以上是关于什么是脚本语言脚本语言的优缺点的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript语言的优缺点

2.2 为什么要使用Shell脚本

请问 JAVA C# C++ 这三种编程语言都是擅长开发啥的?都各有啥优缺点?我偏向游戏编程方

LoadRunner脚本是啥语言?

在现有代码库中支持哪种脚本语言?

脚本编制语言