概述
腳本語言(Scriptlanguage,scriptinglanguage,scriptingprogramminglanguage)是為了縮短傳統的編寫-編譯-連結-運行(edit-compile-link-run)過程而創建的計算機程式語言。此命名起源於一個腳本“screenplay”,每次運行都會使對話框逐字重複。早期的腳本語言經常被稱為批量處理語言或工作控制語言。一個腳本通常是解釋運行而非編譯。腳本語言通常都有簡單、易學、易用的特性,目的就是希望能讓程式設計師快速完成程式的編寫工作。而宏語言則可視為腳本語言的分支,兩者也有實質上的相同之處。雖然許多腳本語言都超越了計算機簡單任務自動化的領域,成熟到可以編寫精巧的程式,但仍然還是被稱為腳本。幾乎所有計算機系統的各個層次都有一種腳本語言。包括作業系統層,如計算機遊戲,網路應用程式,字處理文檔,網路軟體等。在許多方面,高級程式語言和腳本語言之間互相交叉,二者之間沒有明確的界限。
特點
1、腳本語言(JavaScript,VBscript等)介於HTML和C,C++,Java,C#等程式語言之間。 HTML通常用於格式化和連結文本。而程式語言通常用於向機器發出一系列複雜的指令。2、腳本語言與程式語言也有很多相似地方,其函式與程式語言比較相像一些,其也涉及到變數。與程式語言之間最大的區別是程式語言的語法和規則更為嚴格和複雜一些.
3、與程式代碼的關係:腳本也是一種語言,其同樣由程式代碼組成。
4、腳本語言是一種解釋性的語言,例如Python、vbscript,javascript,installshieldscript,ActionScript等等,它不象c\c++等可以編譯成二進制代碼,以執行檔的形式存在,腳本語言不需要編譯,可以直接用,由解釋器來負責解釋。
5、腳本語言一般都是以文本形式存在,類似於一種命令。
舉個例子說:如果建立了一個程式,叫aaa.exe,可以打開.aa為擴展名的檔案,為.aa檔案的編寫指定了一套規則(語法),當別人編寫了.aa檔案後,自己的程式用這種規則來理解編寫人的意圖,並作出回應,那么,這一套規則就是腳本語言。
6、相對於編譯型計算機程式語言:用腳本語言開發的程式在執行時,由其所對應的解釋器(或稱虛擬機)解釋執行。系統程式設計語言是被預先編譯成機器語言而執行的。腳本語言的主要特徵是:程式代碼即是腳本程式,亦是最終執行檔。腳本語言可分為獨立型和嵌入型,獨立型腳本語言在其執行時完全依賴於解釋器,而嵌入型腳本語言通常在程式語言中(如C,C++,VB,Java等)被嵌入使用。
7、和系統程式設計語言相比:不同是腳本語言是被解釋而系統程式設計語言是被編譯。被解釋的語言由於沒有編譯時間而提供快速的轉換,通過允許用戶運行時編寫應用程式,而不需要耗時的編譯/打包過程。解釋器使應用程式更加靈活,腳本語言的代碼能夠被實時生成和執行。腳本語言通常都有簡單、易學、易用的特性,目的就是希望能讓程式設計師快速完成程式的編寫工作。
優缺點
優點
快速開發:腳本語言極大地簡化了“開發、部署、測試和調試”的周期過程。容易部署:大多數腳本語言都能夠隨時部署,而不需要耗時的編譯/打包過程。
同已有技術的集成:腳本語言被Java或者COM這樣的組件技術所包圍,因此能夠有效地利用代碼。
易學易用:很多腳本語言的技術要求通常要低一些,因此能夠更容易地找到大量合適的技術人員。
動態代碼:腳本語言的代碼能夠被實時生成和執行,這是一項高級特性,在某些應用程式里(例如JavaScript里的動態類型)是很有用也是必需的。
缺點
腳本語言不夠全面:它們會要求一門“真正的”程式語言的存在,必須找一個資料庫驅動程式將其內置進腳本語言裡。腳本語言並不是軟體工程和構建代碼結構的最佳選擇,例如面向對象和基於組件的開發。
腳本語言通常不是“通用”語言,但是能夠根據專門的套用來調整,例如:PHP。
源起與目的
腳本語言(Scriptinglanguage)是電腦程式語言,因此也能讓開發者藉以編寫出讓電腦聽命行事的程式。以簡單的方式快速完成某些複雜的事情通常是創造腳本語言的重要原則,基於這項原則,使得腳本語言通常比C語言、C++語言或Java之類的系統程式語言要簡單容易,也讓腳本語言另有一些屬於腳本語言的特性:*語法和結構通常比較簡單
*學習和使用通常比較簡單
*通常以容易修改程式的“解釋”作為運行方式,而不需要“編譯”
*程式的開發產能優於運行效能
一個腳本可以使得本來要用鍵盤進行的相互式操作自動化。一個Shell腳本主要由原本需要在命令行輸入的命令組成,或在一個文本編輯器中,用戶可以使用腳本來把一些常用的操作組合成一組串列。主要用來書寫這種腳本的語言叫做腳本語言。很多腳本語言實際上已經超過簡單的用戶命令串列的指令,還可以編寫更複雜的程式。
套用和發展
套用
(1)作為批次處理語言或工作控制語言。許多腳本語言用來執行一次性任務,尤其是系統管理方面。DOS,Windows的批處理檔案和Unix的shell腳本都屬於這種套用;(2)作為通用的程式語言存在,如Perl、Python、Ruby等。由於“解釋執行,記憶體管理,動態”等特性,它們仍被稱為腳本語言。但它們已經用於應用程式編寫,用戶也不把它們看作腳本語言;
(3)許多大型的應用程式都包括根據用戶需求而定製的慣用腳本語言。同樣地,許多電腦遊戲系統使用一種自定義腳本語言來表現NPC(Non-PlayerCharacter,Non-PlayableCharacter,Non-PlayerClass)和遊戲環境的預編程動作。此類語言通常是為一個單獨的應用程式所設計,雖然它們貌似一些通用語言(如QuakeC,ModeledAfterC),但它們有自定義的功能;
(4)網頁中的嵌入式腳本語言。熟知的HTML(HyperTextMark-upLanguage)即超文本標記語言,就是一種腳本語言,它的解釋器就是瀏覽器。JavaScript直到現在仍然是網頁瀏覽器內的主要程式語言,它的ECMAScript標準化保證了它成為流行的通用嵌入式腳本語言。另外,隨著動態網頁技術發展,ASP、JSP、PHP等嵌入網頁的腳本語言正被廣泛使用,不過這些腳本要通過WebServer解釋,而Html則被瀏覽器執行;
(5)腳本語言在系統應用程式中嵌入使用,作為用戶與系統的接口方式。在工業控制領域,PLC編程、組態軟體的腳本語言是擴充組態系統功能的重要手段;在通信平台領域,IVR(自動語音應答)流程編程;Office辦公軟體,提供的宏和VBA;其他套用軟體如ERStudio提供的BasicMacroEditor,用戶可以編寫SaxBasic腳本操作ER圖,生成Access庫、導出Word文檔等擴展功能。
發展
腳本技術得益於計算機硬體的加速發展。某些情況下甚至系統程式設計語言也不夠有效,因此不得不用彙編編寫應用程式。而今的機器比1980年的快100~500倍,且仍在以每18個月翻一番的速度增長。計算機性能快速提高,使電腦程式越來越複雜。因此,開發時間已遠比運行時間緊迫。這時,腳本語言作為系統程式設計語言的補充,開始被主要的計算機平台所同時提供。程式語言已經由性能低下的硬體與執行效率之間的矛盾,轉變為快速變化的市場需要與低效的開發工具之間的矛盾,所以腳本語言的發展在軟體開發中有著必然的趨勢。分類
Shell 腳本
此類腳本用於自動化工作控制,即啟動和控制系統程式的行為。大多的腳本語言解釋器也同時是命令行界面,如Unixshell和MS-DOSCOMMAND.COM。其他如AppleScript,可以為系統增加腳本環境,但沒有命令行界面。具體分類有:
*4NT
*AppleScript
*ARexx(AmigaRexx)
*bash
*csh
*DCL
*JCL
*ksh
*Cmd.exebatch(Windows,OS/2)
*Command.combatch(DOS)
*REXX
*tcsh
*sh
*Winbatch
*WindowsPowerShell
*WindowsScriptHost
*Zsh
GUI 腳本
GUI出現帶來一種專業的控制計算機的腳本語言。它在用戶和圖形界面,選單,按鈕等之間互動。它經常用來自動化重複性動作,或設定一個標準狀態。理論上它可以用來控制運行於基於GUI的計算機上的所有應用程式,但實際上這些語言是否被支持還要看應用程式和作業系統本身。當通過鍵盤進行互動時,這些語言也被稱為宏語言。具體分類有:
*AutoHotkey
*AutoIt
*Expect
應用程式定製的腳本語言
許多大型的應用程式都包括根據用戶需求而定製的慣用腳本語言。同樣地,許多電腦遊戲系統使用一種自定義腳本語言來表現NPC(non-playercharacter,non-playablecharacter,non-playerclass)和遊戲環境的預編程動作。此類語言通常是為一個單獨的應用程式所設計,雖然它們貌似一些通用語言(如QuakeC,modeledafterC),但它們有自定義的功能。
具體分類:
*ActionCodeScript
*ActionScript
*AutoLISP
*BlobbieScript[1]
*EmacsLisp
*GameMakerLanguage
*HyperTalk
*IPTSCRAE
*IRCscript
*Lingo
*MayaEmbeddedLanguage
*mIRCscript
*NWscript
*QuakeC
*UnrealScript
*VisualBasicforApplications
*VBScript
*ZZT-oop
web編程腳本
應用程式定製的腳本語言中有一種重要的類別,用於提供WEB頁面的自定義功能。它專業處理網際網路通信,使用網頁瀏覽器作為用戶界面。當然,大多現代WEB程式語言都比較強大可以做一些通用編程。具體分類:
*ColdFusion(ApplicationServer)
*Lasso
*miva
*SMX
*IPTSCRAE-一些網路開發團隊用於創建論壇的工具
文本處理語言
處理基於文本的記錄是腳本語言最早的用處之一。如Unix'sawk最早是設計來幫助系統管理員處理調用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(Toolcommandlanguage)
擴展、可嵌入語言
少數的語言被設計通過嵌入應用程式來取代應用程式定製的腳本語言。開發者(如使用C等其它系統語言)包入使腳本語言可以控制應用程式的hook。這些語言和應用程式定製的腳本語言是同種用途,但優點在於可以在應用程式之間傳遞一些技能。具體分類:
*Ch(C/C++interpreter)
*Dao
*ECMAScript亦稱DMDScript,JavaScript,JScript
*GameMonkeyScript
*Guile
*ICI
*Lua
*RBScript(REALbasicScript)
*Squirrel
*Tcl
*Z-Script
JavaScript直到現在仍然是網頁瀏覽器內的主要程式語言,它的ECMAScript標準化保證了它成為流行的通用嵌入性語言。
Tcl作為一種擴展性語言而創建,但更多地被用作通用性語言,就如同Python,Perl,Ruby一樣。