天天看点

期书预告:传说中的龙书——《编译原理,第2版》

传说中的龙书-《编译原理,第2版》

期书预告:传说中的龙书——《编译原理,第2版》

各位尊敬的读者,感谢您对华章公司的关注,龙书《编译原理,第2版》即将由华章公司于2008年06月出版,《敏捷软件开发,第2版》将由华章公司2008年3月出版,敬请关注。《敏捷软件开发,英文影印版》已于07年06月出版。

关于本书的最新出版进度,敬请您关注华章公司官方博客。

读者对龙书的评价:

本文来自:http://ocaml.cn/node/79

龙书二又二分之一

二又二分之一是我随便起的名字。

1977年,Alfred V. Aho和Jeffrey D. Ullman写了一本Principles of Compiler Design,封面是一个骑士和一头恐龙,那头龙是绿色的,因此被叫做龙书或绿龙书。

期书预告:传说中的龙书——《编译原理,第2版》

过了9年,1986年,原来的两个作者加上Ravi Sethi,升级了前一本书,不过它不叫Principles of Compiler Design 2nd edition,而是换了个名字,Compilers: Principles, Techniques and Tools,成为另一本书。封面依然沿用骑士和恐龙,那头龙是红色的,因此被叫做龙书二或者红龙书。

期书预告:传说中的龙书——《编译原理,第2版》

又过了9年,1995年,什么都没有发生。

再过了9年,2004年,依然什么都没有发生,但有一些风声出来。

一年后,2005年,盛传龙书将会升级,新书名字叫做21st Century Compilers(现在这个名字被认为是个幽默,但很多图书网站依然可以查到这本书的信息,包括amazon.co.uk和person edition),作者中增加来自斯坦福的Monica S. Lam,将于2006年初出版(现在看来出版时间也是个幽默)。

2005年末到2006年初,新书出来了,不过不是龙书三,而是这里的龙书二又二分之一。Addison-Wesley把龙书二(也就是Compilers 1/e)再次重印(只是reprint而已),而同时在它们的网站上登出部分来自于未来的龙书三的章节(5-11章)以供在线浏览,这就是龙书二又二分之一的由来。

而随着这本书的出现和Addison-Wesley在线网站提供的资讯,我们得知或确认了更多关于龙书三的信息:

  • 作者确实增加了Monica S. Lam
  • 预计在2007年初出版(希望不再是幽默)(Update: 倒是比预计提前了)
  • 名字可能会沿用龙书二的(因此就是Compilers 2/e)
  • 新版增加的一些主题:

       - directed translation

       - new data flow analyses

       - parallel machines

       - JIT compiling

       - garbage collection

       - new case studies

  • 和龙书系列以前的封面一样,沿用恐龙和武士的设计,这次的龙将是紫色,估计成为紫龙书(庐山升龙霸?)
  • 在很多依然列有21st century compilers这一传说中的版本的图书网站,我们可以看到其ISBN号为0321131436,不知道这会不会成为龙书三真正的ISBN。(Update: 现在看来显然不是)
期书预告:传说中的龙书——《编译原理,第2版》

         China-pub购买此书

《道法自然》作者王咏刚先生对龙 书的评价:

IT教材的逻辑学视角
王咏刚
  前不久,著名物理学家杨振宁先生在某论坛上以《周易》为例,批评了中国古代重归纳而轻推演的学术传统。杨先生的论断立即在学术界引起了不小的波 澜,赞成和反对的声音此起彼伏。对此,我个人的意见是:杨先生将《周易》这种几乎与现代科学毫不相干的国学经典与“归纳”、“推演”等肇始于古希腊城邦的 逻辑学概念关联

