专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程思想 » 特定语言版本:DSL领域特定语言初探 »正文

特定语言版本:DSL领域特定语言初探

来源: 发布时间:星期二, 2009年2月3日 浏览:9次 评论:0
  所谓DSL领域专用语言(do specic language / DSL)其基本思想是“求专不求全”不像通用目语言那样目标范围涵盖切软件Software问题而是专门针对某特定问题计算机语言DSL的于员正如伽南地的于以色列人是最初也是最终梦想几乎自计算机发明伊始人们就开始谈论DSL使用DSL了而前几年随着被誉为“Web开发领域专用语言”Ruby on Rails迅速走红DSL又次成为人们讨论热点话题很多人都认为DSL将会是软件Software业“next big thing”然而随着DSL日益流行围绕着DSL出现了很多质疑和误解比如下面这几个:

  DSL目标受众是非业务员或者最终用户

  在很多人心中DSL等同于“非编程语言”(programminglanguage for non-programmers)因此DSL最终受众应该是非切不直接被最终用户使用DSL都不是真正DSL仅仅是另种使代码看起来不像代码无聊窍门技巧

  这是个很有趣观点事实上在计算编程语言发展历史上确确出现过“非编程语言”而且还非常有名它们就是FORTRANCOBOL这些第代高级语言在当时那个时代计算机主要目是科学计算员则是专指那些摆弄开关继电器纸带以及汇编语言geek们而计算机主要受益者非员——也就是那些学者和研究员——不得不委托这些人帮助它们完成从数学公式到机器指令转换于是第代高级语言主要目是缩短计算公式和可执行代码的间差距(比如Fortran)或者是简化信息管理员日常工作(比如COBOL)有趣恰恰是这些当年“非员”把软件Software开发发展成了门正当且颇为体面职业

  其实当年“非编程语言”和今日DSL境况颇为相似所区别当代企业级信息系统更为复杂所关注焦点逐渐从计算转移到数据上业务领域和计算机物理过程也不再具有简单直接对应关系了而且随着社会分工细化就算是通过DSL我们仍然不太可能把那些衣冠楚楚HR们销售们部门经理们统统拉下水变成新新

  我仍然要承认以最终用户为目标受众DSL是个很引人侧目很有意思主意但是在相当长段时间内都是不太现实或许我们需要新思路方法(比如精益)来协调IT部门和业务部门或许我们需要全新软件Software工程理论或者某些非常具有独创性工作方式谁知道呢预言未来总是吃力而不讨好但我觉得在目前情况下简单把DSL受众限制在非业务员或最终用户上是值得商榷

  DSL = 整洁代码

  这种观点和前面观点正好相反把DSL完全当作游戏切能将代码写得整齐好看窍门技巧都归结为DSL

  虽然从形式上看DSL和“整洁代码”都具有简洁清晰特征但并不能因此将简单将两者草率地归为等同从概念上说编写过程就是把业务领域中问题通过代码或者模型表达出来:

  由于计算机模型较为单(归根结底都是运算和存储)就算是在面向对象技术成为主流今天通常情况下计算机不太可能做到和业务领域中概念或者具有某些直觉对应 也这正是这样软件Software修改和可维护性并没有想象中容易我们必须不断地将业务领域中概念转换成相应代码模型然后再进行修改这种间接性直接造成了软件Software复杂度

  而DSL主要目就是要消除这样复杂度(或者说以构造DSL复杂度代替这种复杂度)DSL就要是要以贴近业务领域方式来构造软件Software因此DSL简洁性往往是种思维上简洁性使我们不用费太多气力就能看懂代码所对应业务含义

  从这里我们可以看出DSL和“整洁代码”根本区别“整洁代码”只是泛泛要求代码简洁易懂而不太在意是否贴近业务领域比如对于个J2EE开发者来说DAODTOFormBeanAction已经足够清晰了但是这却跟DSL沾不上关联DSL更注重强调使用业务词汇尽可能贴近业务模型来编写代码使业务模型和模型的间具有简洁对应关系

  因此我们不能将DSL等同于“整洁代码”只能说DSL是种“整洁代码”而已

  DSL必须以文本代码形式出现

  Do Specied Language顾名思义种语言因此DSL定是文本代码形式出现不是通过文本代码描述就不是DSL

  我们的所以偏爱使用文本代码主要是由于文本代码易于修改且修改效率极高多年来软件Software工程实战表明文本代码是最有效率编辑形式但是对于DSL问题则有些区别

  正如我们前文所说过DSL首要是使尽可能地接近业务领域中问题从而消除不必要间接性和复杂性对于大多数业务领域而言文本代码形式经足够好了我们可以很容易通过特定格式文本描述业务领域中问题然后也确实存在着些较为特殊领域在这些领域中文本代码并不是最佳表现形式为了更好贴近业务领域中概念我们可能回选择使用些图形化DSL比如时下颇为流行个DSM(Do Specic Modeling)工具GEMS(Generic Eclipse Modeling )中就大量地使用了区别图形化DSL来表述系统各个区别侧面所以我们并不能简单把DSL局限在文本形式上面

  DSL语法应该尽可能地接近英语或者其他自然语言

  由于大多数DSL是描述性因此我们应该尽可能地让DSL接近日常使用英语或者其他自然语言这样可以增强DSL表现能力



  业务自然语言(Business Nature Language)是DSL个重要分支产生是基于这样些事实:对于大多数企业应用而言使用些类似自然语言语法和结构构造DSL是不错选择;通过业务自然语言可以推动和促进业务人员和员的间沟通;类自然语言DSL相较其他形式DSL重用起来较为容易正是由于上述这些特点BNL类DSL在DSL实战中是最流行我个人就曾在 3个区别项目里实现了针对区别领域BNL类DSL我甚至在Smalltalk语法基础上修改提炼得到了种具有通用语法表达脚本语言利用它可以方便地构造DSL

  虽然BNL是我实战得最多也是最为喜爱种DSL形式通过前文分析我们仍然不能把它当作唯DSL形式我们必须时刻谨记DSL首要目是使尽可能地接近业务领域中问题从而消除不必要间接性和复杂性合理且恰当地选择语法形式永远是构造DSL重中的重



标签:dsl语言
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: