2011年4月28日 星期四

17. Scala 與新的語言功能 --Meta Programming

Meta programming 這種技巧,在一些新語言上非常強調。
所謂 meta(翻成中介),其實就是以「抽象這一層」來作為處理的對象。

所謂抽象這一層,就是抽取出一層來。舉例而言,object  (或稱  instance)  的抽象那一層就叫 class。在 meta programming 中要強調的是如何處理抽象這一層。

讓我們將話講更實際一點,在一般語言中所謂的 meta programming,就是如何用程式定義(或控制) class 的行為,比如增加 class 的 field 與 method,或是用程式定義「當有程式呼叫到 class 沒有的 method 時應該如何處理」的手段。

在一些語言中,你可以動態的增加某些 class 的 method,也可以動態改變某些 class 的 method 或field,也可一次攔截該 class 中的所有 method 呼叫。甚至可以設定某些 class,若呼叫到該 class 不存在的 method,或存取到該 class 不存在的欄位,該如何處理。這都是 meta programming。

雖然 meta programming 有它的優點,但也有它的缺點。

第一個缺點就是 compiler 無法幫你做預先的篩選。比如,你指定了呼叫到不存在的 method 該處理的方式,若你真的打錯 method 名稱,此時的 compiler 能力幫你檢查。

第二個缺點就是效能,既然需要動態決定這麼多事,需要預留太多的空間,因此 compiler 勢必無法有效產出好的 bytecode,這樣一定會影響效能。

Scala 在這方面搭支援到現在是比較缺乏,現在只看到一個 Dynamic 的 class 有點類似,但還不清楚,未來我們將持續觀察。

沒有留言:

張貼留言