Interpreter(解释器)与complier(编译器)的区别

首先需要说明的是,我们通常写代码用的语言(汇编除外)对于机器来说都是高级语言(high-level language),但由于机器并不能直接理解高级语言,所以我们的代码若是想被执行还需要经过中间的翻译步骤,这个翻译要么是“解释”,要么是“编译”,也因此,我们平时写代码的语言主要分为两类:

解释型语言:R,Python,Java等

编译型语言:C, C++, Pascal等

一. Compiler(编译器)

其实我觉得最能体会解释器与编译器的区别就是在调试/运行代码的时候,

作为计算机专业的学生,大学要学的第一门语言是C,我记得当时我们普遍用Dev-C++ (轻量级易启动易安装),

当时每次写完代码后,可以单独选择 编译(compile) 再选 运行(run),或者 编译且运行,但是无论如何,是需要有这么一个编译的过程的

如果在命令行中用GCC来编译C文件的话,大概对编译过程有更深的体会,

在写好一个hello world的c文件后,需要用gcc来执行:

 $ gcc -Wall -hello.c -o hello 

这个过程中,gcc将原始的hello.c文件编译成机器可以理解的代码并且存为hello文件,之后再执行:

 $ ./hello 

这一步骤将可以被机器理解的hello文件送到内存中由CPU开始执行,之后就可以得到执行结果。

以上是想强调,complier需要先把不可被机器理解的High-level language(例如C或者C++)翻译成可被机器理解的语言(一般是二进制’0‘和’1‘),并存入新的目标文件中(例如上面例子中的hello文件),之后我们真正执行的对象也是hello文件

二.Interpreter(解释器)

如果有在Pycharm调试经验的同学大概会发现,一个有bug的文件是可以被调试的,直到遇到bug,报错,自动退出调试过程。

这也对应了Interpreter最明显的特征:一行一行读取源码后,解释,立即执行

相比于编译型语言来说,解释型语言由于不要翻译成目标文件,因此占据空间较少,但由于逐行解释的翻译方式,也因此降低了整体的执行效率。

以上。

猜你喜欢

转载自www.cnblogs.com/duan1996/p/9905498.html
今日推荐