什么是编译器?

编译器将用源语言表示的程序翻译成用目标语言表示的程序。此外,编译器也可用于改进程序。编译器协助程序员在编译时找到错误,避免了运行时错误。一般而言,越严格的编程语言,在编译的时候引发的错误越多,给程序的编写带来了更大的挑战。但与此同时,一旦编译通过,后续的错误会减少很多。

编译器与解释器不同。解释器在读取源程序的时候直接执行,不需要进行翻译,有时也称作虚拟机。编译器和解释器紧密相关,有时可以相互交换。比如Java编译器将Java源码编译成Java字节码,而字节码是汇编语言的一种抽象形式。Java解释器的一些实现一次执行一条指令;另一些实现将字节码翻译成本地机器码,直接在机器上执行,称作即时(Just In Time, JIT)编译。

学习编译器的原因

  • 伟大的工匠必须熟悉他的工具。

  • 可以构建自己的调试和翻译工具。

  • 构造新的编程语言,如领域专用语言(Domain Specific Language, DSL)。

  • 可以参与编译器相关的工作。

学习编译器的最佳方式

  • 从头到尾写一个编译器。

题外话

  • 建议基于C语言和X86汇编实现编译器。