孟岩:编译领域里程碑之作

来源:互联网 发布:特朗普访华知乎 编辑:程序博客网 时间:2024/06/11 03:15

编译领域里程碑之作:龙书《编译原理》

孟岩

 

     编译技术一向被认为是软件开发这个以工程和实践为主的学科当中真正的"火箭科技"。一个程序员,当他掌握了基本的编程技能,并且具备一些实践经验以后,如果要求在编程技术上进一步深造,则无非有三个方向:其一是钻研高超的算法,其二是深入计算机和网络体系结构,其三则是提升编程的抽象层次,三条路线彼此相关,触类旁通,殊途同归,无分优劣。不过从编程技术本身来说,提升程序的抽象层次具有化繁为简、四两拨千斤的妙趣,尤其引人入胜。六十年来计算机和软件技术的一切发展,就是抽象层次不断提升的过程。从最早的硬件开关、机器语言、顺序加跳转的指令流,到后来的高级语言、结构化编程,再到近二十年来相继兴起的面向对象、构件技术和面向服务架构,无不遵循着这一逻辑。提升抽象层次有多种手段,函数库、类库、框架、构件、服务,不一而足。而在所有的手段当中,计算机语言是层次最高、能力最强、最富妙趣的一种,别的手段能够达到的效果,语言都可以更轻松的实现,而语言所具备的某些效果,则没有别的手段可以企及,语言是提升软件抽象层次的终极手段。这并不奇怪,人类的抽象能力最终归于语言,这是在哲学范畴内已经被深入讨论过的命题。因此,计算机语言的理论及其处理,被很多一流学者认为是计算机科学中最成熟、最优雅、与实践结合最完美的部分,其重要性不言而喻。

 在实践中,如果一个程序员具备强悍的计算机语言处理能力,则他的程序编写和设计能力将会比其他人有层次上的超越,往往能够做出创新性的成果,给开发的效率和效果带来本质性的提升。不但如此,在编译技术中,有很多思想和具体的算法,在很多其他场合能发挥意想不到的效果,可以说编译技术是软件开发的一个思想和工具的宝库。然而在为数几百万的专业程序员队伍当中,能够主动利用这一宝库,运用现有工具熟练处理语言者,已经是少数。而能够主动根据需求设计优质的计算机语言,并且开发配套语言处理工具的人,更是凤毛麟角。究其原因,一是因为语言设计本身对设计者的要求很高,非有深厚学养和实践者难以有所作为,二是因为编译技术本身颇有一定门槛,不但有一整套抽象的理论,而且涉及多个环节,大量细致的算法,需要集中精力系统学习,不容易掌握,更很难臻于上乘。

 放下计算机语言理论不提,若谈及编译技术,这本由几位著名计算机科学家合著的"龙书"自出版以来就称为本领域的经典著作,被世界众多著名大学选作编译技术本科和研究生课程的教材,可以说是编译技术的"圣经"。也正是因为这本书的名气最大,围绕它的争议也最多:赞誉它的人说它名门正派,体系完整清晰,技术点交代一丝不苟,语言严谨,思路缜密,义正词严,绝无投机取巧之媚态,凡认真学习编译技术者必读之。而批评者则认为,面对编译技术这样一个枯燥艰深的课题,本书严谨有余,活泼不足,显得太刻板。知名的技术专家Allen Holub甚至因为不满意这本书对于编译技术的阐述方式,亲自捉刀写了一本书。然而更多的人还是认为,尽管这本书不可避免地有自己的缺点,但是全面衡量之下,这本书仍然不愧是编译技术领域最全面最重要的著作,是编译领域的"THE BOOK"。在我看来,龙书是一本严谨系统的学术性经典教材,对于有意系统了解编译技术的读者来说,确实不愧为必读之书。

 

本书一版于1986年,横行天下二十年,可以说已经是个奇迹了。2006年,原书三位作者与一位新作者合作,根据二十年来编译技术的发展,编写了本书第二版。新版风格与特色与老版相似,但充分反映了该领域最新的重要成果,并且采用Java作为范例语言,体现出了作者开放进取的心态。更为重要的是,龙书作者认识到,大多数读者不会亲自去构造一个编译器,而是希望从编译这个思想技术宝库中汲取营养,因此特别注意了概念思路的叙述和内容的启发性。全书有两大重点,前半部分侧重于传统的词法和文法分析,后半部分则详细介绍优化原理和技术。这两个重点,可以说是编译技术思想库中最璀璨的宝贝,在很多领域都有着广泛的应用和启发性。可见作者绝不是就事论事,狭隘执着于编译本身,而是希望尽可能给读者提供更具实践意义的工具和锻炼。这大概是这本新版龙书最出色的地方。

 

由于出现了Lex/Yacc,特别是近年来流行的ANTLRLL(*)语言处理程序生成工具,如今编写语言处理工具的难度已经大大降低了。然而若想达到较高的境界,系统的学习和实践本书的内容仍然是必要的。相信新版"龙书"中文版的出世能够帮助更多年轻程序员真正理解编译技术,并且为我所用,做出创新的成果。




注:本书己由机械工业出版社华章公司12月份出版,China-pub独家首发!本文摘自2009年01月版《程序员》杂志