Compiler and Interpreter
两者的相似点是,它们都像一个翻译官,负责把程序员们写的高级语言翻译成电脑 CPU 可以读懂的机器语言。
A Story And Simile
假设你在宇宙闲逛的时候,飞船突然出了故障迫降在一个外星球上了,幸运的是,你知道怎么修复,不过,你不会用那个星球的工具。还好,这个星球上的外星人很热心愿意帮助你,而且,他们刚好有一个人懂地球话。于是,你拿出了纸笔,把修复飞船的步骤一一写下来,然后交给负责翻译的外星人翻译官。
如果这个翻译官叫 Compiler 的话:
他会拿出另一张纸,把你写的步骤全部翻译好并写到这张纸上,然后把两张纸都递给你,他就走了;
你再去找负责修飞船的工人,把翻译好的操作步骤交给他;
工人拿到翻译好的操作步骤后一顿操作把飞船修好;
在这个过程中,一旦 compiler 完成了翻译的工作,你写的那张纸就没什么用了,无论你去找哪个工人来修飞船,你都只需要把翻译好的纸给他就行。
不过,如果修理过程中飞船突然炸了,你很难知道是哪一个操作步骤出了问题,因为你读不懂外星语,compiler 也早就走了。
如果这个翻译官叫 Interpreter 的话:
他会带着你和你写的那张纸,去找负责修飞船的工人;
他先看一句你写的操作步骤,把这一句翻译给工人听,工人听到翻译后进行操作;
他看下一句,翻译,工人操作,直到把所有步骤翻译完;
在这个过程中,interpreter 全程都拿着你写的那张纸,如果第一个工人不会修,你们得去找第二个工人,然后 interpreter 还得重头再翻译一遍。
不过好处是,如果修理过程中飞船突然炸了,你可以知道是哪个操作步骤导致的,然后你就可以纠正这个步骤,interpreter 也可以重新开始帮你翻译。
Diffs
Compiler
Interpreter
objective
准备一份稍后执行的代码
即时执行代码
返回值
返回编译好的代码,一个 .exe
程序
返回程序的返回值
工作频率
只工作一次,之后需要执行程序的时候直接运行 .exe
就行
每次执行程序的时候都需要工作
系统兼容
交出来的是编译好的代码,之后代码在各个不同的系统中运行时与 Compiler 都无关了,所以程序员需要负责写出能兼容不同系统的代码
Interpreter 会跟着源码到各个系统中,所以是 Interpreter 来负责想办法编译出兼容不同系统的代码
速度
debug
Last updated
Was this helpful?