绝世龙书(30年经典重现)

来源:互联网 发布:矩阵是什么时候学的 编辑:程序博客网 时间:2024/05/02 04:32
绝 世 龙 书
《编译原理,第2版》

说到龙书(Dragon Book),喜欢玩编译器和程序语言的老大们肯定是人手一册,在编译器技术这一块的教科书中地位几乎有如圣经。说到这儿又要鄙视一下国产的什么编译原理教材,简直是不知所云,抄都抄得这么潦草。计算机领域的经典著作,常常会有些“小名”或俗名,如无人不知的TAOCP,C语言圣经K&R,算法入门宝典CLR。TAOCP是书名的缩写,此书堪称最有名的算法书籍,我估计也是被完整阅读次数最少的计算机书籍,之一都省掉了。K&R和CLR都是作者名字的开头第一个字母。龙书算是比较有个性的,这个外号来自其封面。1977年,Alfred V. Aho和Jeffrey D. Ullman写了一本Principles of Compiler Design,封面是一位骑士枪挑一头绿色恐龙,因此得名龙书。到了1986年,此书升级换代,书名变成了Compilers: Principles, Techniques and Tools,沿用至今,作者增加了Ravi Sethi。封面依然是一位骑士和一头恐龙,只不过恐龙变成了红色,骑士则坐在了电脑前。仔细看的话,发现龙身上纹身“Complexity of Compiler Design”,骑士全副武装,盔甲上书“Data Flow Analysis”,夹着一把写着”LALR Parser Generator”的宝剑,盾牌上则写着”Syntax Directed Translation”。一晃过了20年,龙书终于出了新版。封面当然是骑士斗恶龙。作者又加了一位,篇幅猛增了200多页,变化十分巨大。除了一些古典内容如词法分析,语法分析,语法制导翻译,中间代码生成没怎么动,后面的运行环境,代码优化部分可谓焕然一新。从Run-time Environment这一部分就可以看出程序语言这些年来的变化:Java,.NET,Python,Ruby…自动内存管理已经不是什么新鲜事,所以龙书里开了近半章的篇幅给垃圾收集。内存管理是个大题目,完全铺开来一本书都不够,从目录上看,龙书已经包括了现在主流的一些技术,估计作者安排这一块内容时也死了不少脑细胞。变化最大的当属代码优化,原来只有一章,现在一下子撑成了四章,洋洋洒洒近400页,可以单独成一本书了,较之第一版,作者似乎不满足于做一本入门教材,要一揽子把从入门到高级全包了。其他内容上的变化,暂时只能从目录上看一下。Flow Analysis增加了一些较新的算法,比如Region-Based Analysis。优化部分花了不少力气讲Parallel Machine,现在看来也是大势所趋。书肯定是不可能仔细看了;也不知道什么时候会有中文版;这么一本1000页的大砖头翻成中文后也不知道厚成什么样。我个人的一点观察,最近几年动态语言与函数式语言开始逐渐成为主流,用马克思的话,一个函数式编程的幽灵开始在C++/C#/Java中徘徊。现在的编译技术,似乎应该包括Dynamic Typing, JIT等等,特别是种种针对动态语言的优化(比如方法缓存)。作为一本教材,不可能面面俱到,更不能跟风,编者总有自己的原则和取舍,大概龙书的四位作者认为这些东西还不值得进入大学的编译技术课程。但我觉得现在正是一个计算环境变革的前夜;或者说变革已经在进行时了。这样的话,也许下一个版本,不用再让我们等20年。说到这儿,又要损一下中国这帮写教科书的人。为了避免打击面过广,不失一般性,限定于计算机行业。老外写书,一版二版三版,真是与时俱进。当年Dirichlet写了一本数论讲义,每次重版他的学生Dedekind都会在后面添个附录反映一下最新的研究进展,到最后附录比正文还厚得多。在我国,就少见这种延续性。人家真是把教材当作一项事业来做的。中国最有名的计算机书估计是谭老师的C语言,去年貌似也出了个新版,除了换个封面,里面新瓶装旧酒,继续误人子弟。对谭老师C语言书的声讨网上已经进行多年,我也没有重复的必要。只是想到这些状况,不能不有点觉得外国月亮有点圆。

db_2.jpgdb_3.jpgdb_1.jpg
原创粉丝点击