我现在在看这本书的原版,基本快看完了。我觉得对于对编译有兴趣,特别是后端优化有兴趣的同学,这本书绝对是值得推荐的。
编译技术是计算机科学中的显学,无数学者专家们的心血凝结成汗牛充栋的资料,而且这些资料也随着时间在飞速增加。因此,对于编译来讲,没有那本书就是“一本足够”了的,但是,这本书应该是最为接近这个目标的一本书了。
一般我们说得比较多的是三大经典,“龙书”,“虎书”和“鲸书”,最后一本我没有看过,但是“龙书”和“虎书”读过的部分都有一些缺点。“龙书”最为经典,没有之一,对前端的讲解是我看过的书中最为清晰和准确的。但是另一方面,即使是第二版,对后端的讲解不够现代化,提到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/。有些时候看不大懂,可以参考一下相应章节的讲义,可能会有用。
最后声明下,我不是托,也没有看过中文版,上面的评论都只针对原版。据说郭旭是非常靠谱的译者,希望这本书会让他收获更多的声誉。
我们要做Java Agent,所以希望候选人满足以下条件:
1. 对Java性能问题非常感兴趣,看过《Java性能优化权威指南》
2. 对JVM虚拟机有研究,看过《深入理解Java虚拟机》
3. 对Bytecode插装技术有兴趣,看过ASM,cglib等类库源码
4. 对编译器工作原理熟悉,看过类似龙书之类的……
当然同时满足这些非常难,所以不太满足也没关系,只要希望自己从事这个领域工作即可联系我。
我们这家公司叫OneAPM,这里有一些媒体报道:
http://dy.qq.com/art
http://www.csdn.net/
http://soft.chinabyt
http://www.csdn.net/
http://itlab.idcquan
http://news.zol.com.
我们提供非常良好的培训和工作环境。比如我们会定期邀请业界知名技术人到公司交流,比如Apache Camel,Linux Kernel,Spark SQL的committer来演讲。
我们的工作地点在北京,东升科技园,地铁8号线西小口站。
同时我们也招实习的同学,欢迎小伙伴联系我。有问题可以邮件我,请不要豆邮。
简历请投递 chengxianfeng AT oneapm.com