JavaOne大會閉幕演講是Rob Harrop主題為《JRuby探索:為Java虛擬機創建領域特定語言》的演講。領域特定語言(Domain Specific Languages,DSLs)提供了為程序開發或業務的特定目標創建出一種自定義語言的方式,並且人氣與日俱增。
但問題是,為什麼你要這麼做呢?原因有很多,其中包括:可以簡化重復性任務,可以封裝樣板式代碼(Boiler-plate Code),或者是可以更有效表達代碼目的的API.不管你有什麼特殊原因,所有的DSL都可以為你的項目帶來清晰的價值。
在演講中探討的方法是創建一個JRuby的DSL,可以在Java類內部使用。因為由JRuby生成的字節碼最終會在JRE上運行,所以這個DSL應該被視為“內部”DSL——使用一個通用編程語言來創建一個特定編程語言。另外一種可選方式是“外部”DSL,需要一個外部的編譯器和生成器,這樣則會使得整合工作難度增大。
這個方法的優點在於創建DSL,其中展示了一些JRuby語言的技術,使得DSL的開發變得更加容易:
運算符重載——對運算符進行重載可以使DSL可以提供一個更為自然的語法Hash和符號(Symbol)——使用Hash和符號可使表達關系和標識對象更加容易Block——Block可以封裝可運行邏輯,並允許邏輯儲存起來(置於Hash中),用於稍後執行動態類型擴展——可以用動態的方式向類和對象加入方法方法缺失(Method Missing)——當調用了一個不存在的方法時,可以進行自陷(Trap),這樣可以避免需要提前了解所有操作整合——可以使用已有Java代碼為了全面獲得使用JRuby創建DSL的好處,演講中還給出了關於編程方式的技巧:確保你不會使用動態語言來編寫Java代碼從通用構建Block(Common Building Blocks)創建DSL識別問題,然後創建出一個合適的語法表達出解決方案提供元數據和行為——不要讓你的DSL變成配置文件用Ruby的方式思考:使用類型擴展;使用Block;在對象上使用方法保證有限的作用域;僅僅解決領域中相應的小部分問題,不要讓DSL變成一個通用編程語言對於開發人員來說,DSL是另外一種可以利用的工具。只要花一小部分時間,就可以節省更大部分的時間。