• a list of compiler books — 汗牛充栋的编译器参考资料


    a list of compiler books — 汗牛充栋的编译器参考资料

    转自http://www.lingcc.com/2012/05/16/12048/

    前不久,有位《编译点滴》网友询问编译器方向的参考资料。其实之前讨论过一些编译器相关的在线资料–《有写编译器的冲动?这些资料很重要》。这篇博文就来总结总结编译技术相关的各类图书资料,供各位参考。这个书列是结合本人所了解的内容整理出来的,限于能力有限,肯定还有很多疏漏,请大家指正。

    所列图书,有中文版本的,我会尽力给出中文版本名称。

    1 编译器整体设计与实践

     

    1.1 龙书 – 《Compilers Principles,Techniques, & Tool》

    本书主页:http://dragonbook.stanford.edu/

    这本书因为封面展示了程序员努力与各种计算机难题化身而成的恶魔龙的图片而闻名。
    这是编译器领域最著名的一本教材,地位相当于《算法导论》与算法课的关系。
    书中对编译相关理论、编译器实现技术等等都有介绍。虽然书很厚,但惜墨如金,言简意赅。
    对于一些掌握的很朦胧的基本概念,翻看此书,仔细琢磨一会,便会茅塞顿开。

    目前最新的是第二版。第一版重点在前端设计与实现上,有一小部分涉及代码生成、优化,以及运行时管理技术。
    第二版新增了大量篇幅介绍编译器中的各种优化技术。将一些基本优化理论概括的很到位。
    但因为刚刚加入,练习、实践方面还没有增加。

    本书的作者是国际上编译界的几位鼻祖级人物:

    这本书国内影印、翻译版本都有,书名《编译原理、技术与工具》。
    相比不少人已经有了,这里就不多说了。

    推荐度:××××× (五星,最高级)

    1.2 虎书 – 《Modern Compiler Implementation in C》

    本书主页:http://www.cs.princeton.edu/~appel/modern/c/ 。

    作者是来自 Princeton University的:

    此书因封面为一只老虎而的名。除了C语言实现,作者还编写了编译器Java语言实现、ML语言实现两本。
    这本书的特色是注重实践,许多章节在讲解理论的同时,会有个“program”一节,用来指导读者实现相关内容。
    此外还有配套的一些分析和练习。

    我曾利用此书练习编译器实现,中间有些关于嵌套函数的支持内容,因为实现过于复杂,曾经一度很纠结该不该做。
    如果作者能结合现在语言的发展状况,重新组织一下图书,出个新版,就完美了。
    (貌似作者在忙着出另一本书,《Alan Turing’s Systems of Logic: The Princeton Thesis》,听起来很有意思的书)

    这本书国内影印和翻译版本也都有。书名《现代编译原理-C语言描述》

    推荐度:×××× (四星,总体很好,部分内容稍旧)

    1.3 《Engineering a Compiler》

    本书主页: http://www.cs.rice.edu/~keith/Errata.html 。
    使用本书教授的编译课程:http://www.clear.rice.edu/comp412/

    这本书的两位作者都来自 Rice University。

    值得赞一下的是:今年(2012年),这本书出了第二版。
    这也是一本讲总体编译器实现的书。也没有仔细读过。
    但每当需要翻开这本书的时候,我总是很激动,因为每次翻看都很激动想仔细读读。
    但都因为一些琐事,未能如愿。这是一本除龙书外,值得非常用心读的一本书。
    这本书12年的再版,更加强调一个现代编译器的设计与实现。
    与龙书有很多前端的实践不同。这本书几乎涉及了编译器各个阶段,包括程序分析和优化阶段的实现。
    另外,从目录结构来看,对编译技术的讲解也很透彻。(因为本人没有详细阅读此书,所以只能表面看看)。

    这本书国内有第一版的翻译版本,名称《编译器工程》。有兴趣的朋友可以看看。

    推荐度:××××× (五星,最高级)

    1.4 《编译原理实验教程》

    这是我认为很值得推荐的一本国内编译器实现教材。
    书不厚,但内容很完整。作者是中国科学技术大学的张昱和陈意云老师。
    本书主页:http://staff.ustc.edu.cn/~yuzhang/compiler/

    陈老师是国内编译方面的前辈之一。多年从事中国科技大学的编译原理课程教学工作。
    这本书就是在中国科大计算机学院多年编译实验课程的基础上总结而来的。
    我曾和其中一位参与本书中库代码、文本编写的研究生同住半年。
    他很自豪的说,这本书是本好书。

    这本书主要基于Java实现一个面向对象的类Java语言的编译器。
    光盘中还有相应的类库和程序设计开发包。
    手痒的朋友可以买来立即动手试试。

    推荐度:×××× (四星,实践细节较多,理论少)

    1.5 《Crafting a compiler》

    本书主页:http://www.cs.wustl.edu/~cytron/cacweb/

    这也是一本偏向于介绍编译器前端实践的教材。
    这本书和《编译原理实验教程》类似,也有相关的源代码提供,都是Java的。感兴趣的朋友可以从主页上下。
    这本书我草草翻过。书中的内容没有仔细看,不过感觉习题比较有意思。

    这本书国内有原版影印版,书名《编译器构造》。

    推荐度:×××× (四星,没有自己的特点,这本书覆盖到的别的书也有讲。内容不旧但也不新)

    1.6 《编译器设计之路》

    这也是难得一件的国内编译器实践类书籍。作者用C++实现了一个Pascal编译器。可能因为目标语言是Pascal,所以“叫好不叫做”。不过因为编译器设计所关注的点其实就那几个方面,所以还是很有参考意义的。

    自己翻过这本书,但是没有印象了,豆瓣上有些评论可以供各位参考。不管怎样,国内的朋友能写出这种书,都值得好好推荐。

    推荐度: X X X X (四星,实现Pascal语言的编译器有些脱离大众)

    2 语言理论、编译器前端设计与实现

    因为程序设计语言一直在向前发展,所以关于程序语言和编译器前端设计的书,也在不断发展着,而且曾出不穷。

    2.1 《Introduction to Automata Theory, Languages, and Computation》

    本书主页: http://infolab.stanford.edu/~ullman/ialc.html

    这本书介绍了计算机的理论基础–自动机理论。
    以及以此为基础的乔姆斯基文法概念,计算复杂性问题。 这些都是计算机科学的理论基石。
    乔姆斯基文法更是程序语言设计的基础。
    虽然看标题,这本书的理论应该挺老了。不过这本书当前的最新版本–第3版是2006年发行的。
    对于基础理论性的书籍,这已经算是比较新的了。

    说实话,虽然一直计划要看,但到现在这本书还没有翻开过。所以不好随便评论。
    感兴趣的朋友可以看看豆瓣上的评论

    这本书国内有影印版和翻译版,书名《自动机理论、语言和计算导论》。

    推荐度:××××× (对语言设计理论,计算机科学、可计算性问题感兴趣的读者,千万不能错过)

    2.2 《Programming Language Pragmatics》

    本书主页在此:http://www.cs.rochester.edu/~scott/pragmatics/ 。

    这本书可以用集编程语言设计之大成来形容,目前最新版本为第三版,作者是University of Rochester的Michael L. Scott教授。
    此书介绍了被广泛使用的各种编程语言,以及这些编程语言中一些语言特性的编译器实现细节。
    另外,还讨论了很多在程序设计语言演进的过程中曾经昙花一现的一些技术及其优劣。
    因为涉及到十几种编程语言的很多细节,书中有些内容(比如脚本语言一章)给人一种简单罗列、缺少分析的感觉。
    但可以明显感觉得到,对于那些重要的语言特性,比如控制抽象、类型系统、面向对象、函数式语言等等,作者都分析的很到位。
    而且这些分析都是基于一个个程序片段,而非简单的理论分析。

    每一章后面的习题,也很值得推荐,比如不少习题会引导你去看语言对应的编译器/解释器中具体的实现原理,以及一些特性的比较之类。
    上过编译原理课程,并了解至少两门语言的读者,强烈推荐阅读之。

    目前最新版本是第三版。国内有第二版的翻译和影印版,书名《程序设计语言–实践之路》。

    推荐度:××××× (5星,最高级)

    2.3 《Practical Foundations for Programming Languages》

    首先,感谢Carnegie Mellon University的Robert Harper,我们能免费的拿到这本书的电子版

    此书主要介绍程序设计语言的基础,几乎涵盖了程序语言的方方面面,小到符号、异常,大到整个类型系统的设计、并行、并发语义的设计与实现。
    作者既然把这本书电子版直接放出来,至少说明他很自信这是一本好书,也很希望与更多喜欢该技术的人交流。
    我们也有充分的理由相信,这书值得一读。

    目前此书只有英文版本。

    推荐度:×××× (4星,理论性较强,有些枯燥。但绝对是本权威著作)

    2.4 《 Design Concepts in Programming Language 》

    本书主页: https://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=11656 。
    MIT出版社出版,作者是:

    • Franklyn A. Turbak
    • David K. Gifford

    这也是一本介绍程序语言设计的书,但和《Programming Language Pragmatics》集大成不同,它强调对一些语言设计中公共技术的研究和论述。
    目前的最新版本已经是第10版了。
    这本书我只草草的翻过,最深刻的印象是厚!相当于两本龙书那么厚。
    印象第二深刻的是,把语言设计的一些方面分成了三个部分,动态语义(命名、状态、控制)、静态语义(类型、多态、模块)和实践需求(垃圾收集)。
    具体的内容没有细看,感兴趣的朋友可以到该书的主页内看看。

    这本书有中文影印版,书名《程序设计语言概念》。

    推荐度:××××(4星,太厚了,可以先找个薄点的看看)

    2.5 《 Principles of Program Analysis》

    本书主页: http://www2.imm.dtu.dk/~riis/PPA/ppa.html

    这是经 Cheng推荐而添加的。顾名思义,这本书主要讲程序分析的相关基础理论和概念,重点集中在静态分析技术,包括分析程序可靠性、动态行为。书中介绍的程序分析技术,涵盖:数据流分析、基于约束的分析、抽象解释、类型系统四个方面。

    目前此书最新版本是第二版,没有国内版本。

    推荐度:XXXXX (五星,最高级,内容结合最新理论、基础概念、概括全面)

    2.6 《Language Implementation Patterns – Create Your Own Domain-Specific and General Programming Languages》

    这本书可以简单的看作ANTLR工具的使用手册。即介绍如何利用ANTLR工具,创建自己的Domain Specific language编译器。
    ANTLR与Flex/Bison的功能差不多,只不过一个是基于Java的,一个基于C/C++。

    这本书有中文版,书名《编程语言实现模式》。

    推荐度:×××× (4星,专业性稍微有点强,想自己实现编译器的朋友可以试试)

    2.7 《flex & Bison》

    看到这本书的名称,想必不少朋友都知道是用来干什么的了。
    这是一本介绍如何使用编译器生成工具flex和bison实现一个前端的书。
    此书更加偏重实际动手能力和工具。
    目前这本书最新版本是第二版。而且已经有中文版本。

    书中的内容主要涉及如何使用flex和bison,以及如何解决语法冲突、二意性问题,还有一章单独介绍了编译器前端的错误报告和恢复。

    这本书国内也有翻译版和影印版。

    推荐度:×××× (4星,越看越像个工具使用说明)

    3 程序分析、编译优化及代码生成技术、编译器中端和后端设计与实现

     

    3.1 《Optimizing Compilers for Modern Architectures: A Dependence-based Approach 》

    这本书是编译界泰斗级老前辈–Ken Kennedy 的著作。
    主要从编译器、代码分析角度介绍如何进行依赖分析以适应现代的超标量、并行体系结构。
    很可惜,这本书01年出版之后没有再版过。
    如果Kennedy还在世,看着多核、众核这么蓬勃的发展,一定会出新版讨论讨论粗粒度的线程级并行和依赖分析问题,
    把他以及他的弟子们对编译的理解统统贡献给世人。

    不管怎样,这本书在面向VLIW、超标量体系结构的编译优化,为并行而进行的依赖分析方面,绝对是一本难得的好书。
    这本书有中文翻译版《现代体系结构的优化编译器》,由计算所编译组敬爱的张兆庆老师领导翻译,但翻译版貌似在各大网上书店都已经没货了。

    推荐度:××××× (5颗星,最高级,即使随便翻翻大师们的作品,也能收获不少)

    3.2 鲸书 – 《Advanced Compiler Design and Implementation》

    这本书可以用程序分析、编译器实现、性能优化技术的百科全书来形容。
    基本网罗了面向当今主流微处理器结构的所有程序分析、编译优化技术。
    而且都对这些技术做了概括、总结,附有丰富的参考文献。

    不过也因为这个百科全书需要非常宽的知识面、非常深的编译功底、非常大的阅读量。
    而且一个人的力量也很有限。所以有不少批评的声音,说书中的算法有不少bug。
    不管怎么说,没有第二个人能写出这种书,这就值得我们尊敬。

    国内有此书的影印版和翻译版,书名《高级编译器设计与实现》。

    推荐度:××××× (5星,最高级)

    3.3 《Building an Optimizing Compiler》

    也是一本较老的书,98年出版的。
    作者在编译器的实践方面经验丰富,主要关注如何选择编译技术,技术的工程实现以及如何对技术进行改进。
    实际设计和实现编译器时,作者秉承经典技术优先于最新技术的原则。所以书中的介绍也充满了对经典编译优化技术的透彻理解。

    推荐度:××× (3星,内容较旧,所讲内容其他书也都有覆盖,不过基于扎实的工程经验是本书可圈可点的地方)

    3.4 《Data Flow Analysis– Theory and Practice》

    本书主页:http://www.cse.iitb.ac.in/~uday/dfaBook-web/

    顾名思义,这本书主要介绍编译器内部的一个基本程序分析技术–数据流分析。
    该书的作者是三名印度人。其中Uday Khedker领导实现了GCC 4.0版本中的数据流分析优化的整体框架。

    这本书将数据流分析理论讲解的非常到位,从latice到iterative algorithm,再以多个实际数据流编译优化为例,介绍了前向、后向、双向的数据流分析算法。
    包括复杂度分析、可计算性问题。最后,又结合GCC中的实现介绍,数据流分析的结构体设计、函数设计等等。
    看了这本书,只能用过瘾来形容。
    目前这本书还没有中文版本。

    推荐度:×××× (4星,虽然写的很好,但专业性太强,不推荐没有编译基础的朋友阅读)

    4 运行时技术、虚拟机和解释器设计与实现

    其实许多讲Java虚拟机的书,都可以算在这个类别里面。因为个人能力有限,那些书就不列在这里了。
    这里只列一本专门讲编译器和解释器实现的书

    4.1 《Writing Compilers and Interpreters: A Software Engineering Approach》

    目前已经是第三版了。这本书倾向于利用现有工具完成一个编译器,其中用到了Java、UML、XML、Java容器、实现一个IDE等等。
    都是比较有意思的小项目。

    这本书我没有翻过,只是从书的目录和介绍中推测的。

    推荐度:××××× (5星,最高级,写了很多其他书没有写的东西,且能做成一个很有成就感的东西。)

    5 其他书籍

    因为能力和水平有限,上面列的书都是我平时所能接触到的。
    其实很有许多其他书,因为没有看过,所以无法评价。下面给出一些其他人列出的书单,供朋友们参考:

  • 相关阅读:
    luogu P1613 跑路
    luogu P2047 社交网络
    luogu P2740 [USACO4.2]草地排水Drainage Ditches
    「字典树」最大异或对
    「贪心」耍杂技的牛
    「贪心」士兵
    「贪心」糖果传递
    「几何」[USACO12DEC]疯狂的栅栏Crazy Fences
    「LCA」[USACO10HOL]牛的政治Cow Politics
    「二分答案 + 前缀和」防线
  • 原文地址:https://www.cnblogs.com/yasepix/p/13859020.html
Copyright © 2020-2023  润新知