巨集
此條目沒有列出任何參考或來源。 (2018年7月8日) |
「Macro」的各地常用譯名 | |
---|---|
中國大陸 | 宏 |
臺灣 | 巨集 |
港澳 | 巨集 |
巨集(英語:Macro),是一種批量處理的稱謂。
電腦科學裏的巨集是一種抽象(Abstraction),它根據一系列預定義的規則替換一定的文字模式。直譯器或編譯器在遇到巨集時會自動進行這一模式替換。對於編譯語言,巨集展開在編譯時發生,進行巨集展開的工具常被稱為巨集展開器。巨集這一術語也常常被用於許多類似的環境中,它們是源自巨集展開的概念,這包括鍵盤巨集和巨集語言。絕大多數情況下,「巨集」這個詞的使用暗示着將小命令或動作轉化為一系列指令。
巨集的用途在於自動化頻繁使用的序列或者是獲得一種更強大的抽象能力。
電腦語言如C語言或匯編語言有簡單的巨集系統,由編譯器或組譯器的預處理器實現。
C語言的巨集預處理器的工作只是進行簡單的文字搜尋和替換,使用附加的文字處理語言如M4,C程式設計師可以獲得更精巧的巨集。
Lisp類語言如Common Lisp和Scheme有更精巧的巨集系統:巨集的行為如同是函數對自身程式文字的變形,並且可以應用全部語言來表達這種變形。一個C巨集可以定義一段語法的替換,然而一個Lisp的巨集卻可以控制一節代碼的計算。
獲得了控制代碼的執行順序(見惰性計算和非限制函數)的能力,使得新建立的語法結構與語言內建的語法結構不可區分。例如,一種Lisp方言有cond而沒有if,就可以使用巨集由前者定義後者。Lisp語法的去部主要擴充,比如物件導向的CLOS系統,可以由巨集來定義。
MacroML有型別語法巨集,一種有效的理解方式是把這種語法巨集看作是多階段計算。
巨集程式設計
[編輯]在用一種不熟悉的巨集語言進行巨集程式設計時,可以這樣做,首先記錄下用戶想要巨集完成什麼,然後打開巨集檔案並嘗試理解命令結構如何工作。也可以修改命令以調整巨集。一些巨集語言,比如Great Plains會計軟件的Dexterity執行時引擎,不能從其它數據源(如由逗號分隔的文字檔案)匯入數據。這一限制可以通過用更強大的程式語言,如VBA來建立一個電腦程式在此弱程式語言裏生成一個特別的巨集來解決。例如,可以對Microsoft Excel巨集程式設計從擴充樣式表或文字檔案中讀取數據並建立Great Plains .mac檔案,這一檔案被用於將特定的數據匯入Great Plains.需要針對每一個新的數據集合生成新的.mac檔案。
巨集應用
[編輯]應用程式也可以使用一種和巨集類似機理的系統來允許用戶將一系列(一般是最常使用到的操作)自訂為一個步驟。也就是用戶執行一系列操作,並且讓應用程式來「記住」這些操作以及順序。更進階的用戶可以通過內建的巨集程式設計來直接使用那些應用程式的功能。
當使用一種不熟悉的巨集語言來程式設計時,比較有效的方法就是記錄一連串用戶希望得到的操作,然後通過閱讀應用程式記錄下來的巨集檔案來理解巨集命令的結構組成。
鍵盤巨集
[編輯]鍵盤巨集和編輯器巨集分別在圖形化使用者介面和編輯器中被互動式地使用。使用它們可以用簡短的擊鍵代替冗長的命令序列,並為重複性任務提供了一個簡單的自動化形式,但2009年已經有所改變。
程式設計師的文字編輯器Emacs(「編輯巨集」[Editing MACroS]的簡稱)是沿用這一思想的產物。事實上,大多數編輯器是由巨集組成的。Emacs最初被設計為編輯語言TECO的巨集集,後被移植為Lisp的一種方言Emacs Lisp。Vim也允許用戶錄製和播放簡單的鍵盤巨集。
巨集語言
[編輯]巨集語言是一類程式語言,其全部或多數計算是由擴充巨集完成的。巨集語言並未在通用程式設計中廣泛使用,但在文字處理程式中應用普遍。例如,
微軟Word和巨集病毒
[編輯]Visual Basic for Applications(VBA),是Microsoft Office裏的一種程式語言。但由上面的定義,它完全不是一種巨集語言。然而,它的功能已經從中發展並最終替代了用戶應用程式的巨集思想,所以它被廣泛地錯誤地稱為是一種巨集語言。
VBA可以訪問許多作業系統函數並支援文件打開時自動執行巨集。這使得用這種語言寫電腦病毒成為可能。1990年代中後期,巨集病毒成為了最流行的電腦病毒類型之一。其它的包括巨集語言的專案,如OpenOffice.org,故意從其巨集語言中排除了一些功能(如:自動執行)以避免破壞程式。然而,這一特性在很多事務中受到歡迎。
參考文獻
[編輯]參見
[編輯]- PHP
- SMX
- Stage 2
- 手稿語言如Tcl和ECMAScript(即:ActionScript,DMDScript,JavaScript,JScript)已被嵌入應用程式,所以它們的執行類似巨集。
- TeX
- Visual Basic Script(Microsoft)
- Lisp有一個強大而不整潔的巨集語法,可能會產生變數同名捕捉的問題。(Lisp has a powerful system of unhygenic syntax macros, but is prone to variable capture.)
- Scheme有整潔的巨集語法,可能是常被使用的最進階的無型別的巨集系統
- MacroML是一個探尋靜態型別和巨集系統和諧點的實驗系統。
- 通用目的巨集處理器是一個上下文模式匹配巨集處理器,可以說他是正則表達式,EBNF和awk的組合。