技术控

    今日:86| 主题:49471
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 谈谈 DSL 以及 DSL 的应用(以 CocoaPods 为例)

[复制链接]
人生若初见ゥ 发表于 2016-10-3 17:09:20
110 1

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近在公司做了一次有关 DSL 在 iOS 开发中的应用的分享,这篇文章会简单介绍这次分享的内容。
  因为 DSL 以及 DSL 的界定本身就是一个比较模糊的概念,所以难免有与他人观点意见相左的地方,如果有不同的意见,我们可以具体讨论。
  这次文章的题目虽然是谈谈 DSL 以及 DSL 的应用,不过文章中主要侧重点仍然是 DSL,会简单介绍 DSL 在 iOS 开发中(CocoaPods)是如何应用的。
  没有银弹?

   1987 年,IBM 大型电脑之父 Fred Brooks 发表了一篇关于软件工程中的论文 No Silver Bullet—Essence and Accidents of Software Engineering 文中主要围绕这么一个观点:没有任何一种技术或者方法能使软件工程的生产力在十年之内提高十倍。
  There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.
  时至今日,我们暂且不谈银弹在软件工程中是否存在(
    这句话在老板或者项目经理要求加快项目进度时,还是十分好用的   ),作为一个开发者也不是很关心这种抽象的理论,我们更关心的是开发效率能否有实质的提升。
   
谈谈 DSL 以及 DSL 的应用(以 CocoaPods 为例)-1 (management,technology,Software,promises,项目经理)

  而今天要介绍的 DSL 就可以真正的提升生产力,减少不必要的工作,在一些领域帮助我们更快的实现需求。
  DSL 是什么?

  笔者是在两年以前,在大一的一次分享上听到 DSL 这个词的,但是当时并没有对这个名词有多深的理解与认识,听过也就忘记了,但是最近做的一些开源项目让我重新想起了 DSL,也是这次分享题目的由来。
   DSL 其实是 Domain Specific Language 的缩写,中文翻译为 领域特定语言 (下简称 DSL);而与 DSL 相对的就是 GPL,这里的 GPL 并不是我们知道的开源许可证,而是 General Purpose Language 的简称,即 通用编程语言 ,也就是我们非常熟悉的 Objective-C、Java、Python 以及 C 语言等等。
   Wikipedia 对于 DSL 的定义还是比较简单的:
  A specialized computer language designed for a specific task.
  为了解决某一类任务而专门设计的计算机语言。
   与 GPL 相对,DSL 与传统意义上的通用编程语言 C、Python 以及 Haskell 完全不同。通用的计算机编程语言是可以用来编写任意计算机程序的,并且能表达任何的 可被计算 的逻辑,同时也是 图灵完备 的。
  这一小节中的 DSL 指外部 DSL,下一节中会介绍
   但是在里所说的 DSL 并不是图灵完备的,它们的 表达能力有限 ,只是在特定领域解决特定任务的。
  A computer programming language of limited expressiveness focused on a particular domain.
   另一个世界级软件开发大师 Martin Fowler 对于领域特定语言的定义在笔者看来就更加具体了, DSL 通过在表达能力上做的妥协换取在某一领域内的高效
  而有限的表达能力就成为了 GPL 和 DSL 之间的一条界限。
  几个栗子

  最常见的 DSL 包括 Regex 以及 HTML & CSS,在这里会对这几个例子进行简单介绍
  
       
  • Regex
           
    • 正则表达式仅仅指定了字符串的 pattern,其引擎就会根据 pattern 判断当前字符串跟正则表达式是否匹配。

      谈谈 DSL 以及 DSL 的应用(以 CocoaPods 为例)-2 (management,technology,Software,promises,项目经理)
         
       
  • SQL
           
    • SQL 语句在使用时也并没有真正的执行,我们输入的 SQL 语句最终还要交给数据库来进行处理,数据库会从 SQL 语句中 读取 有用的信息,然后从数据库中返回使用者期望的结果。   
       
  • HTML & CSS
           
    • HTML 和 CSS 只是对 Web 界面的结构语义和样式进行描述,虽然它们在构建网站时非常重要,但是它们并非是一种编程语言,正相反,我们可以认为 HTML 和 CSS 是在 Web 中的领域特定语言。   
       
  Features

  上面的几个:chestnut:明显的缩小了通用编程语言的概念,但是它们确实在自己领域表现地非常出色,因为这些 DSL 就是根据某一个特定领域的特点塑造的;而通用编程语言相比领域特定语言,在设计时是为了解决更加抽象的问题,而关注点并不只是在某一个领域。
  上面的几个例子有着一些共同的特点:
  
       
  • 没有计算和执行的概念;   
  • 其本身并不需要直接表示计算;   
  • 使用时只需要声明规则、事实以及某些元素之间的层级和关系;  
  虽然了解了 DSL 以及 DSL 的一些特性,但是,到目前为止,我们对于如何构建一个 DSL 仍然不是很清楚。
  构建 DSL

  DSL 的构建与编程语言其实比较类似,想想我们在重新实现编程语言时,需要做那些事情;实现编程语言的过程可以简化为定义语法与语义,然后实现编译器或者解释器的过程,而 DSL 的实现与它也非常类似,我们也需要对 DSL 进行语法与语义上的设计。
1234下一页
友荐云推荐




上一篇:The Elements of Modern Java Style
下一篇:Bundling and Minification in ASP.net Core
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

风香 发表于 2016-10-3 19:12:29
精华帖的节奏啊!
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表