腳本語言
出自 MBA智库百科(https://wiki.mbalib.com/)
腳本語言(Script Languages,Scripting Programming Languages,Scripting Languages)
目錄 |
腳本語言是一種編程語言,用來控制軟體應用程式,腳本通常以文本(如ASCII)保存,只在被調用時進行解釋或編譯。
腳本語言是為了縮短傳統的編寫-編譯-鏈接-運行(edit-compile-link-run)過程而創建的電腦編程語言。此命名起源於一個腳本“screenplay”,每次運行都會使對話框逐字重覆。早期的腳本語言經常被稱為批處理語言或工作控制語言。一個腳本通常是解釋運行而非編譯。雖然許多腳本語言都超越了電腦簡單任務自動化的領域,成熟到可以編寫精巧的程式,但仍然還是被稱為腳本。幾乎所有電腦系統的各個層次都有一種腳本語言。包括操作系統層,如電腦游戲,網路應用程式,文字處理文檔,網路軟體等。在許多方面,高級編程語言和腳本語言之間互相交叉,二者之間沒有明確的界限。一個腳本可以使得本來要用鍵盤進行的相互式操作自動化。一個Shell腳本主要由原本需要在命令行輸入的命令組成,或在一個文本編輯器中,用戶可以使用腳本來把一些常用的操作組合成一組序列。主要用來書寫這種腳本的語言叫做腳本語言。很多腳本語言實際上已經超過簡單的用戶命令序列的指令,還可以編寫更複雜的程式。
腳本語言是為了縮短傳統的編寫-編譯-鏈接-運行(edit-compile-link-run)過程而創建的電腦編程語言。它的命名起源於一個腳本“screenplay”,每次運行都會使對話框逐字重覆。早期的腳本語言經常被稱為批量處理語言或工作控制語言。
一個腳本通常是解釋執行而非編譯。腳本語言通常都有簡單、易學、易用的特性,目的就是希望能讓程式員快速完成程式的編寫工作。而巨集語言則可視為腳本語言的分支,兩者也有實質上的相同之處。
- 腳本語言與編程語言也有很多相似地方,其函數與編程語言比較相像一些,其也涉及到變數。與編程語言之間最大的區別是編程語言的語法和規則更為嚴格和複雜一些。
- 與程式代碼的關係:腳本也是一種語言,其同樣由程式代碼組成。
- 腳本語言是一種解釋性的語言,例如Python、vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等可以編譯成二進位代碼,以可執行文件的形式存在,腳本語言不需要編譯,可以直接用,由解釋器來負責解釋。
- 腳本語言一般都是以文本形式存在,類似於一種命令。
- 相對於編譯型電腦編程語言:用腳本語言開發的程式在執行時,由其所對應的解釋器(或稱虛擬機)解釋執行。系統程式設計語言是被預先編譯成機器語言而執行的。腳本語言的主要特征是:程式代碼即是腳本程式,亦是最終可執行文件。腳本語言可分為獨立型和嵌入型,獨立型腳本語言在其執行時完全依賴於解釋器,而嵌入型腳本語言通常在編程語言中(如C,C++,VB,Java等)被嵌入使用。
- 和系統程式設計語言相比:不同是腳本語言是被解釋而系統程式設計語言是被編譯。被解釋的語言由於沒有編譯時間而提供快速的轉換,通過允許用戶運行時編寫應用程式,而不需要耗時的編譯/打包過程。解釋器使應用程式更加靈活,腳本語言的代碼能夠被實時生成和執行。腳本語言通常都有簡單、易學、易用的特性,目的就是希望能讓程式設計師快速完成程式的編寫工作。
- 快速開發:腳本語言極大地簡化了“開發、部署、測試和調試”的周期過程。
- 容易部署:大多數腳本語言都能夠隨時部署,而不需要耗時的編譯/打包過程。
- 易學易用:很多腳本語言的技術要求通常要低一些,因此能夠更容易地找到大量合適的技術人員。
- 動態代碼:腳本語言的代碼能夠被實時生成和執行,這是一項高級特性,在某些應用程式里(例如JavaScript里的動態類型)是很有用也是必需的。
- 腳本語言不夠全面:它們會要求一門“真正的”編程語言的存在,必須找一個資料庫驅動程式將其內置進腳本語言里。
- 腳本語言並不是軟體工程和構建代碼結構的最佳選擇,例如面向對象和基於組件的開發。
(1)作為批次處理語言或工作控制語言。許多腳本語言用來執行一次性任務,尤其是系統管理方面。DOS,Windows的批處理文件和Unix的shell腳本都屬於這種應用;
(2)作為通用的編程語言存在,如Perl、Python、Ruby等。由於“解釋執行,記憶體管理,動態”等特性,它們仍被稱為腳本語言。但它們已經用於應用程式編寫,用戶也不把它們看作腳本語言;
(3)許多大型的應用程式都包括根據用戶需求而定製的慣用腳本語言。同樣地,許多電腦游戲系統使用一種自定義腳本語言來表現NPC(Non-Player Character,Non-Playable Character,Non-Player Class)和游戲環境的預編程動作。此類語言通常是為一個單獨的應用程式所設計,雖然它們貌似一些通用語言(如Quake C,Modeled After C),但它們有自定義的功能;
(4)網頁中的嵌入式腳本語言。熟知的HTML(Hyper Text Mark-up Language)即超文本標記語言,就是一種腳本語言,它的解釋器就是瀏覽器。JavaScript直到現在仍然是網頁瀏覽器內的主要編程語言,它的ECMAScript標準化保證了它成為流行的通用嵌入式腳本語言。另外,隨著動態網頁技術發展,ASP、JSP、PHP等嵌入網頁的腳本語言正被廣泛使用,不過這些腳本要通過Web Server解釋,而Html則被瀏覽器執行;
(5)腳本語言在系統應用程式中嵌入使用,作為用戶與系統的介面方式。在工業控制領域,PLC編程、組態軟體的腳本語言是擴充組態系統功能的重要手段;在通信平臺領域,IVR(自動語音應答)流程編程;Office辦公軟體,提供的巨集和VBA;其他應用軟體如ER Studio提供的Basic MacroEditor,用戶可以編寫Sax Basic腳本操作ER圖,生成Access庫、導出Word文檔等擴展功能。
腳本技術得益於電腦硬體的加速發展。某些情況下甚至系統程式設計語言也不夠有效,因此不得不用彙編編寫應用程式。而今的機器比1980年的快100~500倍,且仍在以每18個月翻一番的速度增長。電腦性能快速提高,使電腦程式越來越複雜。因此,開發時間已遠比運行時間緊迫。這時,腳本語言作為系統程式設計語言的補充,開始被主要的電腦平臺所同時提供。編程語言已經由性能低下的硬體與執行效率之間的矛盾,轉變為快速變化的市場需要與低效的開發工具之間的矛盾,所以腳本語言的發展在軟體開發中有著必然的趨勢。
(一)Shell 腳本
此類腳本用於自動化工作控制,即啟動和控制系統程式的行為。大多的腳本語言解釋器也同時是命令行界面,如Unix shell和MS-DOS command。其他如AppleScript,可以為系統增加腳本環境,但沒有命令行界面。
具體分類有:
- 4NT
- AppleScript
- ARexx(Amiga Rexx)
- bash
- csh
- DCL
- JCL
- ksh
- Cmd.exe batch(Windows,OS/2)
- command batch(DOS)
- REXX
- tcsh
- sh
- Winbatch
- Windows PowerShell
- Windows Script Host
- zsh
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
- Emacs Lisp
- Game Maker Language
- HyperTalk
- IPTSCRAE
- IRC script
- Matlab Embedded Language
- Maya Embedded Language
- mIRC script
- NWscript
- QuakeC
- UnrealScript
- Visual Basic for Applications
- VBScript
- ZZT-oop
應用程式定製的腳本語言中有一種重要的類別,用於提供WEB頁面的自定義功能。它專業處理互聯網通信,使用網頁瀏覽器作為用戶界面。當然,大多現代WEB編程語言都比較強大可以做一些通用編程。
具體分類:
- ColdFusion(Application Server)
- Lasso
- Miva
- SMX
- IPTSCRAE-一些網路開發團隊用於創建論壇的工具
處理基於文本的記錄是腳本語言最早的用處之一。如Unix's awk最早是設計來幫助系統管理員處理調用UNIX基於文本的配置和LOG文件。Perl最早是用來產生報告的,現在它已經成了全面成熟的語言。
具體分類:
- Awk
- Perl
- sed
- XSLT
一些語言,比如Perl,從一門腳本語言發展成了更通用的編程語言。由於“解釋執行,記憶體管理,動態”等特性,它們仍被稱為腳本語言。但它們已經用於應用程式編寫,用戶也不把它們看作腳本語言。
- Dao
- Dylan
- Groovy
- Lua
- MUMPS(M)
- newLISP
- Nuva
- Perl
- 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