机器不能理解我们用高级语言编写的代码,所以要在程序执行前将高级语言“翻译”为机器语言。这是一个将源语言程序转化为目标语言程序的过程,它依靠翻译程序来完成。
翻译程序包括:
编译与解释的不同:
编译和解释都可以将高级语言翻译为机器语言,不同之处在于:
PS:JavaScript 本身是解释型语言,但是在“翻译”过程中同时有解释器和编译器(JIT)的参与。在其它文章会学习这个知识,此处不做进一步讨论。Anyway,这个系列的笔记会将重点聚焦在编译型语言上。
早期的二阶段编译器,任务主要有两个,一是理解输入的源程序,二是将其功能映射到目标机上,据此将编译器内部划分为前端和后端两个模块 —— 前端负责理解,后端负责映射。前端对源代码的理解反映在 IR (intermediate representation,中间表示)这一结构中,IR 再传递给后端进行处理。
后面出现了三阶段编译器,也就是在前后端之间增加了一个用以改进 IR 的优化器。注意:这个优化器本身是一个源到源的编译器。自此,三者的分工变为:
(typeA,"str1"),(typeB,"str2"),(typeA,"str3"),(typeC,"str4")......
)