产生式编程——方法、工具与应用
基本信息
内容简介回到顶部↑
“本书为我们作了一个对产生式编程的精彩介绍,它注定会成为一部经典之作。作者精心讲述了领域特定语言和产生式编程之间通常为人所忽视的联系,并把这种联系作为未来开发的一个推动因素。广大的开发人员完全可以把书中丰富而且实用的方法当做可以立即应用的首要步骤……而且,无论是使用现存系统,还是为正在出现的新产生式技术而做准备,它们都是价值不凡的。”
——[font color="#ff0000"]charlessimonvi,[/font]微软研究院总构架师、意图编程的发明者
“本书围绕‘统一那些本来支离破碎的东西’这个原则,逐步展开了一些令人印象深刻的主题,主要包括领域工程和元程序设计。关键是要理解,本书并不是某种新颖的变换,也不仅仅是对某些值得关注的边角技术的阐述:它是一种更加广泛的启蒙运动的先锋官,这种运动打开了一扇通向一个新时代的大门。”
——摘自由[font color="#ff0000"]iamescoplien[/font]所作的前言,coplien是朗讯贝尔实验室中一位声名卓著的技术专家
产生式编程(generative programming,gp)为应用程序开发人员提出了十分美妙的承诺。它使“从‘一种一个’的软件系统向自动制作软件的各不相同的变体发展”这种思路变得十分真实可信。简单地说,gp以“确定软件开发中自动化的好处”为中心。本书包括了将帮助你设计和实现一个系统族的“正确”组件,以及自动组合组件的方法和工具。这里提出的方法可以应用到所有的商用开发中——从类和过程的层次上的“微观编程”(programming in the small),到“宏观编程”(programming in the large),就是说开发大型系统的家族。
本书是对这种正在浮现的规程的完整指导和参考。它提供了对以下这些关键技术和主题的深入探讨: ●领域工程 ●特征建模 ●泛型编程 ●面向方面的编程 ●使用c++的模板元程序设计 ●产生器 ●微软的意图编程
使用本书你将会学习到如何组合这些技术,以及(也是更加重要的)如何在实践中运用它们。书中包括来自三个不同领域的完整的案例研究:程序设计领域(容器数据结构)、业务领域(银行业务)以及科学计算(矩阵计算)。
[font color="#ff0000"]krzysztof czarnecki[/font]是德国乌尔姆daimler chrysler研究和技术中心的一位研究员和顾问。他在对华盛顿redmond的施乐palo alto研究中心和微软研究中心进行访问研究期间,取得了面向方面编程和意图编程的第一手经验。他在萨克拉门托的加利福尼亚州立大学获得了计算机科学的学士学位,在德国的ilmenau大学获得了计算机科学的硕士学位和博士学位。
[font color="#ff0000"]ulrich w.eisenecker[/font]是zweibrucken的凯泽斯劳滕应用科学大学的一位计算机科学教授,在那里他主管组件和窗口接口部门。在大学职业生涯以前,他在工业界度过了大约十年时间。他是德国,下杂志《objektspektrum》的一种组件软件专辑增刊的编辑,他还为之撰写了一个c++专栏。他已经发表了一百多篇文章,并且经常在国内和国际肝会议上讲演。
——[font color="#ff0000"]charlessimonvi,[/font]微软研究院总构架师、意图编程的发明者
“本书围绕‘统一那些本来支离破碎的东西’这个原则,逐步展开了一些令人印象深刻的主题,主要包括领域工程和元程序设计。关键是要理解,本书并不是某种新颖的变换,也不仅仅是对某些值得关注的边角技术的阐述:它是一种更加广泛的启蒙运动的先锋官,这种运动打开了一扇通向一个新时代的大门。”
——摘自由[font color="#ff0000"]iamescoplien[/font]所作的前言,coplien是朗讯贝尔实验室中一位声名卓著的技术专家
产生式编程(generative programming,gp)为应用程序开发人员提出了十分美妙的承诺。它使“从‘一种一个’的软件系统向自动制作软件的各不相同的变体发展”这种思路变得十分真实可信。简单地说,gp以“确定软件开发中自动化的好处”为中心。本书包括了将帮助你设计和实现一个系统族的“正确”组件,以及自动组合组件的方法和工具。这里提出的方法可以应用到所有的商用开发中——从类和过程的层次上的“微观编程”(programming in the small),到“宏观编程”(programming in the large),就是说开发大型系统的家族。
本书是对这种正在浮现的规程的完整指导和参考。它提供了对以下这些关键技术和主题的深入探讨: ●领域工程 ●特征建模 ●泛型编程 ●面向方面的编程 ●使用c++的模板元程序设计 ●产生器 ●微软的意图编程
使用本书你将会学习到如何组合这些技术,以及(也是更加重要的)如何在实践中运用它们。书中包括来自三个不同领域的完整的案例研究:程序设计领域(容器数据结构)、业务领域(银行业务)以及科学计算(矩阵计算)。
[font color="#ff0000"]krzysztof czarnecki[/font]是德国乌尔姆daimler chrysler研究和技术中心的一位研究员和顾问。他在对华盛顿redmond的施乐palo alto研究中心和微软研究中心进行访问研究期间,取得了面向方面编程和意图编程的第一手经验。他在萨克拉门托的加利福尼亚州立大学获得了计算机科学的学士学位,在德国的ilmenau大学获得了计算机科学的硕士学位和博士学位。
[font color="#ff0000"]ulrich w.eisenecker[/font]是zweibrucken的凯泽斯劳滕应用科学大学的一位计算机科学教授,在那里他主管组件和窗口接口部门。在大学职业生涯以前,他在工业界度过了大约十年时间。他是德国,下杂志《objektspektrum》的一种组件软件专辑增刊的编辑,他还为之撰写了一个c++专栏。他已经发表了一百多篇文章,并且经常在国内和国际肝会议上讲演。
目录回到顶部↑
前 言
致 谢
第1章 本书所讨论的主要内容
1.1 从手工作坊到自动装配线
1.2 产生式编程
1.3 利益和可应用性
第一部分 分析和设计方法与技术
第2章 领域工程
2.1 为什么本章值得一读
2.2 什么是领域工程
2.3 领域分析
2.4 领域设计和领域实现
2.5 应用工程
2.6 产品线实践
2.7 关键领域工程概念
2.8 领域分析和领域工程方法概览
2.9 领域工程与相关方法
2.10 历史笔记
2.11 小结
第3章 领域工程和面向对象的分析与设计
致 谢
第1章 本书所讨论的主要内容
1.1 从手工作坊到自动装配线
1.2 产生式编程
1.3 利益和可应用性
第一部分 分析和设计方法与技术
第2章 领域工程
2.1 为什么本章值得一读
2.2 什么是领域工程
2.3 领域分析
2.4 领域设计和领域实现
2.5 应用工程
2.6 产品线实践
2.7 关键领域工程概念
2.8 领域分析和领域工程方法概览
2.9 领域工程与相关方法
2.10 历史笔记
2.11 小结
第3章 领域工程和面向对象的分析与设计
前言回到顶部↑
在很多新的程序设计书籍出现的时候,都会使人们产生这样的疑问:这本书在历史发展中会占据(或者将要占据)什么样的位置呢?就是说,一本书甚至可以促使问题本身来讲述某些激动人心的东西——有关范型的改变,或者是有关新思路或者打破传统方式的一些东西。而现在,这对于本书来说也是十分中肯的。
过去十年里,面向对象方面的著作由于覆盖了很多明显不相关的思路,可以说是已经到了汗牛充栋的地步,这些思路包括从面向主题的程序设计到组件,林林总总。它们有一个共同点,就是总有一些有关它们的东西肯定不是面向对象的,虽然它们都在面向对象的光环里面花费了很多时间。但是在过去的一年或者两年里,这些零散的片段中有许多都发现了共同的基础,并且围绕一个共同的主题联合起来:元对象协议(metaobiect protocol)、自省(reflection)、意图(intentionality)、一种见解深刻的对组件的解释、跨结构的特征剪裁,以及对简单模块性的经典模型的突破。对我来说,1999年度最精彩的场面之一是在德国的Erfurt举办的第一次国际产生式与基于组件的软件工程讨论会(GCSE'99),会议上,众多研究人员把许多这种想法联系起来,交流对于它们的重要意义的感想。但是,这只是这些思路汇集起来的一个论坛:我们在论坛上看到了与许多会议讨论小组和某些新的文献中相同的东西。
在形成历史的某些事件中评估历史总是很困难的,但是比起在事件发生后,远离第一手资料来解释它,可能不用负更多的责任,也并不危险。在这种思路之下,看看周围,可以认识到,现在,我们可能正处于计算机科学的一个关键的转折点,特别是程序设计和设计技术领域。业界已经挣扎着努力超出面向对象范型的局限。模式是一个值得重视的尝试,虽然它们非常有利于把注意力集中到程序设计中经验的价值和人的因素上,但是,计算机科学如果忽视亚力山大的观点或者系统思考,就不可能取得什么进步。软件很少能在Kuhnian的意义上取得一个真正的范型转变。可能我们是一个保守团体,而且我们对小说的迷恋使我们甚至不能进行最简单的学习:许多本国的组件运动的原则受到面向对象设计的早期原则的影响,这些是经验建议应该在几年的应用后丢掉的东西。
但是现在有了一些改变的萌芽的印记。可能业界不会很容易地进行革命,但是,它可以容忍向一个在现有状态之上构建的新技术迈进。一直以来,有一种强烈的、连续不断的运动,想要发现超出对象和概念与特征的范畴之外的编程和设计表达方式。这就是意图编程的基本含义,例如,很大程度上,也是类似领域工程的基本含义。这种思想的脉络在整个业界、在很多论坛上都很有市场。我们在通俗(非亚力山大)模式运动中看到了它;我们在面向方面的程序设计中看到了它;我们在泛型编程和一些例如多范型设计中也看到了它。由于一些会议例如OOPSLA的关注点越来越不集中于那些被称为对象的东西的基础,而是越来越集中于概念性扩展,所以我们开始对各个部分思考得越来越少,而对系统和特征思考得越来越多。并且由于OOPSLA影响力减弱了,所以一些类似GCSE的会议正在越来越多,越来越普遍。今天,就是一个基于广度的沿此方向的运动,并且本书发现自
己正好处于这个转变的中心。我相信,读者既不会低估这个转变的意义,也不会低估本书在沟通和影响这个转变中的地位。我们正处于演变的开端,本书是这个新流派的早期标准化工作。
这本书可能反映了计算机科学成熟的一个程度,就是说,第一次,尝试利用其自身的能力,证明一种整合观点,而不是通过与先驱区别开来颂扬一种技术。所以,这本书覆盖了很多领域,并且应用了很多原则:组件、对象、方面、 自省、意图程序设计和泛型程序设计(用于以技术为焦点的地方)和领域工程(用于系统的考虑)。对于那些第一次遇到它们的人来说,本书是一个很好的对于正在涌现和建立的技术的精彩介绍。有人会误以为本书是一本已有实践的纲要,当然是在领域工程的范围内,但是,在更远的范围内,对于超出对象以外的那些东西,本书也是适用的。
但是这本书远远不止是技术的一个集合。这本书围绕统一原则提出了强力的主题,这些原则将把零散的东西捆绑在一起,还提出了非常值得注意的领域工程和元程序设计。作者用领域工程的概观好好地招待读者,并引导读者鉴赏它的必要性。领域工程可能超出了任何一种单独的思路,提供了一个通用的思路或者主题,读者可以使用这些来“解释”产生式编程。但是,更重要的是,作者把其他程序设计的学派作为基础材料,来描绘以一种广泛的、恰到好处的视角,称为产生式编程。结果肯定超过了各个部分的总和:大多数这些部分都曾经存在了很久,但是关于怎样把它们整合起来的想法刚刚涌现出来,并得到了广泛的揭示。
要理解下面这一点是很重要的,本书既不是一些新的分支,也不是仅仅对一些值得注意的小范围的技术进行一个展示。它是一种更加巨大的欢愉的预兆,预示着将打开通向新纪元的一扇门。它包括一些正在成熟的一些技术,例如自省、元程序设计和方面,这些可能会增强甚至取代对象,在未来的几年里来成为主流程序设计实践的基础。
而且即使这种历史性的分析是错的,也不能减低这本书的价值。这些思路非常成熟而且是不朽的。虽然这本书使用了大量的以前的C++代码,但是这些思路会促进使用任何派别的语言社团思考,并且对于大多数编程意识流派都是适用的。
本书只是一个起点而已。本书终将引起无数的追随者:他们将会发展出能够帮助设计人员和程序员更好地掌握和应用产生式编程的方法和过程,还会发展出将这项工作推向下一代研究的形式化方法和统一模型。对于那些愿意探究对象的限制的研究人员和实践人员来说,这本书指出了障碍,并挑战他们来更进一步把这种想法推向更远。我相信没有什么东西比起你迎接挑战更能够让作者高兴的了。当手中拿到第一本成品时,一本书的出版给作者带来的最初的喜悦,几乎可以算作惊喜若狂。但是更大的喜悦,甚至可以替代开始的喜悦,将会是在很久以后,在逐渐出现的实践中,看到这本书留下了它的印记。很少有书能给作者的投入带来如此回报。我非常希望,也非常相信本书就是这少数几本书中的一本,那是因为我相信这些思路的威力,将会深深吸引作为读者的你,并且促使你采用这些新的令人印象深刻的编程和设计构造。我希望在从本书的学习中,你能够获得极大的快乐,就像我过去一样,并且恳请你通过你自己的程序中的技巧,来帮助推动这些思路成为准则,从而找到你作为这场运动的先驱在历史上的位置。
James Coplien
Naperville,Illinois
过去十年里,面向对象方面的著作由于覆盖了很多明显不相关的思路,可以说是已经到了汗牛充栋的地步,这些思路包括从面向主题的程序设计到组件,林林总总。它们有一个共同点,就是总有一些有关它们的东西肯定不是面向对象的,虽然它们都在面向对象的光环里面花费了很多时间。但是在过去的一年或者两年里,这些零散的片段中有许多都发现了共同的基础,并且围绕一个共同的主题联合起来:元对象协议(metaobiect protocol)、自省(reflection)、意图(intentionality)、一种见解深刻的对组件的解释、跨结构的特征剪裁,以及对简单模块性的经典模型的突破。对我来说,1999年度最精彩的场面之一是在德国的Erfurt举办的第一次国际产生式与基于组件的软件工程讨论会(GCSE'99),会议上,众多研究人员把许多这种想法联系起来,交流对于它们的重要意义的感想。但是,这只是这些思路汇集起来的一个论坛:我们在论坛上看到了与许多会议讨论小组和某些新的文献中相同的东西。
在形成历史的某些事件中评估历史总是很困难的,但是比起在事件发生后,远离第一手资料来解释它,可能不用负更多的责任,也并不危险。在这种思路之下,看看周围,可以认识到,现在,我们可能正处于计算机科学的一个关键的转折点,特别是程序设计和设计技术领域。业界已经挣扎着努力超出面向对象范型的局限。模式是一个值得重视的尝试,虽然它们非常有利于把注意力集中到程序设计中经验的价值和人的因素上,但是,计算机科学如果忽视亚力山大的观点或者系统思考,就不可能取得什么进步。软件很少能在Kuhnian的意义上取得一个真正的范型转变。可能我们是一个保守团体,而且我们对小说的迷恋使我们甚至不能进行最简单的学习:许多本国的组件运动的原则受到面向对象设计的早期原则的影响,这些是经验建议应该在几年的应用后丢掉的东西。
但是现在有了一些改变的萌芽的印记。可能业界不会很容易地进行革命,但是,它可以容忍向一个在现有状态之上构建的新技术迈进。一直以来,有一种强烈的、连续不断的运动,想要发现超出对象和概念与特征的范畴之外的编程和设计表达方式。这就是意图编程的基本含义,例如,很大程度上,也是类似领域工程的基本含义。这种思想的脉络在整个业界、在很多论坛上都很有市场。我们在通俗(非亚力山大)模式运动中看到了它;我们在面向方面的程序设计中看到了它;我们在泛型编程和一些例如多范型设计中也看到了它。由于一些会议例如OOPSLA的关注点越来越不集中于那些被称为对象的东西的基础,而是越来越集中于概念性扩展,所以我们开始对各个部分思考得越来越少,而对系统和特征思考得越来越多。并且由于OOPSLA影响力减弱了,所以一些类似GCSE的会议正在越来越多,越来越普遍。今天,就是一个基于广度的沿此方向的运动,并且本书发现自
己正好处于这个转变的中心。我相信,读者既不会低估这个转变的意义,也不会低估本书在沟通和影响这个转变中的地位。我们正处于演变的开端,本书是这个新流派的早期标准化工作。
这本书可能反映了计算机科学成熟的一个程度,就是说,第一次,尝试利用其自身的能力,证明一种整合观点,而不是通过与先驱区别开来颂扬一种技术。所以,这本书覆盖了很多领域,并且应用了很多原则:组件、对象、方面、 自省、意图程序设计和泛型程序设计(用于以技术为焦点的地方)和领域工程(用于系统的考虑)。对于那些第一次遇到它们的人来说,本书是一个很好的对于正在涌现和建立的技术的精彩介绍。有人会误以为本书是一本已有实践的纲要,当然是在领域工程的范围内,但是,在更远的范围内,对于超出对象以外的那些东西,本书也是适用的。
但是这本书远远不止是技术的一个集合。这本书围绕统一原则提出了强力的主题,这些原则将把零散的东西捆绑在一起,还提出了非常值得注意的领域工程和元程序设计。作者用领域工程的概观好好地招待读者,并引导读者鉴赏它的必要性。领域工程可能超出了任何一种单独的思路,提供了一个通用的思路或者主题,读者可以使用这些来“解释”产生式编程。但是,更重要的是,作者把其他程序设计的学派作为基础材料,来描绘以一种广泛的、恰到好处的视角,称为产生式编程。结果肯定超过了各个部分的总和:大多数这些部分都曾经存在了很久,但是关于怎样把它们整合起来的想法刚刚涌现出来,并得到了广泛的揭示。
要理解下面这一点是很重要的,本书既不是一些新的分支,也不是仅仅对一些值得注意的小范围的技术进行一个展示。它是一种更加巨大的欢愉的预兆,预示着将打开通向新纪元的一扇门。它包括一些正在成熟的一些技术,例如自省、元程序设计和方面,这些可能会增强甚至取代对象,在未来的几年里来成为主流程序设计实践的基础。
而且即使这种历史性的分析是错的,也不能减低这本书的价值。这些思路非常成熟而且是不朽的。虽然这本书使用了大量的以前的C++代码,但是这些思路会促进使用任何派别的语言社团思考,并且对于大多数编程意识流派都是适用的。
本书只是一个起点而已。本书终将引起无数的追随者:他们将会发展出能够帮助设计人员和程序员更好地掌握和应用产生式编程的方法和过程,还会发展出将这项工作推向下一代研究的形式化方法和统一模型。对于那些愿意探究对象的限制的研究人员和实践人员来说,这本书指出了障碍,并挑战他们来更进一步把这种想法推向更远。我相信没有什么东西比起你迎接挑战更能够让作者高兴的了。当手中拿到第一本成品时,一本书的出版给作者带来的最初的喜悦,几乎可以算作惊喜若狂。但是更大的喜悦,甚至可以替代开始的喜悦,将会是在很久以后,在逐渐出现的实践中,看到这本书留下了它的印记。很少有书能给作者的投入带来如此回报。我非常希望,也非常相信本书就是这少数几本书中的一本,那是因为我相信这些思路的威力,将会深深吸引作为读者的你,并且促使你采用这些新的令人印象深刻的编程和设计构造。我希望在从本书的学习中,你能够获得极大的快乐,就像我过去一样,并且恳请你通过你自己的程序中的技巧,来帮助推动这些思路成为准则,从而找到你作为这场运动的先驱在历史上的位置。
James Coplien
Naperville,Illinois








点击看大图





加载中...

