简单聊聊DSL
2020-12-29 本文已影响0人
twj小鱼儿
什么是DSL?
DSL(Domain Specified Language)领域专用语言。
DSL是为了解决问题描述者(使用者)和解决者(构建者)之间的沟通方式产生的,即一种在特定领域专家和实现者之间双方都能顺利沟通的“共同语言”。
常见的DSL
广义上,绝大部分编程语言都是DSL,是在计算机领域程序员和计算机之间的“共同语言”;常见的DSL主要有:软件构建领域 Ant、UI 设计师 HTML、硬件设计师 VHDL。我们这里主要讨论狭议的DSL。
DSL的特点
用于专门领域,不能用于其他领域
表现力有限,提供给问题描述者使用
不描述解答域,仅描述问题域
DSL与通用编程语言的区别
DSL 供非程序员使用,供领域专家使用
DSL 有更高级的抽象,不涉及类似数据结构的细节
DSL 表现力有限,其只能描述该领域的模型,而通用编程语言能够描述任意的模型
DSL 分类
要理解DSL 分类需要先理解一个概念。“元语言抽象”。
它是指通过一种语言来构建另一种语言。比如 Java 就是构建在 C 上的语言。
其中,从什么语言构建而来,这种构建来源的语言称为“宿主语言”。
根据是否从宿主语言构建而来,DSL 分为:
内部 DSL(从一种宿主语言构建而来)
外部 DSL(从零开始构建的语言,需要实现语法分析器等)
还有一种属于外部DSL的“非文本DSL”,即尽量使用图形化表述。比如 JetBrains 的 MPS。
我们通常所用的框架实际上就是一种内部 DSL。比如 Rails 框架就是基于 Ruby 的用于 Web 开发领域的内部 DSL。
如何构建 DSL
能够完整描述领域
简单易用
隐藏实现细节
flutter_dynamic 是一种解决Flutter动态创建应用的DSL,其很好地解决了产品与开发之间动态描述功能需求的问题。