本頁使用了標題或全文手工轉換

手稿語言

維基百科,自由的百科全書
(已重新導向自 腳本語言
前往: 導覽搜尋

手稿語言英語:Scripting language)是為了縮短傳統的「編寫、編譯、連結、執行」(edit-compile-link-run)過程而建立的電腦編程語言。此命名起源於一個名為「screenplay」(劇本)的腳步,每次執行都會使對話方塊逐字重複。早期的手稿語言經常被稱為批次處理語言或工作控制語言。一個指令碼通常是直譯執行而非編譯。指令碼語言通常都有簡單、易學、易用的特性,目的就是希望能讓程式設計師快速完成程式的編寫工作。而巨集語言則可視為指令碼語言的分支,兩者也有實質上的相同之處。

雖然許多手稿語言都超越了電腦簡單任務自動化的領域,成熟到可以編寫精巧的程式,但仍然還是被稱為指令碼。幾乎所有電腦系統的各個層次都有一種手稿語言。包括作業系統層,如電腦遊戲網路應用程式,字處理文件,網路軟體等。在許多方面,高階程式語言手稿語言之間互相交叉,二者之間沒有明確的界限。

起源[編輯]

指令碼語言是一種電腦程式語言,因此也能讓開發者藉以編寫出讓電腦聽命行事的程式。以簡單的方式快速完成某些複雜的事情通常是創造腳本語言的重要原則,基於這項原則,使得腳本語言通常比C語言C++語言Java之類的系統程式語言要簡單容易,也讓腳本語言另有一些屬於腳本語言的特性:[1]

  • 語法和結構通常比較簡單
  • 學習和使用通常比較簡單
  • 通常以容易修改程式的「直譯」作為執行方式,而不需要「編譯」
  • 程式的開發產能優於執行效能

一個指令碼可以使得本來要用鍵盤進行的相互式操作自動化。一個Shell指令碼主要由原本需要在命令列輸入的命令組成,或在一個文字編輯器中,用戶可以使用指令碼來把一些常用的操作組合成一組序列。主要用來書寫這種指令碼的語言叫做手稿語言。很多手稿語言實際上已經超過簡單的用戶命令序列的指令,還可以編寫更複雜的程式。

定義[編輯]

電腦語言是為了各種目的和任務而開發的,一個常見任務就是把各種不同的已有元件連線起來以完成相關任務。大多手稿語言共性是:良好的快速開發,高效率的執行,直譯而非編譯執行,和其它語言編寫的程式元件之間通訊功能很強大。

許多手稿語言用來執行一次性任務,尤其是系統管理方面。它可以把服務元件粘合起來,因此被廣泛用於GUI建立或者命令列,作業系統通常提供一些預設的手稿語言,即通常所謂shell手稿語言。

指令碼通常以文字(如ASCII)儲存,只在被呼叫時進行直譯或編譯。

有些指令碼是為了特定領域設計的,但通常指令碼都可以寫更通用的指令碼。在大型專案中經常把指令碼和其它低階程式語言一起使用,各自發揮優勢解決特定問題。指令碼經常用於設計互動通訊,它有許多可以單獨執行的命令,可以做很高階的操作,(如在傳統的Unix shell(sh)中,大多操作就是程式本身。)

這些高階命令簡化了代碼編寫過程。諸如記憶體自動管理和溢位檢查等效能問題可以不用考慮。在更低階或非手稿語言中,記憶體及變數管理和資料結構等耗費人工,為解決一個給定問題需要大量代碼,當然這樣能夠獲得更為細緻的控制和最佳化。指令碼缺少最佳化程式以提速或者降低記憶體的伸縮性。

綜上所述,指令碼編程速度更快,且指令碼檔案明顯小於如同類C程式檔案。這種靈活性是以執行效率為代價的。指令碼通常是直譯執行的,速度可能很慢,且執行時更耗記憶體。在很多案例中,如編寫一些數十行的小指令碼,它所帶來的編寫優勢就遠遠超過了執行時的劣勢,尤其是在當前程式設計師工資趨高和硬體成本趨低時。

然而,在指令碼和傳統程式語言之間的界限越來越模糊,尤其是在一系列新語言及其整合常出現時。在一些手稿語言中,有經驗的程式設計師可以進行大量最佳化工作。在大多現代系統中通常有多種合適的手稿語言可以選擇,所以推薦使用多種語言(包括C或者組合語言)編寫一種指令碼。

手稿語言分類[編輯]

工作控制語言和shell[編輯]

此類指令碼用於自動化工作控制,即啟動和控制系統程式的行為。大多的手稿語言直譯器也同時是命令列介面,如Unix shell和MS-DOS COMMAND.COM。其他如AppleScript,可以為系統增加指令碼環境,但沒有命令列介面。

具體包括:

GUI指令碼[編輯]

GUI出現帶來一種專業的控制電腦的手稿語言。它在用戶和圖形介面,選單,按鈕等之間互動。它經常用來自動化重複性動作,或設定一個標準狀態。理論上它可以用來控制執行於基於GUI的電腦上的所有應用程式,但實際上這些語言是否被支援還要看應用程式和作業系統本身。當通過鍵盤進行互動時,這些語言也被稱為巨集語言。

具體包括:

應用程式客製的手稿語言[編輯]

許多大型的應用程式都包括根據用戶需求而客製的慣用手稿語言。同樣地,許多電腦遊戲系統使用一種自訂手稿語言來表現NPC(non-player character,non-playable character,non-player class)和遊戲環境的預編程動作。

此類語言通常是為一個單獨的應用程式所設計,雖然它們貌似一些通用語言(如QuakeC, modeled after C),但它們有自訂的功能。

具體包括:

WEB編程指令碼[編輯]

應用程式客製的手稿語言中有一種重要的類別,用於提供WEB頁面的自訂功能。它專業處理網際網路通訊,使用網頁瀏覽器作為使用者介面。當然,大多現代WEB程式語言都比較強大可以做一些通用編程。

具體包括:

文字處理語言[編輯]

處理基於文字的記錄是手稿語言最早的用處之一。如Unix's awk最早是設計來幫助系統管理員處理呼叫UNIX基於文字的配置和LOG檔案。Perl最早是用來產生報告的,現在它已經成了全面成熟的語言。

具體包括:

通用動態語言[編輯]

一些語言,比如Perl,從一門手稿語言發展成了更通用的程式語言。由於「直譯執行,記憶體管理,動態」等特性,它們仍被稱為手稿語言。但它們已經用於應用程式編寫,用戶也不把它們看作手稿語言。

擴充功能/可嵌入語言[編輯]

少數的語言被設計通過嵌入應用程式來取代應用程式客製的手稿語言。開發者(如使用C等其它系統語言)包入使手稿語言可以控制應用程式的hook。這些語言和應用程式客製的手稿語言是同種用途,但優點在於可以在應用程式之間傳遞一些技能。

具體包括:

JavaScript直到現在仍然是網頁瀏覽器內的主要程式語言,它的ECMAScript標準化保證了它成為流行的通用嵌入性語言。

Tcl作為一種擴充功能性語言而建立,但更多地被用作通用性語言,就如同Python, Perl, Ruby一樣。

其它[編輯]

常見的手稿語言[編輯]

參見[編輯]

Domain-specific programming language

參考文獻[編輯]

  1. ^ 賴榮樞. 易學易用的 Windows PowerShell. Microsoft TechNet. 2006-06-01 [2014-03-05]. 

外部連結[編輯]