目录
在接触程序设计的时候我们经常听到两个概念“解释”“编译”。
计算机编程语言可以这两个概念来分一下类。
1解释型:Java、Basic、javascript、python
2编译型:C、C++、Delphi、Pascal、Fortran
这里需要注意一下java具有特殊性
java有编译和解释性 Java编译程序生成字节码(byte-code),再由解释器解释运行。
有点跑题了。
接下来我们开始正式介绍“解释”和“编译”
1什么是解释和编译
首先我们要知道计算机是无法直接执行高级语言的,它只能执行“机器码”所以呢我们就需要把高级语言转换为机器码执行。而转换的方式有两种就是:“解释”和“编译”。
1解释
解释执行不依赖于平台,因为编译器会根据不同的平台进行解析。例如JS语言无论在windows平台还是在Lunix平台都可以使用。故可移植性强。使用解释执行的程序我们一般称为解释程序。它将源语言直接作为源程序输入,解释执行解释一句后就提交计算机执行一句,并不形成目标程序。如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这种工作方式非常适合于人通过终端设备与计算机会话
这是百科的概念,这其中有几个重点:
1解释器
2逐行读取并自行
3不生成目标程序
2编译执行
编译
首先我们要知道计算机是无法直接执行高级语言的,它只能执行“机器码”所以呢我们就需要把高级语言转换为机器码执行。而转换的方式有两种就是:“解释”和“编译”。
首先我们要知道计算机是无法直接执行高级语言的,它只能执行“机器码”所以呢我们就需要把高级语言转换为机器码执行。而转换的方式有两种就是:“解释”和“编译”。
这又是百科的概念,同样有几个重点:
1编译器
2一次性编译
3生成目标程序
3理解概念
概念说完了,接下来就因该形象具体的理解一下了。
我这里做个比喻会方便理解:如果把高级语言的源代码看作外文文章,编译和解释器就是两个做翻译的,计算机是那个要审阅的。编译器和解释器的翻译方式不一样,解释器是一句一句的读给计算机听,而编译器是把整篇文章翻译好写下来给计算机看。
接下来直接举一个实际的例子吧,就拿Java和python举例。
这里我们创建一个名为“测试”的后缀名为“.java”的Java源文件。
我们执行它,
程序会生成一个“测试.class”文件。这里就类似我上面的比喻,Java编译器把.java文件整个翻译成了.class文件再由计算机执行。这就叫编译。
再来看python
我们写一个“测试.py”文件,这里我故意加入了一个错误,我们来看结果。
可以看到,python并没有生成新的文件而是直接执行。有趣的是程序先打印出了第一行代码中的“hello world”而后才报出第三行的错误,这也就说明python是一行一行的执行代码的。
通过上面的介绍和例子,我觉得“解释”和“编译:的概念已经可以理解了。
接下来我们把他们做个对比。
2”解释“和”编译“的对比
两者的区别
解释器 | 编译器 | |
Input(输入) | 每次读取一行 | 整个程序 |
Output(输出) | 不产生任何的目标代码 | 生成中间目标代码 |
工作机制 | 编译和执行同时进行 | 编译在执行之前完成 |
生成程序 | 不生成输出程序, | 生成exe |
修改 | 直接修改就可运行 | 如果需要修改代码,则需要修改源代码,重新编译 |
运行速度 | 慢 | 快 |
内存 | 它少 | 多 |
错误 | 解释器读取一条语句并显示错误 | 编译器在编译时显示所有错误和警告。 |