白话Ruby与DSL以及在iOS开发中的运用

白话Ruby与DSL以及在iOS开发中的运用

ID:44057986

大小:89.00 KB

页数:10页

时间:2019-10-18

白话Ruby与DSL以及在iOS开发中的运用_第1页
白话Ruby与DSL以及在iOS开发中的运用_第2页
白话Ruby与DSL以及在iOS开发中的运用_第3页
白话Ruby与DSL以及在iOS开发中的运用_第4页
白话Ruby与DSL以及在iOS开发中的运用_第5页
资源描述:

《白话Ruby与DSL以及在iOS开发中的运用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、何为DSLDSL(DomainSpecificLanguage)翻译成中文就是:"领域特定语言"。首先,从定义就可以看岀,DSL也是一种编程语言,只不过它主要是用来处理某个特定领域的问题。广为人知的编程语言有C、Java、PHP等,他们被称为GPL(GeneralPurposeLanguage),即通用目的语言。与这些语言相比,DSL相对显得比较神秘,他们中的大多数甚至连一个名字都没有。这主要是因为DSL通常用来处理某个特定的、很小的领域中的问题,因此起名字这事没有太大的必要和意义。说了这么多废话,一定有读者在想:〃能不能举个例子讲解一下

2、,什么是DSL〃。实际上,DSL只是对一类语言的描述,它可以非常简单:UlView(0?0,100,100)blackUILabel(50,50,200,200)yellow比如这就是我自己随便编的_个语言。它的语法看上去很奇怪,不过这不是重点。语言的根本目的是传递信息。为什么要用DSL其实从上面的代码中已经可以比较出DSL和GPL的特点了。DSL语法更加简洁,比如可以没有括号(这取决于你如何设计),因此开发、阅读的效率更高。但作为代价,DSL调试很麻烦,很难做类型检查,因此几乎难以想象可以用DSL开发一个大型的程序。如果同时接触过编译型

3、语言和脚本语言,你可以把DSL理解为一种比脚本语言更加轻量、灵活的语言。DSL的执行过程了解过c语言的开发者应该知道,从c语言源码到最后的可执行文件z需要经过预编译、编译(词法分析、语法分析、语义分析)、汇编、链接等步骤,最终生成CPU相关的机器码,也就是一堆0和lo脚本语言不需要编译(有些也可以编译)”他们在运行时被解释,当然也需要做词法分析和语法分析,最终生成机器码。于是问题来了,自定义的DSL如何被执行呢?对于词法分析和语法分析,由于语言简单,通常只是少数关键字,即使使用最简单的字符串解析,工作量和复杂度也在可接受的范围内。然而最后

4、生成汇编代码就显得不是很有必要了,DSL的特点不是追求执行效率,而是高效,对开发者友好。因此一种常见的做法是,用别的语言(可以理解为宿主语言)来解析DSL,并执行宿主语言。继续以上面的DSL为例,我们可以用OC读取这个文本文件,了解到我们要创建一个UlView对象,因此会执行以下代码:UlView*view=[[UlViewalloc]initWithFrame:CGRectMake(0,0,100,100)];view.backgroundColor=[UlColorblackColor];如何实现DSL可以看到,DSL的定义与实现毫无

5、技术难度可言,与其说是一门语言,不如说是一种信息的标记格式,一种存储信息的协议。从这个角度来说,JSON、XML等数据格式也可以被称为DSL。然而,随着关键字数量的增多,对DSL的解析难度迅速提高。举个简单的例子zCocoa框架下的控件类型有很多,因此在解析上述DSL时就需要考虑很多情况。这显然与DSL的初衷不符。有没有一种快速实现DSL的方法呢?选择ruby—定程度上可以解决上述问题。在解释为什么偏偏选择ruby之前,首先介绍一些基础知识。Ruby这篇文章不是用来介绍Ruby语法的,感兴趣的读者可以阅读《七周七语言》或者《松本行弘的程序

6、世界》这两本书的前面几个章节来入门Ruby,进阶教程推荐《Ruby元编程》。本文主要介绍为何Ruby经常作为宿主语言,被用来实现DSL,用一句话概括就是:DSL其实就是Ruby代码上文说过,实现DSL的主要难度在于利用宿主语言解析DSL的语法,而借助Ruby实现的DSL,其本身就是Ruby代码,只是看起来比较像DSLO这样在执行的时候,我们完全借助了Ruby解释器的力量,而不需要手动分析其中的语法结构。借用CreatingaRubyDSL这篇文章中的例子,假设我彳门想写一段HTML代码:

7、nerH>Iteml

  • Item2
  • 但又感觉手写代码太麻烦,希望简化它,所以使用一个自创的DSL:html=HTMLMaker.new.documentdobodydodivid:"container"doulclass:"pretty"doli''Item1",class::activeli"Item2”endendendend#这个html变量是一个字符串,值就是上面的HTML文档不熟悉Ru

    8、by语法的读者可能无法一眼看岀这段看上去像是文本的内容,其实是Ruby代码。为什么偏偏是Ruby,而不是Objective-C或者C++这些语言呢?我总结为以下两点:1.Ruby自身的语法特性

    当前文档最多预览五页,下载文档查看全文

    此文档下载收益归作者所有

    当前文档最多预览五页,下载文档查看全文
    温馨提示:
    1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
    2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
    3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
    4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
    相关标签