比起老前辈来说,我们这一代程序员要幸福得多——我们可以从几百种高级编程语言中挑选自己顺手的那种来用,可以坐在显示器前操作键盘、摆弄鼠标,使用各式先进的输入输出设备。机器的处理和联网速度如此之快、硬盘如此之海量、文本编辑器的功能如此之强大、集成开发环境又是如此方便,以至于我们只需用鼠标指指点点,偶尔敲几下键盘,就能得到一个像模像样的应用程序。大行其道的高级语言一方面屏蔽了底层硬件工作的细节,降低了编程的难度,大大加快了程序的生成速度;另一方面也使得大多数新一代的程序员不了解代码的底层实现,很容易忽略代码的效率问题。而汇编语言程序员由于以机器指令形式与硬件打交道,所以他们对指令的执行效率了解得都很透彻。可是众所周知,汇编语言是一种底层语言,效率虽高但可读性差,编写、维护都很不容易,且没有可移植性。怎样才能既利用高级语言开发周期短、维护便捷的优势,又不过多地丧失效率,逼近汇编语言程序的性能呢?这是每个专业程序员都应认真思考的问题。
如今计算机的资源是如此地丰富,让许多程序员觉得程序效率低一些也没什么大不了的。这种想法对于编写简单程序的非专业程序员尚能说得过去,但实际上,商品级软件的功能在越来越强的同时也在变得越来越复杂,必须耗用更多的计算机资源才能运行。我们经常感到恼火,计算机(硬件)性能已经够强了,为什么(软件)运行却更慢了呢?那就是因为许多时候软件运行了一大堆不必要的进程或功能,或者算法不够精良,耗用了太多的资源所致。
《编程卓越之道》系列书旨在讲解卓越编程的方法。具体到第二卷,则是探讨怎样用高级语言(而非汇编语言)编程,得到高效率机器代码。它将引导我们在确保实现设计目标的前提下,学习如何尽量少占用系统资源,又充分发挥代码的性能。该卷将使我们鱼与熊掌兼得,既让我们免于用汇编语言编程之苦,免于牺牲程序的可读性、可维护性和可移植性,又能通过高级语言得到尽量高效的机器码。其核心思想就是“Thinking Low-Level, Writing High-Level”,即用高级语言编程的同时,思考其底层机器码会是怎样的。它不是一本入门级的编程教材,而是我们用高级语言编程获得了一些经验后,希望能再提高自己水平的用书。尽管其中的例子多数都采用C/C++、Pascal语言,汇编用的是HLA等汇编语言,但书中的理论超出了特定的编程语言和CPU架构,以各种处理器平台开发的高级语言程序员都能从中汲取到卓越编程的营养。
本书为中文版《编程卓越之道》第二卷,基于原著此卷第一次印刷的版本(2003017502)翻译而成。翻译尽量承袭第一卷的风格,但力图更上一层楼:为了方便读者查阅书中提到的参考资料,我特意搜索了这些原版书籍在国内的引进版,以“译者注”的形式标出了其中文版或影印版的书名、译者、出版社和书号。有引进版的书仅在第一次出现时标注原英文书名并辅以译者注,此后所有出现此书的地方都标识最新版的中文书名;没有查到引进版的书则始终以英文书名标识。读者可据此了解该书的引进情况。本卷也将索引做了翻译,并按拼音排序,以便用户查找书中内容。另外,若干术语的译法与第一卷有所区别,主要包括:padding byte(s)在第一卷中译作“补齐字节”,本卷则译为“填充字节”;architecture在第一卷中译作“体系结构”,本卷则主要译为“架构”;object在第一卷中大都译作“对象”,尽管该单词确为此意,但考虑到这样容易让读者与“面向对象编程”中的对象混淆,因此除了第12章在讲述类时把object译作“对象”或目标(码、文件...)之外,其余位置均根据上下文语境改译为“数据”、“变量”等。
原书中出现单词“teach”、“you”的地方比比皆是,在翻译过程中我觉得这种语气对读者不够妥当,因此在译文中尽量以“我们”代替“you”,而将“teach”改译为“研究、探讨、研讨、讨论、学习”一类的词汇。另外原文的叙述用了大量的括号,严重影响了阅读的流畅性,因此在翻译过程中我设法除去了大部分括号,将括号内的信息融入正文。所有对原著的改动都已经过作者确认或听从作者建议。比较重要的修改则以“译者注”标于所在页面;至于单词拼错等细微错误,则直接纠正到正文中。还有,原著第3、9、12章的目录结构不尽合理,所以本书应作者要求调整了这些章的目录,对此不再另加“译者注”。
翻译本书的过程也是我的学习过程,它使我对编译器的优化原理以及编程时的注意事项有了更加理论化的认识,相信对渴望提高编程水平的程序员来说本书会是一部很好的学习资料,必然能从中收获甚丰。
在翻译本书的过程中我遇到了一些困惑,曾试图直接向Randall Hyde先生和No Starch出版社求教,但很久都没有回音,后在电子工业出版社刘皎老师的帮助下才与之取得了联系,消除了翻译遗留的问题。在此向刘皎老师致敬,并向原著作者和出版社致以谢意。陈元玉编辑作为本书的前期联络人,为我提供了周到细致的服务;译稿成文后由杨绣国编辑作了全方位的审校,指出了不少问题,对提高本书的翻译质量起了很大的作用;周筠老师把这本书的翻译机会交给了我。她的人格魅力给我留下了深刻的印象,是我学习做人的榜样。在此我向他们表达由衷的感谢、感激之情。我的家庭,母亲王华敏、妻子雷顺和刚出生的儿子张乐康是我事业成长的动力,正是你们的照顾和鼓励,使我有条件完成此书的翻译工作。
最后也是最重要的,我想感谢选择阅读本书的读者。市面上并非仅此一部讲述编程优化的著作,而且每个人的时间和精力都很宝贵,您愿意研读本书,愿意为它投入时间和精力,表明了您对它的信任和期望。我希望本书能帮助您达到目标,祝您成功!
译文力争以通俗顺畅的汉语再现原著的知识。由于译者水平有限,可能存在某些疏漏之处,请读者不吝赐教。您的意见、建议能够帮助我们改善本书的质量。也欢迎你发邮件到zhangfei97@163.com,与我交流本书相关的信息,再次感谢!
张菲
2007年3月






