领域特定语言

作者:Martin Fowler,Rebecca Parsons 参与

2010

关于实现内部和外部 DSL 的详细指南

自从我进入计算机领域以来,领域特定语言 (DSL) 就一直存在,但很难找到关于如何使用它们的太多信息。DSL 是小型语言,专注于软件系统的特定方面。您无法使用 DSL 构建整个程序,但您经常在一个主要使用通用语言编写的系统中使用多个 DSL。

DSL 主要有两种形式:外部和内部。外部 DSL 是一种独立于宿主通用语言解析的语言:好的例子包括正则表达式和 CSS。外部 DSL 在 Unix 社区中有着悠久的传统。内部 DSL 是宿主通用语言中的一种特殊形式的 API,通常被称为流畅接口。像 JMock 这样的模拟库定义测试预期的方式就是很好的例子,Ruby on Rails 使用的许多机制也是如此。内部 DSL 也有一段悠久的历史,特别是在 Lisp 社区。

人们发现 DSL 很有价值,因为与传统的库相比,精心设计的 DSL 使用起来要容易得多。这提高了程序员的生产力,这始终是有价值的。特别是,它还可以改善与领域专家的沟通,这是解决软件开发中最困难问题之一的重要工具。CSS 就是一个很好的例子,大多数编写 CSS 的人并不认为自己在编程。然而,尽管如此,我通常认为最终用户不会直接用 DSL 编写代码——重要的是沟通的增强。

尽管 DSL 已经存在很长时间了,但缺乏如何使用它们进行编程的知识是一个很大的障碍——这正是我写这本书的原因。本书提供了开发内部和外部 DSL 的技术,为您提供了在它们之间进行选择的信息以及开始工作的大量信息。我还强调了在库上对 DSL 进行分层的重要性,因此您通常会同时构建两者。还有一些关于代码生成的资料,这是使用 DSL 时偶尔必不可少的一部分。

企业应用架构模式一样,这本书也是一本双重书籍,既提供了学习 DSL 的叙述,也提供了详细的参考书,所以不要被高页数吓到。您可以通过阅读叙述部分(142 页)来很好地掌握该主题,并在需要时将其余部分用作参考。

本书提供电子版。亚马逊有 Kindle 版本。InformIT 有 epub 和 pdf 版本。苹果在 ibookstore 中有 epub 版本。

勘误表

延伸阅读

DSL 指南

我在本网站上的指南页面是我收集有关 DSL 的信息的汇总处。

免费第一章

本书免费提供的第一章很好地概述了 DSL 以及我使用它们的方法。

DSL 模式目录

书中模式的参考 URI。每个都列出了模式意图和章节参考。

翻译

日语、韩语、葡萄牙语