基本信息
- 原书名:Advanced Compiler Design and Implementation
- 原出版社: Elsevier Science

编辑推荐
这本“鲸书”是编译器方面绝对的经典,被人们誉为与编译技术的经典代表作“龙书”(《Compilers: Principles,Techniques,and Tools》)齐名。作者Steven S.Muchnick在编译技术方面有着深厚的理论基础,又具有丰富而广博的经验。他以这样两方面的功力写成的这本书,对于从事编译器设计和实现的科技人员具有无法衡量的价值。
内容简介
计算机书籍
本书涵盖了现代微处理器编译器的设计和实现方面的所有高级主题。
本书首先介绍编译器的结构、符号表管理、中间代码结构、运行时支持等问题,探讨过程内的控制流分析、数据流分析、依赖关系分析和别名分析的各种方法,并介绍一系列的全局优化。接下来,讲述过程间的控制流分析、数据流分析和别名分析,以及程间优化和如何应用过程间信息来改善全局优化。然后,讨论有效利用层次存储系统的优化技术。最后,详细介绍4种商业化编译系统,以提供编译器结构、中间代码设计、优化策略和效果的专门例子。
本书适合作为高等院校计算机专业研究生和高年级本科生的教材,也适合需要了解高级编译器设计和构造有关问题的计算机专业人员参考。
本书特点
●为理解高级编译器设计的主要问题奠定了基础
●深入阐述优化问题
●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相关商业编译器作为案例,说明编译器结构、中间代码设计和各种优化方法
●给出大量定义清晰的关于代码生成、优化和其他问题的算法
●介绍由作者设计的以清晰、简洁的方式描述算法的语言ICAN (非形式编译算法表示)。
作译者
目录
专家指导委员会
译者序
序
前言
第1章 高级主题介绍 1
1.1 编译器结构回顾 1
1.2 基本问题中的高级论题 2
1.3 代码优化的重要性 4
1.4 优化编译器的结构 5
1.5 激进型优化编译器中各种优化的位置 7
1.6 本书各章的阅读流程 10
1.7 本书没有涉及的相关主题 10
1.8 例子中所用的目标机 11
1.9 数的表示与数据的大小 11
1.10 小结 11
1.11 进一步阅读 12
1.12 练习 12
第2章 非形式化编译算法表示 13
2.1 扩展的巴科斯-诺尔范式语法表示 13
译者序
本书的作者Steven S.Muchnick在编译技术方面有着深厚的理论基础,又具有丰富而广博的经验。他以这样两方面的功力写成的这本书,对于从事编译器设计和实现的科技人员具有无法衡量的价值。本书的内容主要集中在编译器的后端以及编译优化实现方面,全面阐述了在编写一个真实的编译器时遇到的各种关键问题及解决方法,反映了近十多年来针对现代计算机体系结构而出现的各种新的编译优化技术,同时作者对仍在研究中的编译实现和优化热点问题也给出了很好的综述和参考文献。注重真实语言和真实体系结构的编译实现方法,注重对现代体系结构性能有重要影响的各种优化是本书的特点,而这正是国内已出版的编译方面的著述所缺乏的,该书的翻译出版填补了国内编译著作在这一方面的空白。对于已经学习过编译原理课程的高年级本科生和研究生而言,书中的内容为他们进一步了解真实编译器中的设计问题和实现技术开拓了视野,而对于想实现一个优化编译器和在编译技术领域进行深入研究的科研人员而言,作者在书中指出的工程上必须注意但容易被忽视的许多问题以及给出的大量有价值的实用方法,为他们进行工程实践提供了指导,也为他们指出了深入研究的方向。
能充分发挥现代并行体系结构性能的优化编译器是最复杂的软件系统之一。设计和实现一个优化编译器既是一项工程,又是一种艺术创造。而翻译这本关于高级编译技术的书,对于我们而言,既是一次学习,又是一种欣赏。通过翻译本书,我们对高级编译技术又进行了一次系统的学习,收获颇丰。编译器的设计和实现要遵循计算机科学技术的规律,编译器的功能要能适应体系结构和编程语言的特点,充分发挥它们的特性,而编译器内部各组件要能有机协调地工作。我们在研究和编写一个好的编译器时,就在欣赏着科学技术的美感。在翻译本书的过程中,我们也钦佩作者杰出的聪明才智,体会到了自然的辩证法。
在自然科学领域,计算机科学技术是一门很年轻的学科,但在计算机科学技术中,编译技术却是一个相对“古老”的研究方向。新技术层出不穷,引人入胜,需要有人去研究。但同时我们也认为,编译技术是计算机技术的重要组成部分,随着计算机新技术新理论的不断涌现,编译技术本身也在不断发展,也还有着无穷的奥秘等待着人们去探索。信息化是全面建设小康社会的必由之路,实现信息化必须真正掌握发展计算机技术的主动权,而编译技术如同微处理器和操作系统技术等一样,是计算机技术的关键,必须掌握在自己手中。通过翻译本书,我们愿为我国编译技术的发展献上一份绵薄之力。
本书的前言和第1、9、10、11章由沈志宇翻译,其余由赵克佳翻译。全书由沈志宇审校。国防科大软件研究所的黄春、王锋、张小强等老师,以及郭学鹏、张定飞等研究生阅读了本书的部分译稿,并给出了不少有价值的修改意见,特此致谢。
由于我们才疏学浅,在翻译中不当之处还恳请读者诸君不吝赐教。
译 者
2005年3月于国防科学技术大学
前言
本书首先讨论编译器的结构、符号表管理(包括那些允许导入和导出作用域的语言)、中间代码结构、运行时支持问题(包括可以在运行时链接的共享对象),以及根据机器描述自动产生代码生成器等。之后,探讨过程内的(通常称为"全局的")控制流分析、数据流分析、依赖关系分析和别名分析的各种方法,并介绍一系列的全局优化,包括那些作用于程序不同成分(从单个表达式到整个过程)的优化。接下来本书讲述过程间的控制流分析、数据流分析和别名分析,以及过程间优化和如何应用过程间信息来改善全局优化。然后,讨论有效利用层次存储系统的优化技术。最后,详细介绍4个分别来自DEC、IBM、Intel和Sun 微系统公司的商业化编译系统,以提供编译器结构、中间代码设计、优化策略和效果的专门例子。如我们将看到的,这些编译系统采用的技术具有广泛的代表性,并用不同的方法获得了类似的效果。
本书的写作过程
1990年6月到1991年,我在Sun微系统公司担任高级工程师。在ACM SIGPLAN的程序语言设计和实现技术年会上,我用半天时间作了一个名为"RISC系统高级编译技术"的讲座。在这个讲座上,我用大约130张幻灯片讲解了RISC体系结构和相关的编译技术,特别是优化技术。在那次讲座之后,我有了一个想法,即讲座材料可能是一颗渴望着阳光、土壤和水分,期待着长成参天大树的种子(实际上,在我的脑海中是一颗橡树种子),而这棵大树就是你面前的这本书。一年多后,我与Wayne Rosing讨论了这个想法,然后又向Sun微系统实验室主任作了汇报,几周后他就决定支持这本书的写作,并给予了一年半的时间和部分资助。
本书的第一稿中除了高级编译技术外,还包含了相当多的RISC体系结构的内容。不久我就认识到(在3位评阅者的帮助下),不必要写这么多体系结构的内容。新的RISC体系结构不断被开发出来,大多数大学的体系结构课程都介绍了研究编译技术所需要的相关知识,本书的重点应该是编译技术。
这导致了本书写作方向的一次重大改变。体系结构方面的大多数内容都被删除了,仅仅保留了体系结构中与编译过程决策有关的内容。编译器的材料也拓宽为包含了有关CISC的编译技术,同时决定只集中讨论单机编译技术,将并行化和向量化的内容留待其他书去讨论。有关编译技术的内容更加集中和深入,有些方面缩小了范围,有些方面又扩大了范围(例如,有关手工代码生成的内容几乎全部删除了,但添加了有关先进调度技术的内容,如踪迹调度和渗透调度)。这样就形成了你面前的这本书。
关于本书的封面
本书封面的图片是从作者的西北海岸民间艺术收藏中选取的,这是一张奇尔卡特毛毯的照片。这块毛毯是在19世纪晚期,由美国阿拉斯加东南部的一个特里吉特妇女,用红松内层树皮制成的非常细的绳子和山羊毛线编织的。编织这样一块毛毯通常需要6~9个月。这块毛毯的图案分为3个部分。中间的一块描绘了一条在水中潜游的鲸鱼;鲸鱼头位于底部,是一个割裂开了的图形;中间有着鲸鱼面部的那个图形是鲸鱼的身体(在这类绘画中,看起来像鲸鱼面部的图形并不表示鲸鱼的面部);鲸鱼的侧鳍在身体的两边;而顶部是鲸鱼的尾鳍。这个设计中的每一部分,就本身而言,都是功能上的,并没有表达什么含意;但它们按正确的方式组合起来,就描绘了一条在水中潜游的鲸鱼,显示了拥有这条毛毯的村长的权力和特权。
类似地,一个编译器的每个组件有着某种功能,但仅当这些组件以适当的方式组合在一起时,才能完整地实现编译器的功能。设计和编织这样一块毛毯需要技巧,同样,构造工业水准的编译器也需要技巧。每个行业都有一组特定的工具、材料、设计要素和总体模式,而所有这一切都必须按满足预期用户的需要和愿望的方式组合到一起。
本书的读者
本书预期的读者是需要了解设计和构造单机高级编译器有关问题的计算机专业人员、研究生和高年级本科生。我们假定读者已经选修了数据结构、算法、编译器设计和实现、计算机体系结构、汇编语言程序设计等课程,或已经具有相当的工作经验。
内容概览
全书分为21章,另有3个附录。
第1章 高级主题介绍
这一章介绍本书的主题,即高级编译器的设计和构造,同时讨论编译器的结构和编译优化的重要性,并介绍本书内容的组织结构。
第2章 非形式化编译算法表示
第2章介绍了一种称为ICAN的非形式化的程序设计表示方法,并给出了有关例子。这种表示方法用于表示本书中的编译算法。在介绍了这种语言的语法符号之后,我们给出了ICAN的概述,接着详细描述了该语言。读者读了ICAN的概述,就足以读懂本书中的大多数算法,只是在很少的情况下,才需要了解ICAN的全部细节。
第3章 符号表结构
第3章首先讨论变量的属性,例如存储类、可见性、易变性、作用域、大小、类型、对齐、结构、寻址方法等。然后给出了高效地构造和管理局部和全局符号表的方法,包括导入的和导出的作用域(在Ada、Mesa、Modula-2中存在这种情况)、存储绑定,以及在考虑上述属性的前提下产生取、存指令的方法。
第4章 中间表示
序言
既然编译器设计已有很长的历史,并且是一门相对成熟的计算技术,人们可能会问,为什么还要写一本有关此领域的新书?回答是明显的,编译器是一种生成由源程序至机器指令的高效映射的工具。语言的设计不断在变化,目标机体系结构也不断在变化,程序越来越复杂,其规模也越来越大。尽管编译器设计问题在高级层次上没有变化,但当我们深入其内部研究就会发现,它其实也一直在变化。此外,我们能够供编译器本身使用的计算资源也在增加。因此,现代编译器可以采用比以前更耗费时间和空间的算法。当然,研究人员也在继续开发新的、更好的技术来解决传统的编译器设计问题。事实上,本书中的所有主题都是计算机体系结构变化的直接结果。
本书迎接现代语言和体系结构的挑战,帮助读者做好准备,去应对将来难免要遇到的编译器设计的新问题。例如,第3章在读者把握了符号表和局部作用域的知识后,讲述了如何处理Ada、Modula-2和其他现代语言中的导入和导出作用域。而且,由于运行时的环境基本上规定了源语言的动态语义,第5章关于运行时支持的高级问题(如编译共享对象)的讨论也是特别有价值的。第5章还讨论了某些现代语言丰富的类型系统和现代体系结构所要求的种种参数传递策略。
任何一部关于编译器设计的书,如果没有介绍代码生成,它就是不完整的。早期的代码生成研究提供了设计手工书写指令选择例程的方法,以及如何在进行指令选择的同时管理寄存器的方法。本书第6章在讨论代码生成时,论述了基于模式匹配的自动化技术。这种自动化技术之所以成为可能,其原因不仅仅是编译器研究的进步,而且也是因为指令集已经变得更为简单和更为规整,以及编译器已经能够构造和遍历中间代码树。
优化是高级编译器设计的核心,也是本书的重点。有许多理论性的成果是关于程序分析的。程序分析的目的既是为了优化的安全,也是为了其他目的。本书第7~10章回顾了迄今为止的各种经典分析方法,同时也介绍了以前只在研究论文中出现过的更新和更有效的方法。这种综合本身就是对编译器设计的一个重要贡献。随后的许多章节都要使用这些分析来完成各种优化方法。
近代计算机系统具备由较多数量的寄存器构成的寄存器集合,这促成了第16章关于寄存器分配的讨论。这一章概括了近十年来在寄存器分配问题上的算法和启发式方法。另外,计算机速度提高的一个重要的原因是并行性,即同时做若干件事情的能力。为了将串行程序转换为可以利用硬件并行性的并行程序,编译器可能需要以既保证正确性又增加并行性的方式重排部分计算。尽管完整的并行处理超出了本书的范围,但本书集中讨论了指令级并行,这导致了第9章关于依赖分析和第17章关于代码调度的关键问题的讨论。
第20章论述存储层次优化,这也是由现代目标机引起的。为了克服处理器和存储器访问速度之间的差距,现代目标机引入了不同的数据访问速度。从本书出版商的网站上还可以得到额外的一章,它讨论了目标代码转换。这种转换是基于编译技术的,它将一个程序在已有体系结构上的目标代码转换为新体系结构的目标代码,即使该程序在新体系结构上的源程序还未出现。
由于新语言的设计一直鼓励程序员对大程序的结构化使用更为成熟的方法,过程间分析和优化的重要性也随之增加了。随着分析方法的不断精炼和调整,以及更快的计算机使得所需要的分析工作已经能够在可接受的时间内完成,这种分析和优化的可行性也增加了。第19章专门讨论过程间信息的确定和使用。
编译器设计本质上是一种工程活动,它所使用的方法必须很好地解决现实(即,用真实的语言书写的且在真实的机器上执行的真实的程序)中出现的各种翻译问题。多数情况下,书写编译器的人必须接受他们面对的语言和机器,很少能够影响和改善这两者的设计。做什么样的分析和转换,以及什么时候做它们都是工程上的选择,但正是这些选择决定了一个优化编译器的速度和质量。这些设计选择在贯穿全书的优化方法和第21章的实例研究中都得到了极为重要的处理和体现。
作者Steven S.Muchnick最大的优势之一是具有丰富而广博的经验。他早期曾是计算机科学教授,后来作为惠普的PA-RISC和Sun的SPARC两种计算机体系结构开发团队的核心成员,将自己的知识和经验应用于编译器设计。每一种体系结构的初始工作完成之后,他就担任了该系统的高级编译器设计与实现小组的负责人。 这些职业经历对他确定读者需要知道高级编译器设计的哪些内容很有帮助。他在研究和亲身开发方面的双重经验,对于指导读者做出编译器设计决策极具价值。
Susan Graham
加利福尼亚大学,伯克利分校