领域专用语言是编程语言或规范语言的一种类型,致力于特定问题领域,特定问题表示技术,或特定解决技术。
领域专用语言的例子包括HTML、Verilog和VHDL硬件描述语言、用于符号数学的Mathematica和Maxima、关系数据库的SQL、创建解析器的YACC语法、指定词法分析器的正则表达式、创建图表语言的通用Eclipse模型系统、声音和音乐合成的Csound、GraphViz和GrGen的输入语言、用于图布局和图重写的软件包。
相反的是:
1、相通用目的的编程语言,诸如C、Java 或Python
2、 通用目的的模型语言诸如UML
一个领域专用语言被专门创建去解决一个特定领域里的问题,而不是打算能解决问题之外的。
与此相反,通用目的语言被创建用于解决许多领域的问题。领域也许是一个商业领域。
DSL是一种有着特定目的语言。DSL和脚本语言之间的区别在某种程度上是模糊的,但DSL常常缺乏低级功能,如文件系统访问、进程间控制和其他表征功能齐全的编程语言,脚本或其他等的功能。许多DSL不编译成字节码或可执行代码,但是编译成各种各样的媒体对象:GraphViz导出为PostScript,GIF,JPEG等 ,Csound编译成视频文件。
SQL代表一个有趣的例子:它被认为是一种DSL,因为它具体到一个特定领域,并且它常常被从其他应用程序里调用,但是SQL比其他许多脚本语言有更多的关键字和函数,通常被认为是它自己权利的一种语言,也许因为在编程中,数据库操作的普遍,在这个语言里需要是一个专家。
一个非常小的语言像一个小刀,可以用几千种不同的方式使用,从切食物到砍树。
一个DSL语言就像一个电钻:它是一个在特定上下文中有着广泛用途的强大工具。
一个通用语言是一个全集,有多种多样的工具用于执行各种各样的任务。
DSL应该被正看着他们工作台的程序员使用,意识到他们需要一个更好的钻子,发现一个独有的DSL确切地提供了
参考文献:
[0] Domain-specific_language
https://en.wikipedia.org/wiki/Domain-specific_language