某乎那个问题没到点,重点就是 @
secondwtq 提的:最开始的 bootstrap 不要求编译。
@
Cu635 @
qinliming汇编显然不是机器码,否则就没汇编器什么事了。
严格意义上讲,编译器是允许以批处理形式执行的把源程序翻译成目标程序的翻译器,而汇编器是一种简化的编译器。现代的不少编译器工具链直接包含汇编器作为其中的一个组件。
只不过历史上提出编译器概念的时候着重强调和机器无关,而当时的汇编普遍都是依赖机器的,所以在讨论高级语言的编译器时汇编器就往往被隐含排除了。
@
hehheh Python 还真有编译,.pyc 就是编译出来的东西,只不过编译出的目标代码是中间的字节码而不是体系结构相关的本机代码而已。
注意编译器不一定要求输出可执行程序。而且,你现在在宿主语言实现看到的编译器也好单独汇编器也好,其实都是以编译器驱动(driver) 去调用链接器输出的,单独的不管是高级语言的翻译还是低级的汇编步骤都只生成包含目标代码的对象文件(object file) 而不是可执行程序。而排除编译器驱动和链接器的工具链仍然能叫编译器。
@
ac2sherry 预处理记号、伪指令、宏以及其它注记这些可选的部分都可以不对应目标代码。
实际上,汇编语言也不一定需要是和机器相关的低级语言。用汇编器的形式实现高级汇编语言完全没有理论问题,只是大部分汇编语言都是硬件和个别适配具体体系结构的汇编器厂商提供的,很少有人这样设计而已——为什么放着高级语言的通用翻译技术而要纠结按传统汇编器那样使用助记符引导宏展开去实现一个编译器呢?