知识卡片
编译器与解释器的本质差异
内容
把高级语言翻译成机器语言有两种根本不同的策略:编译器(compiler)把整个程序一次性翻译成机器语言、生成一份可以留存复用的目标程序,之后执行时不再需要翻译过程本身参与;解释器(interpreter)则不产生留存的机器语言副本,而是一边翻译一边立即执行源程序的高级形式,每次运行都要重新经历翻译过程。这个差异带来的取舍是:编译产生的程序运行时更快(翻译只做一次),解释执行则更灵活(可以在运行时动态改变代码、更适合交互式探索),这也是为什么脚本语言和交互式环境常用解释执行、而追求极致性能的系统软件多用编译执行。发散:Java 和 C# 采用的”先编译成通用中间语言(字节码/CIL),再由目标机器解释或即时编译””策略,正是想同时兼顾可移植性(中间语言与具体机器无关)和执行效率(即时编译弥补纯解释的速度损失),本质是在编译与解释这两个极端之间找到的一个折中点。
参考来源
《计算机科学概论》第6章《程序设计语言》