什么是DSL
维基的定义:领域特定语言指的就是专注于某个应用程序领域的计算机语言。
简单说,专门为了解决某一个问题而制造出来的语言,比如html、css、sql等。而我们常用的js、java、c等属于通用编程语言GPL(General Program Language),并没有限定于只解决一种问题。
内部DSL和外部DSL
外部DSL
定义:使用专用的语言引擎来实现的DSL,例如:SQL、HTML、Awk。
优点:
- 独立于程序开发所使用的语言;
- 根据目的设计语法,不被现有语言的语法所影响;
缺点:
- 学习成本较高(毕竟要学习一个全新的语言)
内部DSL
定义:在现有的语言中,利用语言的特性实现的DSL,例如:多种Lisp方言,开发者自己使用Scala、Ruby实现的DSL。比如基于JavaScript本身特性的jQuery。
优点:
- 学习成本较低,无需学习一本新语言;
- 可以使用宿主语言的全部特性;
- 无需实现全部的词法、语法解析,实现成本低;
缺点:
- 可以实现的语法和语义受宿主语言影响;
- DSL依赖于程序开发所使用的语言;
语法噪音
syntactic noise is syntax within a programming language that makes the programming language more difficult to read and understand for humans.