为什么选择DSL(上)

DSL (domain specific language, 领域特定语言),简单的说,就是为某种特定的目的设计的一种与特定目的(业务本质)更加匹配的语言。

DSL和通用语言的区别在于,DSL往往不是图灵完备的,它只为某一类 问题服务,不希望可以描述所有的可计算问题。

另一个角度看,高级语言相对于低级语言,比如C相对于ASM也可以视为DSL。它在更高的层面抽象关键字和语法。if/for/while和function相对汇编指令cmp/1dr/sdr/mov描述的并不是同一层面的问题。前者关心的是逻辑,后者关心硬件。越高级的层面,越抽象,越专门,越特定领域(同时意味着它对环境的依赖度更高,递弱代偿,好有道理)。

图片发自简书App


DSL带来的好处是明显的,更加贴近业务。但目前看,这并不是一个普遍的选项,所以先看看使用DSL的困难吧。


技术门槛:

首先要做抽象和建模,抽取核心领域概念(及实体、聚合根关系),并据此设计关键字、语法;

如果选择外部DSL还需要设计DSL和宿主语言之间的转换器,内部DSL要设计对关键字的封装;

对于稍复杂的情况,DSL未必能完成完整的功能,需要设计DSL实现部分与宿主语言实现部分之间的边界(即分层设计),因此选择DSL往往意味着也会选择分层架构。

其中每一项工作都不那么容易实现。但抽象建模和分层结构,对于复杂系统,即便不选择DSL,也是需要充分考虑的事情。

另外还需要考虑DSL本身的学习成本;

维护成本:

随着需求增加,代码变动增加。会出现现有语法不能描述的情况。这时需要扩展语法和转换器。如果转换器本身设计不够解耦,这种扩展会比较困难,同时伴随着风险(产品毕竟发布了,换编译器也许会引入某些隐含的故障)。

同时某种DSL在自我演化的过程中,不可避免的希望支持更多的功能和场景,特别是有个独立的团队维护DSL时。也就是追求图灵完备的歧途。这个时候的取舍,包括是不是某些情况就不支持,用宿主语言实现,做好隔离即可?

也许还有一种蜕化的情况,随着时间推移,DSL能描述的部分比例越发少了。某种原因(比如没有技术能力保持DSL的适当的进化能力)。DSL渐渐不使用了,成为僵尸残存在系统中。

考虑一个场景,DSL开始设计的可以比较好的工作了,并且在比较长的时间(比如一两个版本或者几个月)都不需要维护,最初设计它的专家去做别的事了,DSL本身的维护成为一个真空地带。某些功能可以在现有的语法实现,增加一个关键字更好。但所有的技术判断和改进都没有做;有过去一些时间,DSL本身的技术债债台高筑;最终更多的实现选择用宿主代码实现...DSL一步步的失去了对系统的描述能力。

选择的困难:

怎么能下定决心选择DSL?处理某些罕见的,充满自信的人数不太多精英团队,对于大型项目,选择DSL肯定是一个艰难的决定。怎么能确定今天的投入未来一定会有好的收益?

最开始的时候,系统比较简单,似乎没有必要做DSL。有一天系统复杂了,某些相似的领域概念以千奇百怪的实现实现,大量的重复;当复杂的时候在选择设计DSL对代码进行重构?重写?这个想来也是非常困难的事。

所以,重要的事情是认识到所面对的系统潜在的复杂度和可能存在的周期。如果系统的复杂度是可以预见的大,而且生存周期相当长(比如5年甚至更多),那么是否选择DSL可能是最初就要做的一些决定。

上述并非危言耸听,实际所谈是使用DSL需要提前考虑的三个关键问题: 选择的理由和时机,所需的技术储备 和 长期维护机制。anyway,DSL不是银弹,它只是一种需要完整支持才能发挥价值的工具。下一段主要会谈希望通过DSL解决的问题和与之配套的方法。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容