腳本語(yǔ)言又被稱為擴(kuò)建的語(yǔ)言,或者動(dòng)態(tài)語(yǔ)言,是一種編程語(yǔ)言隘道,用來(lái)控制軟件應(yīng)用程序,腳本通常以文本(如ASCII)保存郎笆,只在被調(diào)用時(shí)進(jìn)行解釋或編譯谭梗。
概述
定義
腳本語(yǔ)言(Script languages,scripting programming languages,scripting languages)是為了縮短傳統(tǒng)的編寫(xiě)-編譯-鏈接-運(yùn)行(edit-compile-link-run)過(guò)程而創(chuàng)建的計(jì)算機(jī)編程語(yǔ)言。此命名起源于一個(gè)腳本“screenplay”宛蚓,每次運(yùn)行都會(huì)使對(duì)話框逐字重復(fù)激捏。早期的腳本語(yǔ)言經(jīng)常被稱為批處理語(yǔ)言或工作控制語(yǔ)言。一個(gè)腳本通常是解釋運(yùn)行而非編譯凄吏。雖然許多腳本語(yǔ)言都超越了計(jì)算機(jī)簡(jiǎn)單任務(wù)自動(dòng)化的領(lǐng)域远舅,成熟到可以編寫(xiě)精巧的程序,但仍然還是被稱為腳本痕钢。幾乎所有計(jì)算機(jī)系統(tǒng)的各個(gè)層次都有一種腳本語(yǔ)言图柏。包括操作系統(tǒng)層,如計(jì)算機(jī)游戲任连,網(wǎng)絡(luò)應(yīng)用程序蚤吹,文字處理文檔,網(wǎng)絡(luò)軟件等随抠。在許多方面裁着,高級(jí)編程語(yǔ)言和腳本語(yǔ)言之間互相交叉,二者之間沒(méi)有明確的界限拱她。一個(gè)腳本可以使得本來(lái)要用鍵盤(pán)進(jìn)行的相互式操作自動(dòng)化二驰。一個(gè)Shell腳本主要由原本需要在命令行輸入的命令組成,或在一個(gè)文本編輯器中秉沼,用戶可以使用腳本來(lái)把一些常用的操作組合成一組序列桶雀。主要用來(lái)書(shū)寫(xiě)這種腳本的語(yǔ)言叫做腳本語(yǔ)言。很多腳本語(yǔ)言實(shí)際上已經(jīng)超過(guò)簡(jiǎn)單的用戶命令序列的指令氧猬,還可以編寫(xiě)更復(fù)雜的程序背犯。
簡(jiǎn)介
腳本語(yǔ)言是為了縮短傳統(tǒng)的編寫(xiě)-編譯-鏈接-運(yùn)行(edit-compile-link-run)過(guò)程而創(chuàng)建的計(jì)算機(jī)編程語(yǔ)言坏瘩。[1]它的命名起源于一個(gè)腳本“screenplay”盅抚,每次運(yùn)行都會(huì)使對(duì)話框逐字重復(fù)。早期的腳本語(yǔ)言經(jīng)常被稱為批量處理語(yǔ)言或工作控制語(yǔ)言倔矾。[2]
一個(gè)腳本通常是解釋執(zhí)行而非編譯妄均。腳本語(yǔ)言通常都有簡(jiǎn)單柱锹、易學(xué)、易用的特性丰包,目的就是希望能讓程序員快速完成程序的編寫(xiě)工作禁熏。而宏語(yǔ)言則可視為腳本語(yǔ)言的分支,兩者也有實(shí)質(zhì)上的相同之處邑彪。[3]
(概述圖片來(lái)源:[4])
特點(diǎn)
1瞧毙、腳本語(yǔ)言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等編程語(yǔ)言之間寄症≈姹耄 HTML通常用于格式化和鏈接文本。而編程語(yǔ)言通常用于向機(jī)器發(fā)出一系列復(fù)雜的指令有巧。
2释漆、腳本語(yǔ)言與編程語(yǔ)言也有很多相似地方,其函數(shù)與編程語(yǔ)言比較相像一些,其也涉及到變量篮迎。與編程語(yǔ)言之間最大的區(qū)別是編程語(yǔ)言的語(yǔ)法和規(guī)則更為嚴(yán)格和復(fù)雜一些.
3男图、與程序代碼的關(guān)系:腳本也是一種語(yǔ)言,其同樣由程序代碼組成甜橱。
4逊笆、腳本語(yǔ)言是一種解釋性的語(yǔ)言,例如Python、vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等可以編譯成二進(jìn)制代碼,以可執(zhí)行文件的形式存在渗鬼,腳本語(yǔ)言不需要編譯览露,可以直接用,由解釋器來(lái)負(fù)責(zé)解釋譬胎。
5差牛、腳本語(yǔ)言一般都是以文本形式存在,類似于一種命令。
舉個(gè)例子說(shuō):如果建立了一個(gè)程序,叫aaa.exe堰乔,可以打開(kāi).aa為擴(kuò)展名的文件偏化,為.aa文件的編寫(xiě)指定了一套規(guī)則(語(yǔ)法),當(dāng)別人編寫(xiě)了.aa文件后镐侯,自己的程序用這種規(guī)則來(lái)理解編寫(xiě)人的意圖侦讨,并作出回應(yīng),那么苟翻,這一套規(guī)則就是腳本語(yǔ)言韵卤。[5]
6、相對(duì)于編譯型計(jì)算機(jī)編程語(yǔ)言:用腳本語(yǔ)言開(kāi)發(fā)的程序在執(zhí)行時(shí)崇猫,由其所對(duì)應(yīng)的解釋器(或稱虛擬機(jī))解釋執(zhí)行沈条。系統(tǒng)程序設(shè)計(jì)語(yǔ)言是被預(yù)先編譯成機(jī)器語(yǔ)言而執(zhí)行的。腳本語(yǔ)言的主要特征是:程序代碼即是腳本程序诅炉,亦是最終可執(zhí)行文件蜡歹。腳本語(yǔ)言可分為獨(dú)立型和嵌入型屋厘,獨(dú)立型腳本語(yǔ)言在其執(zhí)行時(shí)完全依賴于解釋器,而嵌入型腳本語(yǔ)言通常在編程語(yǔ)言中(如C月而,C++汗洒,VB,Java等)被嵌入使用父款。[1]
7溢谤、和系統(tǒng)程序設(shè)計(jì)語(yǔ)言相比:不同是腳本語(yǔ)言是被解釋而系統(tǒng)程序設(shè)計(jì)語(yǔ)言是被編譯。被解釋的語(yǔ)言由于沒(méi)有編譯時(shí)間而提供快速的轉(zhuǎn)換憨攒,通過(guò)允許用戶運(yùn)行時(shí)編寫(xiě)應(yīng)用程序溯香,而不需要耗時(shí)的編譯/打包過(guò)程。解釋器使應(yīng)用程序更加靈活浓恶,腳本語(yǔ)言的代碼能夠被實(shí)時(shí)生成和執(zhí)行玫坛。腳本語(yǔ)言通常都有簡(jiǎn)單、易學(xué)包晰、易用的特性湿镀,目的就是希望能讓程序設(shè)計(jì)師快速完成程序的編寫(xiě)工作。[1]
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
快速開(kāi)發(fā):腳本語(yǔ)言極大地簡(jiǎn)化了“開(kāi)發(fā)伐憾、部署勉痴、測(cè)試和調(diào)試”的周期過(guò)程。
容易部署:大多數(shù)腳本語(yǔ)言都能夠隨時(shí)部署树肃,而不需要耗時(shí)的編譯/打包過(guò)程蒸矛。
同已有技術(shù)的集成:腳本語(yǔ)言被Java或者COM這樣的組件技術(shù)所包圍,因此能夠有效地利用代碼胸嘴。
易學(xué)易用:很多腳本語(yǔ)言的技術(shù)要求通常要低一些雏掠,因此能夠更容易地找到大量合適的技術(shù)人員。
動(dòng)態(tài)代碼:腳本語(yǔ)言的代碼能夠被實(shí)時(shí)生成和執(zhí)行劣像,這是一項(xiàng)高級(jí)特性乡话,在某些應(yīng)用程序里(例如JavaScript里的動(dòng)態(tài)類型)是很有用也是必需的。
缺點(diǎn)
腳本語(yǔ)言不夠全面:它們會(huì)要求一門(mén)“真正的”編程語(yǔ)言的存在耳奕,必須找一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序?qū)⑵鋬?nèi)置進(jìn)腳本語(yǔ)言里绑青。
腳本語(yǔ)言并不是軟件工程和構(gòu)建代碼結(jié)構(gòu)的最佳選擇,例如面向?qū)ο?/a>和基于組件的開(kāi)發(fā)屋群。
腳本語(yǔ)言通常不是“通用”語(yǔ)言闸婴,但是能夠根據(jù)專門(mén)的應(yīng)用來(lái)調(diào)整,例如:PHP芍躏。
應(yīng)用和發(fā)展
應(yīng)用
(1):作為批次處理語(yǔ)言或工作控制語(yǔ)言邪乍。許多腳本語(yǔ)言用來(lái)執(zhí)行一次性任務(wù),尤其是系統(tǒng)管理方面。DOS溺欧,Windows的批處理文件和Unix的shell腳本都屬于這種應(yīng)用;
(2):作為通用的編程語(yǔ)言存在柏肪,如Perl姐刁、Python、Ruby等烦味。由于“解釋執(zhí)行聂使,內(nèi)存管理,動(dòng)態(tài)”等特性谬俄,它們?nèi)员环Q為腳本語(yǔ)言柏靶。但它們已經(jīng)用于應(yīng)用程序編寫(xiě),用戶也不把它們看作腳本語(yǔ)言溃论;
(3):許多大型的應(yīng)用程序都包括根據(jù)用戶需求而定制的慣用腳本語(yǔ)言屎蜓。同樣地,許多電腦游戲系統(tǒng)使用一種自定義腳本語(yǔ)言來(lái)表現(xiàn)NPC(Non-Player Character钥勋,Non-Playable Character炬转,Non-Player Class)和游戲環(huán)境的預(yù)編程動(dòng)作。此類語(yǔ)言通常是為一個(gè)單獨(dú)的應(yīng)用程序所設(shè)計(jì)算灸,雖然它們貌似一些通用語(yǔ)言(如Quake C扼劈,Modeled After C),但它們有自定義的功能菲驴;
(4):網(wǎng)頁(yè)中的嵌入式腳本語(yǔ)言荐吵。熟知的HTML(Hyper Text Mark-up Language)即超文本標(biāo)記語(yǔ)言,就是一種腳本語(yǔ)言赊瞬,它的解釋器就是瀏覽器先煎。JavaScript直到現(xiàn)在仍然是網(wǎng)頁(yè)瀏覽器內(nèi)的主要編程語(yǔ)言,它的ECMAScript標(biāo)準(zhǔn)化保證了它成為流行的通用嵌入式腳本語(yǔ)言巧涧。另外榨婆,隨著動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)發(fā)展,ASP褒侧、JSP良风、PHP等嵌入網(wǎng)頁(yè)的腳本語(yǔ)言正被廣泛使用,不過(guò)這些腳本要通過(guò)Web Server解釋,而Html則被瀏覽器執(zhí)行闷供;
(5):腳本語(yǔ)言在系統(tǒng)應(yīng)用程序中嵌入使用烟央,作為用戶與系統(tǒng)的接口方式。在工業(yè)控制領(lǐng)域歪脏,PLC編程疑俭、組態(tài)軟件的腳本語(yǔ)言是擴(kuò)充組態(tài)系統(tǒng)功能的重要手段;在通信平臺(tái)領(lǐng)域婿失,IVR(自動(dòng)語(yǔ)音應(yīng)答)流程編程钞艇;Office辦公軟件啄寡,提供的宏和VBA;其他應(yīng)用軟件如ER Studio提供的Basic MacroEditor哩照,用戶可以編寫(xiě)Sax Basic腳本操作ER圖挺物,生成Access庫(kù)、導(dǎo)出Word文檔等擴(kuò)展功能飘弧。[7]
發(fā)展情況
腳本技術(shù)得益于計(jì)算機(jī)硬件的加速發(fā)展识藤。某些情況下甚至系統(tǒng)程序設(shè)計(jì)語(yǔ)言也不夠有效,因此不得不用匯編編寫(xiě)應(yīng)用程序次伶。而今的機(jī)器比1980年的快100~500倍痴昧,且仍在以每18個(gè)月翻一番的速度增長(zhǎng)。計(jì)算機(jī)性能快速提高冠王,使計(jì)算機(jī)程序越來(lái)越復(fù)雜赶撰。因此,開(kāi)發(fā)時(shí)間已遠(yuǎn)比運(yùn)行時(shí)間緊迫柱彻。這時(shí)扣囊,腳本語(yǔ)言作為系統(tǒng)程序設(shè)計(jì)語(yǔ)言的補(bǔ)充,開(kāi)始被主要的計(jì)算機(jī)平臺(tái)所同時(shí)提供绒疗。編程語(yǔ)言已經(jīng)由性能低下的硬件與執(zhí)行效率之間的矛盾侵歇,轉(zhuǎn)變?yōu)榭焖僮兓氖袌?chǎng)需要與低效的開(kāi)發(fā)工具之間的矛盾,所以腳本語(yǔ)言的發(fā)展在軟件開(kāi)發(fā)中有著必然的趨勢(shì)吓蘑。[1]
腳本語(yǔ)言分類
工作控制語(yǔ)言和shell
Shell 腳本
此類腳本用于自動(dòng)化工作控制惕虑,即啟動(dòng)和控制系統(tǒng)程序的行為。大多的腳本語(yǔ)言解釋器也同時(shí)是命令行界面磨镶,如Unix shell和MS-DOS command溃蔫。其他如AppleScript,可以為系統(tǒng)增加腳本環(huán)境琳猫,但沒(méi)有命令行界面伟叛。
具體分類有:
1.4NT
3.ARexx(Amiga Rexx)
4.bash
5.csh
6.DCL
7.JCL
8.ksh
10.command batch(DOS)
11.REXX
12.tcsh
13.sh
14.Winbatch
16.Windows Script Host
17.zsh
GUI 腳本
GUI出現(xiàn)帶來(lái)一種專業(yè)的控制計(jì)算機(jī)的腳本語(yǔ)言。它在用戶和圖形界面脐嫂,菜單统刮,按鈕等之間互動(dòng)。它經(jīng)常用來(lái)自動(dòng)化重復(fù)性動(dòng)作账千,或設(shè)置一個(gè)標(biāo)準(zhǔn)狀態(tài)侥蒙。理論上它可以用來(lái)控制運(yùn)行于基于GUI的計(jì)算機(jī)上的所有應(yīng)用程序,但實(shí)際上這些語(yǔ)言是否被支持還要看應(yīng)用程序和操作系統(tǒng)本身匀奏。當(dāng)通過(guò)鍵盤(pán)進(jìn)行互動(dòng)時(shí)鞭衩,這些語(yǔ)言也被稱為宏語(yǔ)言。
具體分類有:
2.AutoIt
3.Expect
應(yīng)用程序定制的腳本語(yǔ)言
許多大型的應(yīng)用程序都包括根據(jù)用戶需求而定制的慣用腳本語(yǔ)言。同樣地论衍,許多電腦游戲系統(tǒng)使用一種自定義腳本語(yǔ)言來(lái)表現(xiàn)NPC(non-player
character,non-playable character,non-player class)和游戲環(huán)境的預(yù)編程動(dòng)作瑞佩。
此類語(yǔ)言通常是為一個(gè)單獨(dú)的應(yīng)用程序所設(shè)計(jì),雖然它們貌似一些通用語(yǔ)言(如QuakeC, modeled after C)坯台,但它們有自定義的功能炬丸。
具體分類:
1.Action Code Script
3.AutoLISP
4.BlobbieScript
5.Emacs Lisp
6.Game Maker Language
8.IPTSCRAE
9.IRC script
10.Lingo
11.Matlab Embedded Language
12.Maya Embedded Language
13.mIRC script
14.NWscript
15.QuakeC
16.UnrealScript
17.Visual Basic for Applications
18.VBScript
19.ZZT-oop
WEB編程腳本
應(yīng)用程序定制的腳本語(yǔ)言中有一種重要的類別,用于提供WEB頁(yè)面的自定義功能捂人。它專業(yè)處理互聯(lián)網(wǎng)通信,使用網(wǎng)頁(yè)瀏覽器作為用戶界面矢沿。當(dāng)然滥搭,大多現(xiàn)代WEB編程語(yǔ)言都比較強(qiáng)大可以做一些通用編程。
具體分類:
1.ColdFusion(Application Server)
2.Lasso
3.Miva
4.SMX
5.IPTSCRAE-一些網(wǎng)絡(luò)開(kāi)發(fā)團(tuán)隊(duì)用于創(chuàng)建論壇的工具
文本處理語(yǔ)言
處理基于文本的記錄是腳本語(yǔ)言最早的用處之一捣鲸。如Unix's awk最早是設(shè)計(jì)來(lái)幫助系統(tǒng)管理員處理調(diào)用UNIX基于文本的配置和LOG文件瑟匆。Perl最早是用來(lái)產(chǎn)生報(bào)告的,現(xiàn)在它已經(jīng)成了全面成熟的語(yǔ)言栽惶。
具體分類:
1.Awk
2.Perl
3.sed
4.XSLT
通用動(dòng)態(tài)語(yǔ)言
一些語(yǔ)言愁溜,比如Perl,從一門(mén)腳本語(yǔ)言發(fā)展成了更通用的編程語(yǔ)言外厂。由于“解釋執(zhí)行冕象,內(nèi)存管理,動(dòng)態(tài)”等特性汁蝶,它們?nèi)员环Q為腳本語(yǔ)言渐扮。但它們已經(jīng)用于應(yīng)用程序編寫(xiě),用戶也不把它們看作腳本語(yǔ)言掖棉。
1.APL
2.Dao
3.Dylan
4.Groovy
5.Lua
6.MUMPS(M)
7.newLISP
8.Nuva
9.Perl
10.PHP
11.Python
12.Ruby
13.Scheme
14.Smalltalk
15.SuperCard
16.Tcl(Tool command language)
擴(kuò)展/可嵌入語(yǔ)言
少數(shù)的語(yǔ)言被設(shè)計(jì)通過(guò)嵌入應(yīng)用程序來(lái)取代應(yīng)用程序定制的腳本語(yǔ)言墓律。開(kāi)發(fā)者(如使用C等其它系統(tǒng)語(yǔ)言)包入使腳本語(yǔ)言可以控制應(yīng)用程序的hook。這些語(yǔ)言和應(yīng)用程序定制的腳本語(yǔ)言是同種用途幔亥,但優(yōu)點(diǎn)在于可以在應(yīng)用程序之間傳遞一些技能耻讽。
具體分類:
1.Ch(C/C++ interpreter)
2.Dao
3.ECMAScript亦稱DMDScript,JavaScript,JScript
4.GameMonkeyScript
5.Guile
6.ICI
7.Lua
8.RBScript(REALbasic Script)
9.Squirrel
10.Tcl
11.Z-Script
JavaScript直到現(xiàn)在仍然是網(wǎng)頁(yè)瀏覽器內(nèi)的主要編程語(yǔ)言,它的ECMAScript標(biāo)準(zhǔn)化保證了它成為流行的通用嵌入性語(yǔ)言帕棉。
Tcl作為一種擴(kuò)展性語(yǔ)言而創(chuàng)建针肥,但更多地被用作通用性語(yǔ)言,就如同Python, Perl, Ruby一樣香伴。
其它
1.BeanShell(scripting for Java)
2.CobolScript
3.Escapade (server side scripting)
4.Euphoria
5.F-Script
6.Ferite
7.Groovy
8.Gui4Cli
9.Io
10.KiXtart
11.Mondrian
12.Object REXX
13.Pike
14.Pliant
15.REBOL
16.ScriptBasic
17.Shorthand Language
18.Simkin
19.Sleep
20.StepTalk
常見(jiàn)的腳本語(yǔ)言
CSS