编译器和解释器

Q & A

编译器和解释器之间的区别是什么?
编译器相对于解释器的优点是什么?
解释器相对于编译器的优点是什么?
在一个语言处理系统中,编译器产生汇编语言而不是机器语言的好处是什么?
把一种高级语言翻译成另一种高级语言的编译器成为源到源(source-to-source)的翻译器。编译器使用C语言作为目标语言有什么好处?
描述一下汇编器所要完成的一些任务。

编译器和解释器之间的区别是什么?

什么是编译器
A compiler is a computer program that transforms code written in a high-level programming language into the machine code. It is a program which translates the human-readable code to a language a computer processor understands (binary 1 and 0 bits). The computer processes the machine code to perform the corresponding tasks.
A compiler should comply with the syntax rule of that programming language in which it is written. However, the compiler is only a program and cannot fix errors found in that program. So, if you make a mistake, you need to make changes in the syntax of your program. Otherwise, it will not compile.

编译器是一种计算机程序,它将用高级编程语言编写的代码转换为机器代码。它是一个程序,它将人类可读的代码翻译成计算机处理器理解的语言(二进制1和0位)。计算机处理机器代码以执行相应的任务。 编译器应遵循编写它的编程语言的语法规则。但是,编译器只是一个程序,无法修复该程序中发现的错误。因此,如果犯了错误,则需要更改程序的语法。否则,它将无法编译。

什么是解释器?
An interpreter is a computer program, which coverts each high-level program statement into the machine code. This includes source code, pre-compiled code, and scripts. Both compiler and interpreters do the same job which is converting higher level programming language to machine code. However, a compiler will convert the code into machine code (create an exe) before program run. Interpreters convert code into machine code when the program is run.

解释器是一种计算机程序,它将每个高级程序语句转换为机器代码。这包括源代码,预编译代码和脚本。编译器和解释器都执行相同的工作,即将更高级别的编程语言转换为机器代码。但是,编译器会在程序运行之前将代码转换为机器代码(创建exe)。解释程序在程序运行时将代码转换为机器代码。

比较点 编译器 解释器
编程步骤 创建程序->编译器会分析是否正确,如果有问题提就抛出来,没有->将源代码转化成机器代码->它将不同的代码文件链接到一个可运行的程序->执行 创建程序->不链接文件或者生成机器代码->在执行期间逐行执行源语句
优势 这段程序以及被翻译成机器代码,代码执行时间更少 解释器更加方便使用,尤其是对新手来说
劣势 改变程序必须返回到源代码修改 解释程序必须在具有相应解释器的计算机上运行。
机器编码 将机器语言存储为磁盘上的机器代码 根本不保存机器代码
运行时间 编译代码运行得更快 解释的代码运行速度较慢
模型 它基于语言翻译链接加载模型。 它基于解释方法。
编码生成 生成输出程序(以exe的形式),可以独立于原始程序运行。 不生成输出程序。因此,他们在执行期间每次都会评估源程序。
运行 程序执行与编译分开。它仅在编译完整个输出程序后执行。 程序执行是解释过程的一部分,因此它是逐行执行的。
内存要求 目标程序是独立执行的,不需要内存中的编译器。 解释器在解释期间存在于解释器中。
最适合 限制在特定的目标机器上,无法移植。 C和C ++是最流行的一种使用编译模型的编程语言 对于Web环境,加载时间很重要。由于所有详尽的分析都已完成,编译需要相对较长的时间来编译甚至可能无法多次运行的小代码。在这种情况下,解释器会更好。
代码优化 编译器可以预先查看整个代码。因此,它们执行大量优化,使代码运行得更快 解释器逐行查看代码,因此优化不如编译器强大
动态打印 难以实现,因为编译器无法预测转折时会发生什么。 解释语言支持动态打字
环境 它最适合生产环境 它最适合程序和开发环境。
错误执行 编译器在编译时显示所有错误和警告。因此,无法在不修复错误的情况下运行程序 解释器读取单个语句并显示错误(如果有)。您必须更正错误以解释下一行。
输入 它需要一个完整的程序 它需要一行代码。
输出 编译器生成中间机器代码。 解释器不生成中间机器代码。
错误 同时显示编译后的所有错误。 逐个显示每行的所有错误
语言 C,C++,C#,Scala,Java all use compiler PHP,Perl,Ruby uses an interpreter