起因
最近想写一个 Swift2OC 的小工具,在实现过程中总是有些力不重新,所以萌生了了解一下编译器是如果理解程序的,故开此坑。
语言处理器
作用&定义
编译器的主要工作起就是将源程序转成目标语言程序
而目标程序的主要任务就是处理输入,产出输出
解释器则是利用用户的输入执行源程序中指定操作,逐行执行
其他部分
然而除了编译器以外,还需要其他部分才能产生一个完整的程序
- 预处理器:文件聚合,宏转化成源码
- 汇编器:编译器可能产生汇编语言便于输出调试,并生成可重定位的机器码
- 链接器:大型程序经常分模块编译,需要一个东西能重定位目标文件以及库连接到一起
- 加载器: 将所有可执行文件放到内存中执行
课后练习
- 1.1.1 编译器和解释器的区别?
- 答:编译器需要产出目标程序,解释器不用
- 1.1.2 编译器和解释器各自的优点?
- 编译器对输入的处理更快
- 解释器对代码的诊断效果要好
- 1.1.3 产生汇编语言而不是机器语言的好处是?
- 便于输出和调试
- 1.1.4 编译器使用C作为目标语言有什么好处?
- For the C language there are many compilers available that compile to almost every hardware.
- 1.1.5 汇编器的任务
- 将汇编语言转为可重定位的机器代码
课后疑问
- 可重定位的机器代码指的是什么?
- 答:就是机器码不依赖与机器,可处于不同的内存位置,但是内部的 code block 和占用的内存大小是一致的.
更多资料
dragon-book-exercise-answers : 发现竟然是支付宝同事开的repo,答案都是在这对照的