敏捷扩展

现代软件开发中,领域特定语言 DSL 由于其贴近领域问题,可以降低软件开发和维护的复杂度,因而承担了重要的作用。从 DSL 实现角度,内部 DSL(embedded DSL,简称 eDSL)是将一种现有的通用编程语言作为宿主语言,使用宿主语言提供的语言特性来扩展面向领域的语法,其相比完全独立构建 DSL 的实现方式(专门的语法解析、编译优化及配套工具等)具备以下优势:

  • 可复用宿主语言的语言特性,表达力强。
  • 可复用宿主语言配套设施(库生态,编译工具,开发环境等),构建门槛低。
  • 无缝嵌入到宿主语言工程中,可以高效的穿越“领域”进行数据交互。

因而 eDSL 被广泛应用于各个领域,比如 UI 布局、数据库访问、云基础设施部署、编译脚本等场景。相应的,仓颉编程语言通过提供丰富的语言扩展能力,来支持面向领域的 eDSL 构建。

本章以下内容首先着重介绍仓颉提供语言扩展能力,包括基于原生语法的扩展能力,以及允许开发者构建新语法的元编程能力,最后以声明式 UI 为例介绍如何使用以上能力以及带来的效果。