新微赢技术网

标题: CLR之上的构建领域特定语言 [打印本页]

作者: (⿴羙‘妞    时间: 2009-3-16 19:02
标题: CLR之上的构建领域特定语言
 最近领域特定语言(DSL,Domain Specific Languages)这个话题比较热门。这可以从Rails现象中看到。Rails的流行以及Rails上广泛使用的领域特定语言(从现在起叫DSL),已经引起了对DSL的广泛兴趣。
  到现在为止开发人员有这样的印象,建立一个DSL,你需要专业的编译器理论知识,理解Lex和Yacc的内部工作原理并需要投入大量的时间来构建DSL。结果是极少数人愿意去尝试,他们都是从头开始构建自己的语言。
这往往是成本高昂。
  同时,动态语言的爱好者可以毫不费力的利用他们喜欢的动态语言的动态特性来构建领域特定语言。事实上,他们中的许多以这种方式构建的任何应用程序,都有着显著的复杂性。
  这两种方法的差别有重要意义。第一种方式是创建属于自己的语言,就是所谓外部的DSL(External DSL)。这是一个耗资巨大的项目,因为一切都要从头开始构建,需要考虑运算符的优先级规则、运行时类库、执行代码、错误处理和I/O。第二种方法是利用和修改宿主语言,就是所谓内部的DSL(Internal DSL)。这些都容易构建和维护。你只需要考虑如何修改,所有的其它东西(通常是你不用关心的)都已经被宿主语言处理了。
  另一种做法是构建连贯接口(Fluent Interface),把它叫做DSL。我认为这不是一种DSL,这种方法往往在语言的自由性方面受到很大的限制。Java和C#就是很好的例子,包括 Java 6和C# 3。你可以列举许多语言方面的API,但这不能让我觉得这是一个DSL。
  在任何情况下,我的个人偏好是使用具有很高语法灵活性的内部DSL。因为我基本上都是在CLR上工作,我想利用运行在这个平台上的宿主语言。它可以让我重用大部分的使用CLR的知识,不要低估这方面的好处。在你的手中有一个熟悉的环境是非常重要的。

  在深入语言之前,看看究竟什么是“高语法灵活性的语言”,怎么样?为内部DSL提供一个良好的宿主环境的语言需要具有哪些特性?
作者: SJPP    时间: 2010-2-7 15:05
我来自火星刚到地球什么都不懂
作者: 痴情浪子    时间: 2010-2-28 17:05
你这样的表现,就只配这几个字:太有才了!




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2