11月
5
2010
分類:
最近更新:
2010-11-05
Ruby 語言與特定領域語言(DSL)
在 Ruby 語言為人樂道的諸多能力之中,支持 特定領域語言(DSL) 是表現突出的一項能力,也是 Ruby 語言諸多特性融合後的精華。 DSL 在 Ruby 語言的應用程度,有如 Template 在 C++ 語言的狀況。Ruby 語言中的諸多工具,都是應用 DSL 的形式體現,例如 Ruby on Rails, Rake, RSpec 等等。
以 Ruby 語言設計新的 DSL ,是 Ruby 語言學習之路上的重要過程。所幸,相較於學習 C++ Template,學習以 Ruby 語言設計新的 DSL 的過程不算太困難,還帶點趣味性。Neal Ford 在 developerWorks 上發表了一系列 特定領域語言 (DSL) 的主題文章,最近的一篇《Evolutionary architecture and emergent design: Building DSLs in JRuby》教了一手以 Ruby 語言設計 DSL 的技巧。值得各位一讀。
在 Neal Ford 發表的 DSL 系列文章中,我建議關注 Ruby 語言的讀者應讀下列四篇。
- Evolutionary architecture and emergent design: Language, expressiveness, and design, Part 1 (中譯版本) - 語言表達力如何衍生出設計模式。
- Evolutionary architecture and emergent design: Language, expressiveness, and design, Part 2 (中譯版本) - 使用 DSL 掌握領域慣用模式。
- Evolutionary architecture and emergent design: Using DSLs (中譯版本) - DSL 的使用概念。
- Evolutionary architecture and emergent design: Building DSLs in JRuby (中譯版本) - 使用 Ruby 語言設計 DSL 時的實務技巧。
主題文章搜尋列表:
按照 Martin Fowler 在《Domain Specific Language》的定義,RoR, RSpec 這些 DSL 都屬於運作於 Ruby 語言內部的次領域語言。這種內部DSL 的設計模式歷史悠久,Lisp 尤為代表。Smalltalk 和 C++ Template 也大力支持內部 DSL。就我所知,Ruby 的 DSL 設計風格傾向於 Smalltalk 風格,例如我這篇《遞迴與Smalltalk式介詞應用》。
樂多舊網址: http://blog.roodo.com/rocksaying/archives/14354421.html