主要差异
编译器和解释器都翻译高级语言程序,不同之处在于编译器将源代码编译为可执行的机器代码,而解释器解释每个指令并执行它,而不产生任何机器/目标代码。编译器的工作是一次性的,一旦程序被编译;它可以被保存以备以后执行,而每次程序运行时解释器都必须解释。在编译器的情况下生成目标代码,而在解释器中不生成目标代码;它只生成中间代码。编译器基本上处理程序,但解释器按指令处理程序。在编译器中,程序的执行速度很快,而在解释器中则较慢,因为逐条语句的解释和执行非常耗时。在编译器中,调试过程比在解释器中调试要困难得多。编译器在运行时不需要源代码,但如果是解释器,则需要完整的源代码文件来执行程序。编译器需要更多的内存,因为生成的机器代码相当大,但是对于解释器来说,不需要额外的内存。在编译器中,程序中的错误在分析完完整的源代码后显示出来,但在解释器中,每解释一行就显示错误。对于编译器,编译后的代码由计算机硬件执行,而在解释器中,中间代码由另一个程序处理。在编程场景中,编译器检查程序的语法,但解释器验证程序的关键字。在编译器中有一个代码优化的范围,解释器允许在运行时修改代码。这两种方法都是程序员经常使用的,它们都有自己的规范和优点。
比较图
编译器定义
编译器是一种专门的程序,它将用某种高级语言编写的源代码处理成计算机可理解的机器代码。这个机器代码实际上是用二进制语言编写的,处理器可以理解并执行它。为了编写源代码,程序员使用C语言、C++语言或Pascal语言编写程序,使用一些编程编辑器。然后使用适合编写源代码的语言的编译器执行该程序。编译器的输入是一个完整的程序;它首先分析它,然后处理它。它对作为输入的源代码执行大量分析,包括词法和语法分析。在完成这两个步骤之后,编译器的最终任务是生成机器代码。此编译的输出是目标代码,并且是可执行的。程序只编译一次,不需要每次程序运行时都编译。
口译员的定义
解释器是对用某种高级语言编写的程序源代码执行逐条语句(逐行)翻译的程序。解释器,当给定一个程序时,它接受它的一行,解释它,然后执行它。解释器在解释源代码之后生成一个中间代码,然后执行它。没有编译阶段,也没有生成机器代码。这就是解释器如何逐行翻译和运行整个程序。当需要逐条指令立即执行时,它是首选。它们非常有用,尤其是在代码测试完成后。每次,当一个程序要运行时,解释器都以同样的方式解释它。
一言以蔽之
- 编译器处理整个程序;解释器逐行解释代码。
- 编译器生成二进制机器代码;解释器生成中间代码。
- 编译器的机器码在编译后可以保存和重用,解释器每次都要解释源代码。
- 编译器检查代码语法的有效性;解释程序检查关键字。
- 在编译器中,程序执行速度快;在解释器中,程序执行速度慢。
- 在编译器中调试很复杂;在解释器中调试很容易。
- 编译器在检查完整的源代码后显示错误;解释器按指定的顺序以代码形式显示每个指令的错误。
- 编译器的机器码由硬件进一步处理,解释器的中间码由另一个专门的程序处理。
- 编译器在执行时不需要源代码文件;解释器在运行时执行时需要源代码文件。
- 在编译器中,程序的执行是在编译阶段之后完成的,解释器直接执行程序而不进行任何编译。
- 编译器使用更多的内存;解释器需要更少的内存。
结论
计算机体系结构和理解与之相关的术语可能是一个麻烦的任务,上面这两个术语是相似的,它们之间有着各种不同,但似乎总是彼此相似。因此,本文试图解释它们之间的差异,以帮助人们建立一个清晰的认识。