手稿語言

電腦編程語言

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

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

起源

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

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

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

定義

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

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

指令碼通常以文字(如ASCII)儲存,只在被呼叫時進行直譯或編譯。 測試大型專案中經常把指令碼和其它低階程式語言一起使用,各自發揮優勢解決特定問題。指令碼經常用於設計互動通訊,它有許多可以單獨執行的命令,可以做很進階的操作,(如在傳統的Unix shell(sh)中,大多操作就是程式本身。)

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

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

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

手稿語言分類

作業控制和shell語言

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

具體包括:

文字處理語言

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

具體包括:

動態語言

一些通用動態語言,比如Perl,從一門手稿語言發展成了更通用的程式語言,由於「直譯執行,主記憶體管理,動態」等特性,它們仍被歸類為手稿語言。指令碼編程常與系統編程相對比,如Ousterhout英語John OusterhoutOusterhout二分法英語Ousterhout's dichotomy大型編程和小型編程英語programming in the large and programming in the small中做出的那樣。在這種視角下,指令碼是膠水代碼英語glue code,被來連接軟體組件,專門用於這個目的的語言叫做膠水語言

可延伸/可嵌入語言

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

具體包括:

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

Tcl作為一種可延伸語言而建立,但更多地被用作通用性語言,就如同Python, Perl, Ruby一樣。

應用程式客製化的手稿語言

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

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

具體包括:

WEB編程指令碼

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

具體包括:

GUI指令碼

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

具體包括:

其它

參見

參考文獻

  1. ^ ECMAScript 2019 Language Specification. www.ecma-international.org. [2018-04-02]. (原始內容存檔於2016-08-13). 
  2. ^ Sheppard, Doug. Beginner's Introduction to Perl. dev.perl.org. 2000-10-16 [2011-01-08]. (原始內容存檔於2011-06-05). 
    Programming is Hard, Let's Go Scripting…頁面存檔備份,存於網際網路檔案館), Larry Wall, December 6, 2007
  3. ^ 賴榮樞. 易學易用的 Windows PowerShell. Microsoft TechNet. 2006-06-01 [2014-03-05]. (原始內容存檔於2020-02-02). 

外部連結