MPS帮助你创建你自己的领域特定语言

MPS是Jetbrains公司推出的一个产品:https://www.jetbrains.com/zh-cn/mps/

MPS帮助你创建你自己的领域特定语言

领域专用语言 (DSL)

什么是领域专用语言?

领域专用语言是一种针对特定类问题优化,包含更高级抽象的编程语言。 DSL 使用来自专业或领域的概念和规则。

领域专用语言与“真正的”编程语言有何不同?

领域专用语言通常没有 Java、C 或 Ruby 等通用语言复杂。 通常,DSL 是与正在设计 DSL 的领域专家密切协作开发的。 在许多情况下,DSL 并不是由软件人员使用,而是由熟悉 DSL 所针对领域的非编程人员使用。

领域专用语言有什么优点? 我为什么要关注?

使用 DSL 有很多优点。 使用 DSL 最明显的优点在于,一旦您获得了一种语言和转换引擎,您在 DSL 覆盖的软件开发特定方面的工作就会变得更有效率,因为您不必手动完成繁琐的工作。 如果您从 DSL 程序生成源代码(而不是解释它),可以使用不错的、领域专用的抽象,

而无需任何运行时开销,因为就像编译器一样,生成器可以移除抽象并生成有效的代码。

如果您有一种方法可以用与领域高度一致的语言表达领域重点,您的思路将变得更加清晰,因为您编写的代码不会被实现细节搞得混乱。 换言之,使用 DSL 允许您将基本点与复杂性分开。

DSL 的领域、抽象和符号与领域专家(即非编程人员)如何表达自己高度一致,这就在技术人员与领域人员之间形成良好的配合

使用 DSL 和执行引擎可让应用程序逻辑以独立于目标平台的 DSL 代码表达。 使用 DSL 可以提高所创建产品的质量:错误更少、架构更加一致、可维护性更高。 这是移除(不必要的)自由度,避免代码重复和实现重复工作自动化的结果。

领域专用语言和常规代码如何结合在一起?

集成传统代码和 DSL 代码有两种完全不同的方式。 第一种将 DSL 代码和常规代码保存在单独的文件中。 接下来,DSL 代码由自动代码生成器转换为编程语言代码,或者程序加载并执行领域专用代码。 这是第一种方法,采用分离的通用语言 (GPL),而 DSL 代码则称为外部 DSL。 可以将 SQL 视为外部 DSL 的一个示例。

另一种方法是将 DSL 代码和通用代码在同一个应用程序文件中混合,让它们更紧密地集成。 DSL 重用 GPL 的语法和解析器,并利用宿主语言的可用扩展选项。 术语“内部 DSL”用于描述此类场景。

值得一提的是,一些 GPL 比其他 GPL 更适合扩展。

根据具体情况,这两种方法都有意义,MPS 同时支持这两种方法。

DSL 的结构和语法是以嵌入 DSL 代码的语言编写代码来定义的。 通常,IDE 不了解 DSL,因此不提供支持(代码补全、自定义错误检查等)。 但采用 MPS,您可以使用 MPS 框架及其专用 DSL 来开发语言,从而定义语言扩展。 因此,IDE 得以了解它们,所以系统可为领域专用的嵌入式语言提供完整的 IDE 支持。

什么是面向语言的编程?

术语面向语言的编程由 JetBrains CEO,MPS 之父 Sergey Dmitriev 在其 2004 年的文章面向语言的编程:下一个编程范式中提出。 其他人提出了相关方法,通常是以不同的名字;一个主要的例子是 Charles Simonyi 及其意图编程方法,Martin Fowler 2005 年在其语言工作台:领域专用语言的杀手应用?书中描述了该方法。

核心思想是我们在开发软件时不仅使用一种语言,而是使用最适合每项任务的语言。 与表面上主张采用类似方法的多语言编程相反,面向语言的编程明确鼓励开发者构建自己的 DSL,或者使用作为该方法一部分的领域专用概念扩展现有语言。 为了使其变得可行,诸如 MPS 之类的语言工作台是面向语言的方法的重要组成部分。

使用 MPS,您可以为任何新语言定义自定义编辑器,以便更轻松使用 DSL。 即使是不熟悉传统编程的领域专家也可以在 MPS 中轻松工作,领域专用语言使用其领域专用术语设计。

在下面的视频中,您可以看到如何使用 MPS 进行交互式语音响应 (IVR) 的示例。 此 DSL 的目标是非技术人员,因此用户体验已根据他们进行调整。

为什么选择MPS?

领域专用语言。直接使用领域概念和逻辑语言表达您特定领域的流程和知识。

MPS帮助你创建你自己的领域特定语言

投影编辑器。以您领域的每个人都能理解的术语进行沟通。 通过投影编辑使用非文本符号,包括数学符号、图表和表单。

MPS帮助你创建你自己的领域特定语言

编辑器支持。我们的智能编辑器可以通过快速修复、单词补全和意图来帮助和指导您完成整个过程。

MPS帮助你创建你自己的领域特定语言

何时选择MPS?

敏捷法律执行工厂 (Agile Law Execution Factory)。领域专用语言,用于实施荷兰税法并处理该法的变更。

MetaR。一组给生物医学科学家具有低计算技能的数据分析语言。

mbeddr。一组用于嵌入式软件工程的集成和可扩展语言。

MPS帮助你创建你自己的领域特定语言


分享到:


相關文章: