posts - 176, comments - 240, trackbacks - 0, articles - 7

关于Ruby DSL

Posted on 2006-07-16 22:41 canonical 阅读(2037) 评论(2)  编辑  收藏 所属分类: 软件开发
  最近ruby语言的流行似乎再次引发了DSL(Domain Specific Language)讨论的热潮。从语法表现形式上看,通过对于ruby语言的深度hack, 充分挖掘ruby语言的某些语法特征,可以使得正常的ruby语句看起来比其他计算机语言更接近于人类的自然语言,某些人因此认定ruby语言是DSL的天然载体。但是在我看来,具体语言的语法表达形式对于DSL的核心价值而言并不是最关键的。
   首先,DSL的核心在于高效的表达语义,而并不在于是否接近自然语言。接近于自然语言并不意味着更加domain, 因为自然语言也是一种通用语言,它未必能够比采用其他语法形式的语言更加有效的对domain事物进行描述。典型的有数学符号和化学分子式。
   第二,作为DSL, 紧凑的表达形式是一方面,另一方面是这种表达形式的稳定性,即如何防止人们写出不符合DSL规范的语句。ruby语言的片断直接作为DSL无疑是一种naive的解决方案,我们可以轻易写出大量不同形式的ruby语句,而它们在语义上是等价的(这意味着通过单元测试也无法发现它们的不同),即人们不按照设计的DSL语法书写,这造成DSL的解体。
   作为一种DSL构造语言,其核心能力在于如何将second class的domain中的概念(非语言本身内置的概念)封装到first class的表达形式中。ruby作为一种动态语言,可以更加轻易对于自身meta data进行内省,典型的如ruby中的ActiveRecord设计. 但是在我看来,这种概念提升能力在ruby的语法结构中也是有限的,原因恰在于ruby的语法太多样化了。实际上,我更加看好xml结构的均一性。

Feedback

# re: 关于Ruby DSL  回复  更多评论   

2006-07-17 10:42 by charon@xxx
+1

目前我对这类寄生状态的DSL不看好,最大的一个原因是定义太方便了,很容易使一些未受过专业训练的哥们以非常规的方式定义出一些东西来。

另外,自然语言未必是个好东西,这个玩意儿的二义性太强了。

# re: 关于Ruby DSL  回复  更多评论   

2006-07-17 11:23 by Anders小明
利用如ruby一样的动态语言实现的dsl是一种偷懒的方式。
使用xml结构,将带来表达的困难,需要图形化的工具协助

只有注册用户登录后才能发表评论。


网站导航: