领域特定语言[试读]
写书初衷
在我开始编程之前,DSL(Domain–Specific Language,领域特定语言)就已经成了程序世界中的一员。随便找个UNIX或者Lisp老手问问,他一定会跟你滔滔不绝地谈起DSL是怎么成为他的镇宅之宝的,直到你被烦得痛不欲生为止。但即便这样,DSL却从未成为计算领域的一大亮点。大多数人都是从别人那里学到DSL,而且只学到了有限的几种技术。 我写这本书就是为了改变这个现状。我希望通过本书介绍的大量DSL技术,让你有足够的信息来做出决策:是否在工作中使用DSL,以及选择哪一种DSL技术。 造成DSL流行的原因有很多,我只着重强调两点:首先, 提升开发人员的生产力;其次,增进与领域专家... 查看全部[ 写书初衷 ]
为什么现在写这本书
DSL已问世很长时间,但近些年来,它们掀起了一股流行风潮。与此同时,我决定用几年的时间写这本书。为什么呢?虽然我并不知道自己能否给这股风潮下一个权威的定义,但是可以分享一下自己的观点。 在千禧年到来的时候,编程语言界─至少在我的企业软件世界里─隐约出现了一种颇具统治性的标准。先是 Java,它在几年的时间里风光无限。即使后来微软推出的C#挑战了Java的统治地位,但这个新生者依然是一门跟Java很相似的语言。新时代的软件开发被编译型的、静态的、面向对象的、语法格式跟C类似的语言统治着(甚至连VB都被迫变得尽可能具有这些性质)。 然而人们很快发现,并不是所有的事情都能在Java/C#的霸权下... 查看全部[ 为什么现在写这本书 ]
为什么DSL很重要
本书2.2节会讲述更多细节,不过我觉得需要学习DSL(以及本书中提到的其他技术)的原因主要有两个。 第一个原因是提升程序员的生产力。先看下面这段代码: input =~ /d{3}-d{3}-d{4}/ 你会认出这是个正则表达式匹配,也许你还知道它匹配的是什么。正则表达式常常由于过于费解而遭受指责,但试想一下,如果你所能够使用的都是普通的正则控制代码,这段模式匹配会变成什么样子。而这段代码跟正则表达式相比,又是何等容易理解,容易修改? DSL的第一个优势是它擅长在程序中的某些特定地方发挥作用,并且让它们容易理解,进而提高编写、维护的速度,也会减少bug。 DSL的第二个优势就不仅仅限... 查看全部[ 为什么DSL很重要 ]
别畏惧这本大厚书
看到这本书这么厚,你可能会吓一跳;我自己发现要写这么多内容的时候都忍不住倒吸一口冷气。我对大厚书的态度总是小心翼翼,因为我们用来阅读的时间是有限的,一本厚书就意味着时间上的大量投资。因此在这种情况下我更倾向于使用“姊妹篇”的方式。 姊妹篇实际上是关于一个主题的两本书。第一本是叙述性质的书,需要仔细阅读。我希望它可以大致地描述出这个主题的主要内容,让读者有个整体认识就好,不用深入细节。我觉得叙述部分最好不要超过150页,这是个比较合理的厚度。 第二本书是参考资料,不需要一页一页翻阅(虽然有些人也这样看)。用的时候再仔细看就行。有些人喜欢先读完第一本,有了整体认识之后,再去看第二本书里面感兴趣... 查看全部[ 别畏惧这本大厚书 ]
本书主要内容
本书旨在全面介绍各种DSL及其构造方式。当人们尝试DSL的时候,经常就只选一种技术。你可以在本书里看到对多种技术的介绍,真正用的时候就可以做出最合适的选择。本书还提供了很多DSL技术的实现细节和例子。当然,我无法把所有的细节都写下来,但也足以使读者入门,在早期决策时起到辅助作用。 前3章讲述什么是DSL、DSL的用途以及DSL与框架和库的区别。第5章和第6章可以帮你理解如何构建外部DSL和内部DSL。第三部分讲述解析器所扮演的角色, “解析器生成器”(第23章)的作用,用解析器解析外部DSL的各种方式。第四部分展示了在一种DSL风格中所能使用的多种语言结构。虽然它不能告诉你怎样充分利用你钟爱... 查看全部[ 本书主要内容 ]
本书读者对象
本书的理想读者是那些正在思考构建DSL的职业软件程序员。我觉得这种类型的读者都应该有多年的工作经验,认同软件设计的基本思想。 如果你深入研究过语言设计的话题,那这本书里大概不会有什么你没有接触过的资料。我倒是希望我在书中整理并表述信息的方式对你有所帮助。虽然人们在语言设计方面做了大量的工作─尤其是在学术领域,可这些成果能够为专业编程领域服务的却寥寥无几。 叙述部分的前几章还可以澄清一些困惑,比如什么是DSL,DSL有什么用途。通读第一部分以后,你就可以更全面地掌握DSL的不同实现技术。... 查看全部[ 本书读者对象 ]
这是本Java书或者C#书吗
本书和我曾写过的大部分书一样,与编程语言没有多大关系。我最想做的事情是揭示一些与编程语言无关的通用原则和模式。因此,不管你用的是哪种流行的面向对象语言,本书里的思想都会为你提供帮助。 函数式语言可能会是一条代沟。虽然我觉得很多内容依然对函数式语言适用,但我在函数式编程中的经验并不足以让我做出判断,它们的编程范式到底会从多大程度上影响到书中的建议。本书对于过程式语言(即非面向对象的语言,例如C)的作用也很有限,因为我讲的很多技术都依赖于面向对象技术。 虽然我写的是通用原则,但为了能够把它们恰当地讲述出来,我还需要一些例子─于是需要一门具体的编程语言。在选择用哪门语言来写例子的时候,我的首要标... 查看全部[ 这是本Java书或者C#书吗 ]
本书缺少什么
在写这样一本书的过程中,要说什么时候最让人垂头丧气、濒临崩溃,莫过于自己意识到必须停笔的那一刻了。我为这本书花费了几年的时间,我相信这里面有很多值得你阅读的内容。但我也知道我留了很多疏漏之处。我本来想弥补这些疏漏,可这得占用大量时间。我的信念是,宁可出版一本未完成的书,也不要再等上几年把书写完─即便是真的能够写完的话。下面简单介绍一下我实在没时间补充的内容。 前面曾提到过一点─函数式语言。实际上,在当代那些基于ML和/或Haskell的函数式语言中,构建DSL已经是广为人知的事实了。我在书中基本没提这部分内容。我也很想知道,当我熟悉了函数式语言及其DSL应用之后,本书的内容安排会发生多大的改... 查看全部[ 本书缺少什么 ]
章节引用
虽然本书的结构比较普通,但引用章节的结构还是需要稍稍介绍一下的。我把引用章节分成一系列主题,按照相似性组成不同的章节。我的想法是每个主题都可以独立成篇,于是你读完第一部分以后,就可以任选一个主题深入了解,无须再涉及其他章节。如果有例外情况的话,我会在对应主题的开篇提到。 大部分主题都以模式的形式呈现。模式是对于一再重复出现的问题的通用解决方案。所以如果你有一个常见的问题:“我该怎么处理我的解析器结构呢?”对这个问题的两种可行模式是“分隔符指导翻译”(第17章)和“语法指导翻译”(第18章)。 在过去的二十年间,人们写了很多关于软件开发模式的书,不同的人有不同的视角。我的看法是,模式给我提供... 查看全部[ 章节引用 ]
模式结构
大多数作者在写模式的时候都用了一些标准模板。我也不例外,既用了一个标准模板,又与别人用的不一样。我所用的模板,或称模式形态,是我第一次用在企业应用架构模式(P of EAA,[Fowler PoEAA])中的模式。它的形式如下。 模板中最重要的元素大概要数名字。我喜欢用模式来描述各个引用主题,最大的原因就是它可以帮我创建一个强大的词汇表,方便展开讨论。虽然这个词汇表不一定能得到广泛应用,但至少可以让我的写作保持一致性,也可以在别人想要用这个模式的时候,给他提供一个起始点。 接下来的两个元素是意图和概要。它们对模式进行简要的概括。它们还能起到提醒作用,如果你已“将模式纳入囊中”,但忘了... 查看全部[ 模式结构 ]
致谢
当我每次写书的时候,很多人都为我提供了大量帮助。虽然作者那里写的是我的名字,但许多朋友都为提升本书的质量作出了巨大的贡献。 我首先要感谢的是我的同事Rebecca Parsons。我对DSL这个主题曾有很多顾虑,例如,它会涉及很多学术背景的知识,而那些是我所不熟悉的。Rebecca有深厚的语言理论背景,她在这方面给了我很多帮助。此外,她也是我们公司的首席技术探路人和战略家,她可以将她的学术背景和大量的实践经验合二为一。她有能力,并且也愿意为本书付出更多心血,但ThoughtWorks在其他方面更需要她。我很高兴,我们曾关于DSL这个主题滔滔不绝。 作者总是希望(并且带着小小的恐惧)审校者... 查看全部[ 致谢 ]
书名: 领域特定语言
作者: [美] Martin Fowler
出版社: 机械工业出版社华章公司
原作名: Domain-Specific Languages
译者: ThoughtWorks中国
出版年: 2013-3
页数: 488
定价: 89.00元
装帧: 平装
ISBN: 9787111413059