DSL——领域特定语言(domain-specific language)

915 阅读1分钟

什么是DSL

维基的定义:领域特定语言指的就是专注于某个应用程序领域的计算机语言。

简单说,专门为了解决某一个问题而制造出来的语言,比如html、css、sql等。而我们常用的js、java、c等属于通用编程语言GPL(General Program Language),并没有限定于只解决一种问题。

内部DSL和外部DSL

image.png

外部DSL

定义:使用专用的语言引擎来实现的DSL,例如:SQL、HTML、Awk。

优点:

  1. 独立于程序开发所使用的语言;
  2. 根据目的设计语法,不被现有语言的语法所影响;

缺点:

  1. 学习成本较高(毕竟要学习一个全新的语言)

内部DSL

定义:在现有的语言中,利用语言的特性实现的DSL,例如:多种Lisp方言,开发者自己使用Scala、Ruby实现的DSL。比如基于JavaScript本身特性的jQuery。

优点:

  1. 学习成本较低,无需学习一本新语言;
  2. 可以使用宿主语言的全部特性;
  3. 无需实现全部的词法、语法解析,实现成本低;

缺点:

  1. 可以实现的语法和语义受宿主语言影响;
  2. DSL依赖于程序开发所使用的语言;

语法噪音

syntactic noise is syntax within a programming language that makes the programming language more difficult to read and understand for humans.

参考