这两天微博上有人帖了一下十年前的编程语言和编译器书单,说实话不是很完整,也没有与时俱进。我今天把家里的相关书籍整理了一下,列个清单。

enter image description here enter image description here enter image description here

首先声明的是这么几点:

  • 这些书基本只是个个人爱好收藏,我本专业不是学计算机科学与技术的,只是当码农有点年头而已。这些书我看了能有一半,就这么多了。
  • 这里面有很多书已经绝版了,如果想看的话可以在图书馆或者二手市场里面找。
  • 以下的观点只是个人看法,不代表已经是正确的,也不存在对出版社的偏袒。

ok,开始正题:

曾几何时,不知道国内哪位高人或者出版社,谈及了编译原理就只有龙虎鲸三本,这三本书不能说不好,但是从如今的观点来看,这三本书作为入门学习是不合时宜的。龙书成书较早,比较流行的说法是学习曲线陡峭以至于成了劝退良作。虎书写作手法略感奇特,有时候看起来感觉很怪。鲸书大部分内容都是后端优化,加上早已绝版实在不能作为入门读物。

作为绝对绝对的入门者自学(也就是自学完一门编程语言和数据结构以后),我建议看如下两本:

enter image description here

《游戏脚本高级编程》,已经绝版,写的很啰嗦,但是作为一本入门垫脚砖还行。 《Writing Compilers and Interpreters》,国内没有引进,两个版本区别是,第二版用C++描述,vm和 x86 16位汇编代码输出,第三版是Java语言描述,带一整套教学实验环境。 这两本书都是递归下降的Parser,没什么需要更多解释了。

入门后正经学编译原理,个人的看法(包括国外一些读者的看法)是,看图灵引进的《编译器设计》第二版或《Modern Compiler Design》,不过MCD国内没有引进,作者的另一本书稍后会介绍。

为什么推荐《编译器设计》,因为这本书整体组织上更适合现在的编译器教学,前端内容略轻后端内容丰富,中间表示也很详细。

enter image description here

读完上面的书,其实自己写一个简单的编译器就不是问题了。下面就可以进阶开始分叉:

编译器前端:

《Modern Compiler Design》的作者有一本书《Parsing Techniques》,vczh曾强烈推荐,这本书国内没有引进。简单地说,这是一本Parsing的百科全书,不仅内容上五花八门一网打尽,仅参考引用的索引就值一回票价。更进阶的就是乔姆斯基的著作了,这已经到了语言学的范畴,别问我,我不懂。

编译器后端:

后端可以看得书其实还是挺丰富的,不过我看的不多,班门弄斧一下:

《高级编译器设计与实现》,鲸书,已经绝版。

《现代体系结构的优化编译器》,这本似乎也绝版了,有一些比较有意思的内容,比如超标量什么的。

《Data Flow Analysis: Theory and Practice》,代码优化必看读物……就是有点晦涩。

还有几本我也没有买,暂时不列在这里了。

虚拟机环境:

《虚拟机,系统与进程的通用平台》,似乎也绝版?这是一本百科类的书,介绍了形形色色的虚拟机,但是你想看到真正的技术内容可能就会失望,买来当索引不错。

《虚拟机的设计与实现》,一本垃圾,不要浪费一分钱在上面。

《深入理解Java虚拟机》,买来没看过,不评价。

《Advanced Design and Implementation of Virtual Machines》,图灵已经引进正在招译者,这本我前段时间看完了,适合深入理解JVM,其中GC算法个人建议参考下面的书一起看。

工具类:

《垃圾回收算法手册》《垃圾回收的算法与实现》,这两本介绍了各种GC算法,无论做VM还是Rumtime都强烈推荐一读,这也是R巨巨推荐的。

《Lex and Yacc》《Flex and Bison》,懒得自己撸前端?那就看看用这个吧。

扩展知识:

《精通正则表达式》,这就不说了,个人推荐。

《领域特定语言》,似乎Java圈子比较流行?不懂不多说了。

先写这么多,语言类的以后有时间再填坑,特别是我不是这方面专家。

另外,编译器涉及到的知识真是五花八门,比如没有出现在照片和文字里的还有汇编,数学,体系结构,甚至字符串算法,有机会再写吧……

学海无涯……