我现在在看这本书的原版,基本快看完了。我觉得对于对编译有兴趣,特别是后端优化有兴趣的同学,这本书绝对是值得推荐的。
编译技术是计算机科学中的显学,无数学者专家们的心血凝结成汗牛充栋的资料,而且这些资料也随着时间在飞速增加。因此,对于编译来讲,没有那本书就是“一本足够”了的,但是,这本书应该是最为接近这个目标的一本书了。
一般我们说得比较多的是三大经典,“龙书”,“虎书”和“鲸书”,最后一本我没有看过,但是“龙书”和“虎书”读过的部分都有一些缺点。“龙书”最为经典,没有之一,对前端的讲解是我看过的书中最为清晰和准确的。但是另一方面,即使是第二版,对后端的讲解不够现代化,提到SSA的只有半页纸,很多地方有点微言大义的感觉。我觉得“龙书”中讲后端,只有数据流分析——格和半群这些数学概念是如何映射到具体算法中,这一部分非常精彩,这本书比不上。"虎书“则失之过于简略,页数最少,却塞下大量内容,讲解必然不过详细。同时,我不习惯虎书中硬掰成ML风格的C语言,看着别扭。
这本书是2011年出的,内容上说绝对现代化。第五章讲IR时就引入了SSA。我觉得这个是很必要的,毕竟几乎所有的实用编译器都以SSA作为IR。后面提到的后端相关的概念,算法等等,我作为一个工作和编译沾点边的人,发现这些也的确是实际工作中经常遇到的内容。换句话说,这本书中描述的内容更接近于真实的编译相关工作。比如说,很少有编译器会考虑直接在DAG上做公共表达式的删除,一般都会用value numbering这样一种更好的方法代替。做编译的人有些可能连前端parser都不大懂,他们只会关心control dependence,data dependence之类的。这些概念和算法,在这本书都有详细的讲解。
另外,这书相对第一版进步也不小。第一版的内容框架基本保留了,但是讲解详细了很多。特别是第一版中文版被翻译毁了的情况下,让人对这一版期待更多。
推荐下该书作者的讲义,http://www.cs.rice.edu/~keith/512/2011/Lectures/。有些时候看不大懂,可以参考一下相应章节的讲义,可能会有用。
最后声明下,我不是托,也没有看过中文版,上面的评论都只针对原版。据说郭旭是非常靠谱的译者,希望这本书会让他收获更多的声誉。