首先说一些编程语言的几个发展阶段:
下面我们来说说解释与编译它们的区别,在这里我们想用一个简单的、大家熟知的例子来解释:
文言文翻译!!!!
育红小学五年级一班一个小同学“编译”,他是一个非常认真的小同学,于是在周六日的时候他就把周一老师要讲的“揠苗助长”给提前翻译好写到了纸上,而另一个小同学“解释”,他很贪玩,于是周一的时候,当老师让这两位同学进行翻译的时候,“编译”小同学就直接照着纸念,只花了一分钟,而“解释”小同学则照着书下面的词文翻译一句一句翻译出来,花了一个小时,可是问题出来了,”编译“小同学的翻译中出问题了,他得找出哪个错来,然后再去查翻译改了,而且它花费了一张非常精致的纸,而“解释”小同学则可以边翻译边改错,而且不需要花费纸张,但是问题是老师每次让他翻译,他都得重新来,而“编译”则不需要这么费力,每次需要翻译时他只需要拿纸拿出来读就可以了。
上面的小例子讲完了,我想一些关键的地方已经了解了,下面用一个图来总结一下解释和编译的区别:
一:执行速度
编译是把源代码全部转换为可以直接执行的指令,从而程序运行速度比较快。
解释是把当前行的代码转换为可以直接执行的指令,执行完毕,就要解释下一句代码,边解释,边执行,速度慢。
二:翻译后中间代码
编译型的设计语言的编译初始也是先将其编译成中间的伪代码形式,然后形成机器代码,你知道机器代码的执行速度比其他的码要快,但是他的执行语句描述在体积上会很大.
解释型的语言生成的是伪代码,也就是其执行需要解释器,实际上伪代码也是一种能够简单描述指令的代码行为,例如PASCAL语言.例如Vb生成的就是伪代码.
解释,通常是将源代码解析为一个中间形式(比如抽象语法树,AST),然后,经由一个软件的执行引擎执行这个中间形式,产生对应的结果。这种做法的好处就是可以把执行逻辑独立处理,无须为每个平台编写不同的代码,所以,这种做法的可移植性很好,于是,它成了不少程序设计语言最初的选择。不过,随之而来的问题就是这会降低执行速度,毕竟,这个软件执行引擎的性能无法与硬件相比。所以,以硬件作为执行引擎的“编译”会让程序拥有更佳的性能。
采用编译的方式,我们可以将代码编译成可以由硬件直接执行的二进制代码。因为不同硬件和不同操作系统的二进制格式是不同的,所以,如果希望语言得到广泛应用,那便需要针对不同平台实现平台相关的编译器后端,理论上说,这不是一件不能完成的任务,但这意味着巨大的工作量。虽然编译语言的数量不在少数,但事实上,真正能够跨越各种软硬平台的编译语言似乎只有C。
除了执行性能之外,编译带来的好处还在于保护源代码。因为解释方式通常不会保留的其中间形式,所以,产品发布意味着将源代码也发布出去。对于需要保护知识产权的公司和个人而言,这是他们所不愿意看到的。通过编译的方式,我们将源代码转成了二进制,这样,源代码可以得到有效保护。