全站文章 iT邦幫忙
iThome Online提供免費電子報,現在就訂,最新IT訊息每日寄達。

iThome 每日新聞報
iThome 產品技術報
加入iThome Online會員,立即使用討論區、Blog等服務。

免費加入會員
登入 / 登出
管理會員帳號
忘記帳號密碼
聯絡客服
訂閱周刊
讀者服務
13' E政府專刊no.7(48)
13' iTcloud No.3(47)
12' E政府專刊no.6(46)
12' 個資法專刊No2(45)
12' iTcloud No.2(44)
12' e政府專刊No.5(43)
12' 個資法專刊(42)
11' CIO專刊(41)
11' e教育專刊No.3 (40)
11' e政府專刊No.4 (39)
11'iTcloud專刊(38)
10' e教育專刊No.2 (37)
10'e政府專刊No.3 (36)
09'e政府專刊No.2 (35)
09'e教育專刊(34)
09'e政府專刊(33)
08'企業資安專刊-端點安全防護(32)
08'企業採購情報誌(31)
07'資訊安全技術應用專刊(30)
07' 新世代資料中心專刊(29)
07'企業資安技術應用專刊(28)
企業採購情報誌'06冬季號(27)
動態擴展語言元素的程式設計
文/林信良 2014-01-09
分享到facebook
針對程式語言來進行meta-programming時,應留意共同慣例與詞彙

林信良
因在網路上經營「良葛格學習筆記」(openhome.cc)而聞名,曾任昇陽教育訓練中心技術顧問、甲骨文教育訓練中心授權講師,目前為自由工作者,從事講師、技術書籍寫作與翻譯,專長為Java 程式開發相關技術教育訓練,研究興趣包括:程式語言、Web 相關開放原始碼框架。閒暇之餘記錄所學,技術文件涵蓋 C/C++、Java、Ruby/Rails、Python、JavaScript 等領域。

說到meta這個前置詞,源於希臘文,原本相當於之後(after)、超越(beyond)之意,後續衍生出許多意義,像是關於(about),例如metadata是有關資料的資料(data about data),像是資料庫表格用以儲存資料,而表格中各欄位是何種型態等描述,就稱為metadata,中文常見譯為「中繼資料」,或許因為如此,後來出現meta-programming一詞時,有些文件或書籍也就譯為中繼程式設計,然而這並不是一個適切的譯名。

meta前置詞其實也代表著更高階的抽象,在維基百科的Meta條目中舉的例子是,任何學科(Subject)可以說都有個更抽象層次的元理論(meta-theory),像是學科基礎、方法、形式等,meta-programming中的meta指的就是高階抽象,就如物件導向程式設計是以物件為處理對象,meta-programming是以語言中的抽象元素為處理對象,語言中的抽象元素有哪些呢?像是函式、類別、實例、方法等元素,甚至一段運算式、程式碼都可能是meta-programming的處理對象。

因而在維基百科對Metaprogramming的條目是,將其他程式或本身作為資料進行寫入或處理的電腦程式形式,因為是將其他程式或本身的元素作為資料,中文上比較適切且較廣為人能接受的譯名是「元程式設計」,較簡單易懂的解釋是「用程式產生程式」。

就實作形式而言,meta-programming本身並沒有嚴謹的定義,將其他程式或本身作為資料進行寫入或處理的工作,可能是在編譯時期,也可能是在執行時期,因而像是C語言的巨集、執行時期修改函式、類別、實例、方法等元素定義或行為,甚至是用一個語言產生另一語言的程式產生器,都可視為meta-programming的一種形式。

在各種meta-programming形式中,執行時期修改函式、類別、實例、方法等元素定義與行為最具彈性。有些語言本身內建這樣的能力,開發者本身可以在原有語言上輕鬆構造、擴充專屬功能,像是Ruby、JavaScript、Groovy等,甚至可發展出一套具備特有語法的框架、程式庫或工具,就擴充的語法本身,已成為特定領域語言(Domain specific language,DSL);有些語言則提供有限的動態能力,讓語言使用者維持一致的交流方式,避免產生溝通與維護上的問題。


1 / 2 / 3 下一頁

分享到facebook

2014資安趨勢研討會
更多研討會
▼ ADVERTISEMENT ▼
▲ ADVERTISEMENT ▲

電週文化事業版權所有、轉載必究 •Copyright © iThome | 刊登廣告授權服務服務信箱隱私權聲明與會員使用條款關於iThome