领域特定语言 martin fowler著 学习笔记1

来源:互联网 发布:男士护肤品推荐 知乎 编辑:程序博客网 时间:2024/05/20 20:46

第一章

用一个入门的例子讲什么是DSL,DSL包含哪些部分,有哪些分类,书摘如下:

1. 我们常常会看到这样一种划分:一方面是程序库/框架或者组件的实现代码;另一方面是配置代码或组件组装代码。从本质上说,这种做法分开了公共代码和可变代码。用公共代码构建一套组件,然后根据不同的目的进行配置。


2. “声明式”是一个非常模糊的术语,但是它通常适应于所有远离了命令式编程的方式。...远离变量倒换,用xml的子元素表示状态的动作和转换。


3. DSL扮演领域专家和业务分析人员之间的交流媒介...


4. 文本DSL有两种,称为外部DSL和内部DSL。外部DSL是指,在主程序设计语言之外,用一种单独的语言表示领域专用语言。内部DSL是指,用通用语言的语法表示的DSL;


5. 是什么让内部DSL不同于通常的api呢?...连贯接口,这个术语强调这样一个事实:内部DSL实际只是某种形式的api,只不过其设计考虑了连贯性难以琢磨的质量。

xx:后续在4.1节还会论述这个问题,DSL与api调用的区别,从这里看,两者都提供一种抽象,但DSL在抽象的设计上考虑了连贯性。


在讲完以上内容后,提出DSL由三部分组成,即语言,语义模型和代码生成。语言只是用一种可读的方式来组装语义模型。

6. 我强烈建议,几乎始终应该使用语义模型。...语义模型,清晰的将语言解析和结果语义的关注点切分开,...可以单独推究状态机的运作机制,增强和调试,无须估计语言。

DSL只是模型一个薄薄的门面

DSL是对模型的一个有益的补充。


7.许多人用了代码生成之后,就舍弃了语义模型,他们在解析 输入文本之后,就直接产生生成的代码。..不推荐任何人这么做。语义模型的存在,可以将解析,执行语义以及代码生成分开。


最后推荐一个开发DSL的语言工作台,MetaEdit


第一章,作者基本列出本书框架,概念点到即止,但从作者观点看到,对于语义模型的推崇





0 0
原创粉丝点击