菜鸟常常将编译器和解释器弄混淆,无奈之下,因而向高手请教。php
高手说:windows
“解释器是一条一条的解释执行源语言。好比php,Python就是的解释性语言。 后端 编译器是把源代码整个编译成目标代码,执行时不在须要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快不少。好比C语言代码被编译成二进制代码(exe程序),在windows平台上执行。”ide |
菜鸟说:“我仍是不明白,能给个形象的比喻么?”spa
高手说:“给你讲个故事。”翻译
儿子想,对啊,爸年纪大了,身体很差,买点牦牛骨髓壮骨粉不错,因而儿子就去超市买了牦牛骨髓壮骨粉。blog 儿子又想啊,最近黄金搭档很火,买点给爸试试。因而儿子又去买了黄金搭档。开发 从超市回来后,儿子又寻思母亲说的“家里不热闹”,嗯,家里的小皇帝自从上寄宿学校后就比较少回来,估计是老人家想孙子了。儿子因而给上高中的儿子打了个电话,让他周末回来看看。get
女儿就想,应该给爸作点什么呢?因而她拿出张纸开始罗列条目,先写上了壮骨粉和黄金搭档。而后,想着让老人家看看外孙应该不错,因而就在纸上加上了一句,一家人回爸妈那里看望看望。最后纸上就写着: 1.壮骨粉和黄金搭档 2.一家人去看望爸妈 女儿见到女婿后,就将这张纸上的信息编成短信发给了工做的女婿。 女婿一看就明白了,下班后先去超市买了补品,而后开车回家带着妻儿就去看望岳父岳母了。
想到什么了吗? |
菜鸟说:
我这样说不知道对不对:儿子就像是解释器,是想到一点作一点。女儿就像编译器,女婿就像平台,女儿听完后,在纸上罗列出全部要作的事情,女婿就按着指示办事了。 |
高手说:
就是这样的。儿子对于母亲的话是一条一条执行,女儿是将母亲的话整个翻译成平台能理解的目标语言--短信,整个由女婿直接执行。后者的执行效率会更高。 从功能上看,解释器和编译器确实不同。 然而,从流程和结构上看,两者却很是类似。 儿子和女儿听到母亲的话之后,都是从两个方面来思考:老人的身体和老人对小辈的思念。以此为据,儿子和女儿都作出了本身的决定。只不过一个直接去作了,另外一个却将所要作的事情翻译成另外一种载体--短信--给存储起来。 解释器和编译器也是如此,读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,以后,两者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,以后经过不一样的后端翻译成不一样的机器语言(可执行程序)。以下图所示: |
总之,解析器和编译器它们在功能上是不同的,然而从结构上看却有诸多相同,并且在开发时也并无本质上的差异,这也是不少人将两者混淆的缘由之一。到底是开发解析器仍是编译器?只须要依据功能上的实际须要来作出决定就ok了。