打算有时间写一本书,用另一种方法来讲解编译系统。目前的《龙书》《虎书》《编译器设计》,都是从编译技术的,前端,中间代码,后端来讲的。而且为了知识的迁移性,没有指定前端语言跟后端语言。这种教学方式,我认为是自顶向下的讲解方式,从上层应用封装往下讲。
所以我准备写一本小书《编译系统-自底向上研究方法》,从运行文件的格式,机器码开始讲。因为早期计算机的发展就是没有上层语言的,他们是从机器码编码 慢慢过渡 到高级语言的使用。
《编译系统-自底向上研究方法》主要内容如下:
1,讲解 Linux 运行文件 ELF 的格式 跟 Windows 系统的PE格式,如何直接写 二进制 机器码完成一些简单的功能。
2,分析 ld 链接器的实现,如何把 多个 .o 文件链接在一起 生成 可执行文件。
3,分析汇编器 as 的实现,如何把汇编指令(ASII码字符串) 翻译成 二进制机器码。
4,分析 gcc 的实现,如何把 C程序(前端语言)翻译成 汇编指令。
本书的主要目的是带领读者自底向上经历一遍计算机编程语言的发展历程,本书每个章节的内容都会提供可断点调试的代码,方便读者自学。
声明:本书更多的是对 《龙书》《虎书》的扩展,并不能替代他们,编译技术已经发展了数十年,有些技术已经形成一个领域,特定领域的优化,经典书籍会讲解得更深入一点。本书的大部分技术深度都会点到即止,让你了解一下这东西是什么,至于在复杂场景的实现,性能更好的实现跟算法,需要你自己再去看经典书籍或者读论文。
由于本人各方面的事情都比较忙碌,而且编译系统这个技术方向,是需要大量时间投入的。投入2~3年的时间也未必能获得可观的金钱收入,所以这本书只会在业余时间更新。
由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1,QQ:2338195090。