在一起,这颇有些强为“体用”的嫌疑;但无论如何,杨先生据此得出的结论——中国古代学术缺乏形式逻辑、数理逻辑等科学思维方式的事实——却是毋庸置疑 的。也难怪,早在两千年前,惟一有可能成为逻辑学滥觞的名家学说就已经被独尊儒术的政治浪潮淹没和吞噬,寸土无存,又何谈稼穑呢?

  这种“传统”延续到今天的结果是,国内不少接受了现代科学训练的研究者会在不知不觉间忽视了逻辑上的严密性和完整性,并最终丧失了自 己在科学领域里的话语权。类似地,在IT教材编撰这门特殊的科学里,如果我们对知识表述和传承的内在逻辑视而不见,只知道依据有限的“教学经验”决定教材 的体例、结构、编撰方式和行文风格,国产IT教材就必然会在国外经典教材的中译版和影印版的联合夹击下丢掉最后的阵地。相反,如果我们可以清醒地认识到, 编写IT教材这件事与普通的科学研究或论文编撰有着本质的不同(前者的目标在于降低知识传承的难度,其内在逻辑必须符合教学而非科研的基本规律),那么, 国产IT教材一直以来的重灌输而轻引导、重演绎而轻归纳的不良传统就有希望得到根本的改变,真正优秀和经典的国产教材也就不会让师生们望眼欲穿了。

  说许多国产IT教材重演绎而轻归纳(这正好和杨先生批评的学术传统相反),可以举一个显而易见的例子。现在,不少大学的编译原理课程 的教学已经在使用国外教材了,其中,最著名的一本教材是AlfredAho等编写的《编译原理、技术与工具》,也就是业界所说的“龙书 (TheDragonBook)”了。大多数人都知道“龙书”比国内的编译原理教材好用、好学,但很少有人肯花心思研究“龙书”的编撰方法和内在逻辑。拿 我自己来说,我一直对“龙书”赞不绝口,但也一直心存一个硕大的问号:“龙书”的第2章占据了原书近60页的篇幅,可即便删去第2章,“龙书”所描述的知 识体系的完整性也不会受到任何影响,AlfredAho等人为什么一定要引入一个结构复杂、牵涉知识面相当广的第2章呢? 其实,这个问题的答案与知识传承的规律或曰认知逻辑有关。叙事学家爱玛·卡法勒诺斯曾说(《新叙事学》,北京大学出版社,2002年):“我们能获得哪些 事件信息,这在很大程度上取决于我们的时空位置,由于这个原因,我们获知事件时的顺序与事件本身的时间顺序往往是不同的。”把这句话类推到IT教材编撰领 域就是:发现知识的顺序与教授或学习知识的顺序往往是不同的,如果教材的编撰者不能在写作时将自己摆到教与学的时空位置,就必然会模糊甚至破坏教材本身的 内在逻辑。

  比如说,国内的编译原理教材大多在简单的序言之后,就直接进入文法、语言、词法和语法分析等知识的传授,而在每一组知识的传授过程 中,又几乎毫无例外地遵循“定义-分类-公式”或“算法推导-实用案例”的讲述顺序。换言之,国内大多数编译原理教材都试图在课堂上营造这样一种教学逻 辑:我是这一领域无所不知的权威教材;我会首先告诉学生该领域的所有公理;然后勒令学生背诵所有相关定理的推导方法,以及典型问题的求解过程;最后还要教 学生使用“照猫画虎”的方式解决典型问题。殊不知,这种高高在上、全知全能的知识表述方式在逻辑上遵从的是“由抽象到具体”的演绎法则,它在科学研究或学 术论文编撰时效果显著,但照搬到教材编撰领域,就只相当于许多高三学生刻骨铭心的“填鸭”式应试教育,空有“效率”而无效果了(国内的教材撰稿人大多是活 跃在“论文数量大比拼”第一线的职业教员,这大概就是“教材论文化”风潮背后的内因吧)!

  相反,“龙书”的编撰者在确定全书的逻辑结构时一定认真思考了以下问题:编译原理的整个知识体系是数十年中无数学术精英在形式语义 学、计算数学、计算机科学等相关领域探索、积累的结果;普通学生既不可能凭空承受这许多知识点的狂轰滥炸,也不可能在短短的一学期里重复前人数十年的研究 历程———也就是说,单纯的知识演绎或单纯的经验归纳都不足以满足编译原理的教学需要,必须探索或创造一种符合教学规律的知识表述逻辑,其关键在于:要让 学生用最小的代价重新体验知识积累的全过程,以便掌握此领域里最基本也最重要的研究方法和学术规律,同时引导学生以最快的速度进入整个知识框架,并在保持 学生浓厚学习兴趣的同时与学生一同经历神奇、刺激、充满挑战的知识探索历程。

  为了实现这样的目标,“龙书”的编撰者精心设计了全书的逻辑结构,并特别引入了异常精彩和重要的第2章。我第一次阅读“龙书”时, 在读罢第1章,了解了相关知识背景后,我的求知欲(其实是好奇心)就被推到了最高峰,我迫切想知道:我们日常使用的优秀编译器到底是如何编写出来的?我自 己也能实现一个真正的编译器吗?我能发明一种别具一格的程序设计语言吗?我能像Knuth一样利用编译知识创造出可以与TeX媲美的软件工具吗?这个时 候,如果我读到了国内教材里司空见惯的第2章或第3章,面对大量枯燥乏味的术语或符号,我的所有求知欲就会像失恋之后的表现欲、谈话欲、唱歌欲乃至饮食欲 一样消失得踪影全无。很幸运,我在这个时候读到的是“龙书”的第2章。在这一章里,“龙书”用一个最简单的例子,引导我一边动手、一边动脑,在最短的时间 里经历了一个微型编译系统设计的全过程,并潜移默化地把编译领域的基本知识框架和基本研究方法“印”在了我的脑子里。更为重要的是,当我怀揣着在第2章中 轻易建立起来的自信心进入后续知识点的学习时,我经常有意无意地发出这样的感叹:喔,我想起来了,这个问题我在第2章时就已经思考和研究过,这里只不过是 同一问题的推广和延伸罢了。严格地说,“龙书”第2章所展现的是一种在先验知识体系指导下的“由具体到抽象”的归纳法则,这种表述逻辑与普通学生的认知逻 辑正好两相契合,同时还为后续章节中必要的演绎逻辑埋下了伏笔,减少了教与学的逻辑障碍和心理负担。无疑,“龙书”的第2章正是全书的“书眼”。

  除了第2章外,“龙书”在其他章节中展现出来的逻辑完整性也值得称道。拿“自顶向下语法分析”的讲解顺序来说,国内不止一本的编译 原理教材在相应章节都首先给出了LL文法及FIRST、FOLLOW函数的定义,然后再介绍递归下降和预测分析的算法和实现。而“龙书”的讲授顺序正好相 反:先介绍算法的基本思路;这样的算法为文法提出了某些限制条件,如此得出的文法被称为LL文法;接下来,为了实现预测分析法中必要的表驱动算法,需要引 入FIRST、FOLLOW函数的定义——不难看出,“龙书”的知识表述逻辑完全符合由浅入深、由此及彼、逐层递进的教学规律,是归纳逻辑和演绎逻辑的完 美统一。反观国内教材,如果说在上面那种违背教学规律的讲述顺序中还有某种逻辑规律可寻的话,那也不过是一种彻头彻尾地服务于应试教育的“填鸭逻辑”罢 了。

  值得说明的是,“龙书”等优秀教材在形式上的逻辑完整性是根植在教材编撰者正确认识教学规律的基础上的。我们追求知识表述逻辑的严 密或完整,其最终目的都是为了使教学曲线更为平滑,使学生更容易掌握最基本也最有效的知识和方法。离开了这个大前提,片面强调逻辑完整性只会制造新的认知 障碍。例如,国内应用最广、发行量最大的一本《编译原理》教材显然受到了“龙书”的影响,也引入了一个试图用案例展现知识体系全貌的第2章,但很遗憾,它 的编撰者显然没有悟到IT教材应尽量减少认知障碍的真谛,居然又在第2章中摆起了理论家的脸孔,选择了一个学术味儿十足的PL/0语言作为案例,还迫不及 待地用大量味同嚼蜡的术语和语法图堆积出了PL/0语言的语法和语义。这种模仿方式只会粗暴地把师生的积极性转变为完成教学、考试任务的“惯性”,并最终 落得个画虎不成反类犬的滑稽结局。

  简言之,逻辑混乱的IT教材是教材中的伪劣品,逻辑清晰但不够完整,或不符合教学基本规律的IT教材同样无法成为教材中的经典。从 逻辑学的角度出发,我们或许可以找到某些评价或改进教材质量的定量方法,例如,统计教材中知识点分布的基本规律或计量教材中知识参照和引用的方向及密度, 并以此为基础,比较和完善教材的逻辑模型或知识表述结构等等。但方法仅只是方法,如果教材的编撰者始终对教与学的特殊性视而不见,也许若干年后,就又会有 某个诺贝尔奖得主像杨振宁先生那样,拿着21世纪初叶的某部国产IT教材断言,中国一向缺乏合乎逻辑的教学思路和认知模型了。

传说中的鲸书

这本“鲸书”是编译器方面绝对的经典,被人们誉为与编译技术的经典代表作“龙书”(《Compilers: Principles,Techniques,and Tools》)齐名。作者Steven S.Muchnick在编译技术方面有着深厚的理论基础,又具有丰富而广博的经验。他以这样两方面的功力写成的这本书,对于从事编译器设计和实现的科技人 员具有无法衡量的价值。

期书预告:传说中的龙书——《编译原理,第2版》

继续阅读