DSL简介(转)

DSL编程:有人将DSL编程称之为声明式(Declarative)编程。
DSL是在模型之上建立的一种更加灵活的对 模型化的理解和使用方式。
语义模型是DSL的核心。
内部DSL:用通用语言的语法表示DSL,需要安装某种风格使用这种语言。
外部DSL:在主程序设计语言之外,用一种单独的语言表示领域专有语言。可以是定制语法,或者遵循另外一种语法,如XML。
DSL定义:针对某一领域,具有受限表达性的一种计算机程序设计语言。
外部DSL:不同于应用系统主要使用语言(c,java,c++,c#)的语言。
内部DSL:通用语言的特定用法。内部DSL通常是一段合法的程序,但是具有特定的风格。而且只用到了语言一部分特性。Ruby形成了显著的DSL文化。后面好好看看。
http://blog.csdn.net/chgaowei/article/details/21296483

MDSF:DSL(Domain Specific Language)介绍

  前面介绍过模型驱动开发(MDD)、软件工厂(Software factory)、特定领域建模 DSM(Domain Specific)等都是高抽象的开发方法,这些方法使用的语言都是特定领域语言(DSL)。相比于通用目的语言(C#/C++/JAVA/Delphi等)而言,DSL是一种为了特定任务而设计的开发语言,例如SQL是一种专门处理数据库的语言,本篇将介绍一下DSL。

一种语言

  我们熟知的编程语言(如C#、Ruby等)是一种通用语言,MDA基于UML语言,而模型驱动开发(MDD)基于DSL。DSL是一种基于特定领域的语言,它使工作更贴近于客户的理解,而不是实现本身,这样有利于开发过程中,所有参与人员使用同一种语言进行交流。

  

DSML

  DSML是 特定领域模型语言(domain-specific modelling language),之前介绍的MetaEdit+使用的DSM方法中使用的就是DSML,它是一种可以用来构建图形模型的一种DSL,DSM的GOPPRR就是一个用来构建DSML语言的元模型。

DSL涉及内容

  • 问题域、问题空间
  • 语法、语义
  • 案例、方法、工具

  

DSL架构

  

  • DSL脚本(DSL Script):每一个DSL的核心都是一个域模型,它定义了这一语言所代表的各种概念,这些概念的属性,以及它们之间的关系

    • 在问题域中用于构建、配置或者其他用途的一种语言
    • 可以是文本,也可以是图形,或者两者混合使用
      • 图形语言不只是图表,否则使用Visio之类的画图软件就行了,它实际上是要创建模型,这个模型要能够从概念上描绘你正在创建的系统,并对其内容进行图表化的表示。一个模型可以同时由多个图表来表示,每个图表表示模型的某个方面
      • 文本语言用户输入,可以快速的打字。
      • 文本语言的优势在于可以进行比较和合并,而图形表达式可以更容易的看出内容之间的关联。
      • 相对来说,文本语言比图形复杂
  • 语义模型(Semantic Model)
    • DSL脚本的一种内存完整表示
    • 有时候这个就是抽象语法树(AST)
    • 分离Parse和Generate
  • 生成代码(Generated Code):DSL的一个最重要的应用是用来生产简单的文本形式的工件,例如源代码、数据库脚本
    • DSL脚本的一种可执行表示
    • 解释语义模型

DSL应用的优点

  1. 高级别的重用:如果仅适用通用编程语言,则每次只能解决一个问题,但如果应用特定领域开发方法设计并实现一些特殊语言,每个特殊语言可以高效地解决一类相似的问题
  2. 使用DSL的软件架构可以跨接软件工程过程各阶段之间的鸿沟,特别是通过代码生成可以很好的进行设计和实现阶段的衔接
  3. 让领域专家参与开发过程,不仅仅是需求阶段,架构阶段也需要参与
  4. 通过在问题空间工作,可以让不熟悉如何实现技术的人,包括商业人士,也能够更了解模型
  5. 使用DSL表达的模型,可以在问题空间这个较高的抽象层次进行验证,这意味着可以在开发周期的更早期发现因为理解和表述而造成的错误。
  6. 一个模型中具备了重要的业务知识,将解决方案从一种技术迁移到另一种技术,或在同一技术的不同版本之间迁移,就变的相对容易。一般通过适当修改生成器或解释器就可以做到。

样式(Styles)

  

  之前在信息系统开发平台OpenExpressApp: 之 如何实现自动化测试框架介绍了在OEA上使用Ruby语法实现的一个自动化测试语言,这个就属于内部DSL。而在OpenExpressApp对建模支持的初步计划中介绍的MetaModelEngie属于外部DSL。

  外部DSL可以摆脱内部DSL寄宿语言的限制,可以重新设计一种新的语言,但是增加了学习新的语言的学习成本,并且需要工具的支持。

  

设计DSL

  为了降低风险,我们并不是马上就从头开始开发框架及其DSL,而是应该从现有的可以在某些应用中使用的代码开始,逐步的对其进行参数化,逐步的发现那些在不同应用中变化的部分,然后使这些部分依赖于DSL。

  自上而下的方法倾向于快速建立一个完整且自包含的模型,具有更长远的考虑,有助于保证结构的一致性。但是从另一方面看,这种方法容易导致在概念层设计出很复杂的模型,并且该模型难于实现。因此在实际应用中,将自上而下和自下而上两种方法交替使用会更有效。采用渐进的方式可以避免早期投入过大风险,但是需要定期进行一致性检查。

  在《Visual Studio DSL工具特定领域开发指南》书中对设计DSL做了如下步骤:

  1. 识别可变性与发现DSL:DSL是用你的框架具体的实现你的体系架构模式中可变的部分
  2. 开发领域模型捕获可变性
  3. 定义标记:在适当的地方使用常见标记法或与标记法相关的约定
  4. 开发验证的约束:识别树形之间的依赖性,认出快照中的强制或禁止的循环
  5. 开发并演进框架:理解你的DSL针对的代码体系结构,并在框架中编写它
  6. 测试DSL:包括验证的约束与规则、生成器与命令、以及生成的代码
  7. 演化和移植DSL:确保旧的模型在新版本的DSL中能够使用
  8. 识别好的DSL:范围、最小性、常见标记法,适度的冗余,合理的使用句法空间,使用用户术语

应用场景

   ......

书籍

  Martin Fowler花了几年时间写了一本DSL的书籍《Domain Specific Languages》,我还没有看,感兴趣的可以先看看它在网站上写的系列文章 Domain Specific Languages

  

  Best Practices for DSLs and Model-Driven Development

  读书笔记:Visual Studio DSL工具特定领域开发指南

  DSL的演进

 

http://www.educity.cn/wenda/130355.html

 

时间: 2024-09-19 09:17:40

DSL简介(转)的相关文章

演化架构和紧急设计: 使用 DSL

简介:至今, 演化构架和紧急设计 主要关注技术模式的紧急设计,本期将介绍使用特定领域语言 (DSL)捕获 领域惯用模式.系列作者 Neal Ford 用一个例子说明了该方法,显示了这种获取惯用模式 的抽象样式的优势. 惯用模式可以是 技术也可以是 领域.技术模式为常用的技术软件问题指出解决方案,例如在应用程 序(或应用程序套件)中怎样处理验证.安全和事务数据.前几期主要关注获取技术惯用模式所用的技术 ,例如元程序设计.域模式关注的是如何抽象常见业务问题.而技术模式几乎出现在所有的软件中,域模 式

Linux 2.6.19.x 内核编译配置选项简介

Linux 2.6.19.x 内核编译配置选项简介 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件.您可以自由链接.下载.传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明. 其他作品 本文作者十分愿意与他人共享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有作品的列表: 金步

Hbase简介和基本用法

一.简介 history  started by chad walters and jim 2006.11 G release paper on BigTable 2007.2 inital HBase prototype created as Hadoop contrib 2007.10 First useable Hbase 2008.1 Hadoop become Apache top-level project and Hbase becomes subproject 2008.10 H

《深入理解ElasticSearch》——1.2 ElasticSearch简介

1.2 ElasticSearch简介 虽然读者可能已经对ElasticSearch有所了解,至少已经了解了它的一些核心概念和基本用法.然而,为了全面理解该搜索引擎是如何工作的,我们最好简略地讨论一下它. ElasticSearch是一个可用于构建搜索应用的成品软件.它最早由Shay Banon创建并于2010年2月发布.之后的几年ElasticSearch迅速流行开来,成为商业解决方案之外且开源的一个重要选择,也是下载量最多的开源软件之一,每月下载量超过20万次.1.2.1 ElasticSe

mobl:针对移动Web开发的“.NET研究”DSL

简介 现在,针对移动设备像智能手机和平板电脑的应用开发很流行.Apple公司的AppStore(针对iPhone.iPod和iPad)拥有超过350,000种应用,而Android的marketplace也快速追赶上来,现在已经拥有超过200,000种应用.然而,Android和iOS并非是仅有的两种移动平台.BlackBerry也是有力的竞争者,此外还有Nokia.最近Microsoft发布了Windows Phone 7,HP也发布了新的WebOS设备.这样,对于用户来说有了多种选择,但对我

Sencha SDK 工具之 Slicer 简介

注:文章最后有 PPT 展示! Sencha SDK Tools(主页http://www.sencha.com/products/sdk-tools/)是 Sencha 公司围绕 Ext JS 和 JavaScript 应用程序所推出开发者工具箱.在 Sencha 公司内部,如何借助工具来提高生产力一直是大家努力追求的目标或者渴求所在.随着项目的加大,自动化工具需求的呼声也越来越高,于是出现了不少开源或非开源的辅助工具包.据笔者观察,从最早 Jack 所作的 JS Builder (参见我的旧

Python中title()方法的使用简介

  这篇文章主要介绍了Python中title()方法的使用简介,是Python入门中的基础知识,需要的朋友可以参考下 title()方法返回所有单词的第一个字符大写的字符串的一个副本. 语法 以下是title()方法的语法: ? 1 str.title(); 参数 NA 返回值 此方法返回其中所有单词的前几个字符都是大写的字符串的一个副本. 例子 下面的例子显示了title()方法的使用. ? 1 2 3 4 #!/usr/bin/python   str = "this is string

shiro(1)-简介

简介 apache shiro 是一个功能强大和易于使用的Java安全框架,为开发人员提供一个直观而全面的的解决方案的认证,授权,加密,会话管理. 在实际应用中,它实现了应用程序的安全管理的各个方面. shiro的功能 apache shiro能做什么? 支持认证跨一个或多个数据源(LDAP,JDBC,kerberos身份等) 执行授权,基于角色的细粒度的权限控制. 增强的缓存的支持. 支持web或者非web环境,可以在任何单点登录(SSO)或集群分布式会话中使用. 主要功能是:认证,授权,会话

Tutum公司简介

2015年10月21日,由Tutum公司的CEO Borja Burgos对外宣布,Tutum与Docker公司正式合作,大家对Tutum和Docker的合作还是很期待的.下面我简单介绍一下Tutum公司. Tutum的历史 Tutum创立的时间很难确定.Tutum(拉丁语里安全的意思)的最初构思是在2012年秋季,它是作为Borja Burgos在卡内基梅隆大学(匹兹堡)的研究生课程和在日本兵库县大学的硕士论文,Tutum是一个可以帮助企业过渡到云的安全支持系统. 在2013年初,Tutum有