打算从今天开始,系统的学习一下DSL相关技术。
这个系列的所有文档都来自于MF的BLIKI中的Domain Specific Languages,其余文字都是对其的理解和整理。
关于什么是DSL,之前的文章有提到过。
简单的说
DSL与通用语言相区别,是为特定目的而生的语言,它并不是什么新东西,历史几乎和计算机的历史一样长。
DSL的应用广泛而常见,比如CSS,比如Wiki。DSL通过分析特定问题域提炼动态模型,从而标准化问题处理流程。
恩,先从MM图看起:
重点概念
DSL的类型
DSL可以分为内部DSL(Internal DSLs)和外部DSL(Internal DSLs),主要区别在于其与实现语言的关系。
内部DSL的语法是其实现语言的子集,典型的如Ruby;外部DSL通常是定制的特殊语法,如HQL。
Language Workbenches 也是DSL实现的方式之一,特定的平台有其特殊性。
API风格的区别
传统意义的程序语言,在实现具体逻辑的时候,往往是一种命令查询风格API ;而DSL通常是口语化接口。
程序比较,都用Java实现
命令查询风格
Event doorClosed = new Event("doorClosed", "D1CL");
Event drawOpened = new Event("drawOpened", "D2OP");
Event lightOn = new Event("lightOn", "L1ON");
Event doorOpened = new Event("doorOpened", "D1OP");
Event panelClosed = new Event("panelClosed", "PNCL");
Command unlockPanelCmd = new Command("unlockPanel", "PNUL");
Command lockPanelCmd = new Command("lockPanel", "PNLK");
Command lockDoorCmd = new Command("lockDoor", "D1LK");
Command unlockDoorCmd = new Command("unlockDoor", "D1UL");
State idle = new State("idle");
State activeState = new State("active");
State waitingForLightState = new State("waitingForLight");
State waitingForDrawState = new State("waitingForDraw");
State unlockedPanelState = new State("unlockedPanel");
StateMachine machine = new StateMachine(idle);
idle.addTransition(doorClosed, activeState);
idle.addAction(unlockDoorCmd);
idle.addAction(lockPanelCmd);
activeState.addTransition(drawOpened, waitingForLightState);
activeState.addTransition(lightOn, waitingForDrawState);
waitingForLightState.addTransition(lightOn, unlockedPanelState);
waitingForDrawState.addTransition(drawOpened, unlockedPanelState);
unlockedPanelState.addAction(unlockPanelCmd);
unlockedPanelState.addAction(lockDoorCmd);
unlockedPanelState.addTransition(panelClosed, idle);
machine.addResetEvents(doorOpened);
口语化风格
doorClosed. code("D1CL");
drawOpened. code("D2OP");
lightOn. code("L1ON");
panelClosed.code("PNCL");
doorOpened. code("D1OP");
unlockPanel.code("PNUL");
lockPanel. code("PNLK");
lockDoor. code("D1LK");
unlockDoor. code("D1UL");
idle
.actions(unlockDoor, lockPanel)
.transition(doorClosed).to(active)
;
active
.transition(drawOpened).to(waitingForLight)
.transition(lightOn). to(waitingForDraw)
;
waitingForLight
.transition(lightOn).to(unlockedPanel)
;
waitingForDraw
.transition(drawOpened).to(unlockedPanel)
;
unlockedPanel
.actions(unlockPanel, lockDoor)
.transition(panelClosed).to(idle)
;
DSLs实现模型
实现DSL,主要是针对特定问题域进行动态状态建模,模型可以是任意的:对象模型,结构化模型或者其他的任何实现模型;程序语言通常会很关注语法以及语义,DSLs中的建模主要就是为了建立问题域的描述语义。
DSLs实现方法
代码生成(Code-Generation)和解释运行(Interpretation)是DSL的两种实现方式,前者在编译时处理模型,后者在运行时应用模型。
从实现的角度来讲,前者更加快捷方便,而后者更加精致有效;短期看代码生成可以很快应用,长期看解释运行更能形成效益。
分享到:
相关推荐
Groovy因其灵活性和表达力而成为实现DSL的理想选择之一。 ##### 领域特定语言(DSL)定义 DSL是一种专注于解决特定问题领域的编程语言或可执行规范语言。与通用目的语言(General Purpose Language, GPL)相比,DSL通过...
Groovy的设计理念之一就是简化编程过程,通过减少代码量来提高生产力。据研究显示,在执行相同的任务时,使用Groovy编写的程序通常只需要Java所需代码量的1/3到1/10。 #### Groovy的特点 - **简洁性**:Groovy简化...
西门子840D数控系统是西门子推出的高端数控系统之一,广泛应用于各种精密加工中心、车削中心等机床设备上。840D系列包括了840D和840DSL两个版本,其中840DSL是基于840D的基础上进行了优化和升级,更加适应现代制造业...
在这一背景下,数字用户线路(Digital Subscriber Line,简称DSL)技术应运而生,成为解决最后一公里问题的关键技术之一。本文将详细介绍DSL技术中的几种常见类型:对称数字用户线(Symmetric Digital Subscriber ...
《特定领域开发与 Visual Studio DSL 工具》是微软.NET开发系列书籍之一,主要介绍了如何利用 Visual Studio 的 Domain Specific Language (DSL) 工具进行高效、专业的软件开发。本书由 Steve Cook、Gareth Jones、...
在工业自动化领域,数控系统作为核心部件之一,广泛应用于各种加工设备中,以实现高精度的自动化控制。西门子802D sl数控系统作为一款高性能的控制系统,其在金属切削机床、塑料机械等领域的应用十分广泛。当光栅尺...
诊断手册是802Dsl系统的核心文档之一,为系统维护和故障排除提供了全面的指导。它包含了系统故障报警的概述、报警代码列表、报警时系统的反应以及一系列的附件,帮助技术人员快速定位和解决出现的问题。对于设计人员...
此外,使用模板生成领域特定语言(DSL)也是关键知识点之一,特别是StringTemplate的使用和特性,以及如何从简单的输入模型生成模板,实现在不同输入模型下的模板复用。 ### 综合运用 书中强调了模式的组合使用,...
本文档主要介绍Drools6规则流的基础使用方法,特别是对比于Drools5版本的变化之处。规则流是一种控制规则执行顺序的重要机制,通过它我们可以定义规则之间的依赖关系以及执行路径,这对于复杂业务逻辑的应用非常有用...
- **层次结构**:在Linux操作系统上运行,基于Hadoop等分布式计算框架,DISQL之上构建了DQuery和LSP,形成完整的数据分析与处理生态。 - **架构设计**:DISQL的架构包括Simple Mode、DQuery Mode、Complex Mode三种...
其中,CDMA技术成为3G的核心技术之一。在中国,三大运营商分别获得了不同的3G牌照,包括中国移动的TD-SCDMA、中国联通的WCDMA以及中国电信的WCDMA2000。 ##### 第4代移动通信系统(4G) 4G技术是集成了3G与WLAN的...
1. **模块化结构:** Play Framework 的设计原则之一是模块化,这使得开发者可以轻松地添加或移除功能,根据项目需求定制框架。它包含了诸如模板引擎、JSON处理、数据库集成等模块。 2. **异步编程模型:** 与传统...
一、Griffon框架简介 Griffon是一个开源项目,它将Groovy语言与JavaFX或Swing结合,为Java开发者提供了一种全新的桌面应用开发方式。Griffon的核心设计理念是MVC(Model-View-Controller)架构,这使得代码结构清晰...
Java是Gradle主要支持的编程语言之一,Maven和Ant则是其在构建工具领域中的前辈。通过了解这些标签,我们可以知道本文将涉及到的Java项目构建、Maven与Gradle的对比以及Ant构建工具的相关知识。 在提供的部分内容中...
5. Kotlin DSL改进:Gradle的Kotlin DSL是其强大特性之一,6.7.1版本对Kotlin DSL进行了进一步优化,提供了更好的类型安全性和更简洁的语法。 三、使用Gradle 6.7.1的益处 1. 提高开发效率:通过自动化构建流程,...