领域特定语言(英语:domain-specific language、DSL)指的是专注于某个
应用程序领域的
计算机语言。又译作领域专用语言。同名著作是DSL领域的丰碑之作,由世界级软件开发大师和软件开发“教父”Martin Fowler历时多年写作而成,ThoughtWorks中国翻译。
在定义DSL是什么的问题上,Fowler 认为业界经常使用的一些特征,例如“关注于领域”、“有限的表现”和“语言本质”是非常
模糊的。因此,唯一能够确定DSL边界的方法是考虑“一门语言的一种特定用法”和“该语言的设计者或使用者的意图”:
如果XSLT的设计者将其设计为XML的转换工具,那么我认为XSLT是一个DSL。如果一个用户使用DSL的目的是该DSL所要达到的目的,那么它是一个DSL,但是如果有人以通用的方式来使用一个DSL,那么它(在这种用法下)就不再是一个DSL了。
以Fowler的观点,DSL首先是一种帮助用户从一个系统中抽象出某些部分的工具。所以“当你意识到你需要一个组件,或者当你已经有了一个组件而你希望简化操作它的方式的时候”,DSL是有用的。使用DSL确实提供了某些益处。DSL不仅提高了代码的易读性,让开发者可以和领域专家更好的交流,而且是改变执行上下文的一种手段,例如:把
逻辑从编译时切换到运行时,或者当命令式编程不是很合适的时候转用声明式计算模型。
领域特定语言(英语:domain-specific language、DSL)指的是专注于某个
应用程序领域的
计算机语言。又译作领域专用语言。不同于普通的跨领域通用计算机语言(GPL),领域特定语言只用在某些特定的领域。 比如用来显示网页的
HTML,以及
Emacs所使用的Emac LISP语言。
外部DSL:不同于应用系统主要使用语言的语言,通常采用自定义语法,宿主应用的代码采用文本解析技术对外部DSL编写的脚本进行解析。例子如:
正则表达式、
SQL、AWK以及Struts的配置文件等
语言工作台:一种专用的
IDE,用于定义和构建DSL,具体的讲,语言工作台不仅用来确定DSL的语言结构,而且是人们编写DSL脚本的编辑环境,最终的脚本将编辑环境和语言本身紧密的结合在一起。
1、提高开发效率,通过DSL来抽象构建模型,抽取公共的
代码,减少重复的劳动;
4、Groovy自身不是 DSL。 Groovy官方已经发布了较多基于 Groovy书写的 DSL,比如 GANT, GORM, XMLBuilder, HtmlBuilder等等。