译者序
算上这本《自制编译器》,图灵的“自制”系列应该已经有6本了。从CPU到操作系统,从编译器到编程语言,再到搜索引擎等具体的应用,俨然已经可以自制一套完整的计算机体系了。
“自制”系列图书都是从日本引进并翻译出版的,本人也有幸读过其中几本。可能有很多读者和曾经的我一样对“自制”抱有疑惑:“在时间就是金钱、时间就是生命的IT行业,为什么会存在这样的自制风潮?为什么要自制呢?CPU可以用Intel、AMD,操作系统已经有了Windows、Linux,搜索引擎已经有了Google、Yahoo,编程语言及其对应的编译器、解释器更是已经百花齐放、百家争鸣……”直到翻译完本书,我才逐渐体会到自制是最好的结合实践学习的方式之一。拿来的始终是别人的,要吃透某项技术、打破技术垄断,最好的方法就是自制。并且从某种程度上来说,自制也是一种创新,可能下一个Google或Linux就孕育在某次自制之中。
自制编译器的目的是了解当前实用的编程语言、编译器和OS的相关知识,绝对不能闭门造车。因此作者使用的C♭语言是C语言的子集,实现了包括指针运算在内的C语言的主要部分,通过自制一个C♭语言的编译器,能够让我们了解C语言程序编译、运行背后的细节;OS选用Linux,能够让我们知晓Linux上的链接、加载和程序库;汇编部分采用最常见的x86系统架构。作者自制的编译器cbc能够运行在x86架构的任何发行版本的Linux上,编译C♭代码并生成可执行的ELF文件。
作者青木先生在致谢中提到了Linux和GNU工具等开源软件的开发者。这也是本书的另一大特色:充分利用开源软件和工具。从GCC到GNU Assembler再到JavaCC以及Linux,并非每一行代码都是自己写的才算自制,根据自己的设计合理有效地利用开源软件,既可以让我们更快地看到自制的成果,又能向优秀的开源软件学习。如果要深入学习、研究,那么开源软件的源代码以及活跃的社区等都是非常有帮助的。而如果把自制的软件也作为开源软件上传到Github上供大家使用,并根据其他开发者提出的Pull Request不断改进软件,那就更好了。
最后我要由衷地感谢本书的另一位译者绝云老师以及图灵的编辑。还要特别感谢我的外公,一位毕生耕耘于教育出版行业的老编辑。自己能有幸参加翻译,和从小对出版工作的耳闻目染是密不可分的。
严圣逸
2016年4月于上海