咱们用高级编程语言java啊C++啊写的程序,怎么到机器上执行的呢?java
机器可看不懂咱们的java语言,他哪知道你要干啥呢,因此就须要有人翻译给他们听啊,编译器就是干这事的,把神秘的人类编程语言翻译成机器能理解的语言,而后机器听懂后,就开心的执行起来了。
但是机器也有来自不一样地方的啊,根据CPU的不一样,有X86的,有ARM的,有MIPS的,他们虽然都说的机器话,但方言也有所不一样啊,因此这个翻译的人,还得会不一样的方言。编程
好,这个时候我用人类的编程语言写了段程序,想在X86机器上跑一跑,我找来了会这门人类语言的编译器,他先把个人语言翻译成X86机器能懂的方言,而后我把方言送给X86机器,X86机器听到后,咔咔开始执行。
我如今也想把这段程序在一个ARM机器上跑一跑,我再找编译器给翻译成ARM能懂的方言,再给ARM机器,ARM机器而后咔咔的执行。
如此以来,每次我都要先编译成两种方言,而后给两台机器跑,若是机器类型更多,我还得编译出好多个方言版本,好麻烦啊。编程语言
这时门外来了个解释器,他说我不用编译器,也不用提早准备那么多方言版本,你直接把程序给我就完事了,执行也甭管了,我来帮你执行。解释器为何这么霸道呢,原来他们人多势众,存在于每台机器里。好比程序送给X86机器时,X86机器里的解释器一边翻译一边给机器执行。原来解释器居然本身雇佣了那些作翻译的人,这样也好,咱们就不用出钱请作翻译的编译器了,直接把程序给解释器就好。优化
这种方式一开始,就有点不对劲,解释器简直是资本主义剥削的表明,他们不断催着翻译的人快快快,每翻译完一句就赶忙拿过来执行掉了,等不及啊,但是咱们知道,程序里有不少重复的代码和能够优化的地方呢,若是是交给专门的编译器作,他们会好好的作优化,也不会在重复代码上耗费多余劳动力,可怜解释器里的那些充当编译器的小翻译啊,他们哪有时间啊,这样下去,总耗时反而增长了不少,由于不少无用功啊。翻译
过了几天他们终于瞒不住了,咱们发现你这个解释器吹牛逼能够,怎么如今越跑越慢了还。解释器也苦不堪言,说要是有人帮咱们先优化一下下就行了,咱们就不那么吃力了。因而好吧,咱们又从外面找了个作兼职翻译的编译器,由于是兼职啊,因此也不用你编译的那么透彻,差很少行了,而后再送给解释器,这下解释器的工做轻松多了,效率就提高起来啦。blog
看到这里应该就彻底理解了吧,若是有人问你编译器和解释器有啥区别,你会说这有啥比的,编译器是把一种语言翻译成另外一种语言,解释器是翻译完了还要执行的,严格来讲不能拿到同一类来比较的呀。编译器
看看这个图,不一样编程语言的方式不一样,好比java,用javac生成的字节码就是一个中间编译版本,而C语言用gcc后就能够生成一个直接执行的版本。编译