编译与解释的区别
博主今年大三,学校开展了《编译原理》这门课,而老师提的第一个问题便是编译与解释的区别,下面我将会说说自己的看法。
首先我们要知道市面上大致上是有两种类型的语言的:静态语言与动态语言。
静态语言:C/C++,JAVA,C#等等;动态语言:Javascript,Python等等
而静态语言之所以是静态的正是应为它的源文件是需要使用编译器将源程序文件翻译成二进制文件。
我们拿JAVA举例,java是一门典型的强类型静态语言。首先,我们在One.java文件中编写一段程序如下
package com.mao.analyze; public class One { public static void main(String args[]){ System.out.println("Hello world"); } }
在我们编写下列代码后,在终端中输入javac One.java 命令,这条命令就是使用java编译器对One.java(源程序)进行编译,结束后生成字节码文件One.class而后使用java One指令执行该文件(通过jvm进行解释执行),便会在终端中输出Hello world字符串了。并且,为了更快的完成输入到输出的处理,有些被称为即时编译器(JIT)的JAVA编译器在运行中程序处理输入的前一刻首先把字节码翻译成机器语言,然后执行程序。
上述就是JAVA从编译到执行的过程,我们可以得出编译是需要先生成目标文件才可以执行的,接下来我们讨论以下解释型语言的处理过程。
首先,我们在One.py中编写一段程序如下
if __name__ == '__main__': print("Hello world")
在我们编写下列代码后,我们在终端中输入python One.py指令,会发现终端中会直接显示Hello world字符串,并没有编译Java所需要的步骤。这就是解释执行,也就是说解释程序是在我们执行的过程中对程序段进行翻译的,执行到哪翻译到哪。
上述就是Python解释执行程序的过程,我们可以得出解释是不需要生成目标文件的,我们可以直接运行该文件,而不需要进行任何中间过程。
根据上述对编译执行的语言和解释执行的语言的描述,我们可以得出以下结论:
1. 编译执行的语言由于需要先生成目标程序,所以启动较慢。
2. 编译生成目标文件后由于是二进制文件可由计算机直接执行(java语言还需要jvm),所以执行速度较快。
3. 解释执行的语言不需要生成目标程序,所以启动速度相对较快(程序大了也不见得如此)。
4. 解释语言在运行程序的过程中需要不停的翻译程序段,所以执行的速度会略慢于编译执行的语言。
好了,以上就是我对编译和解释的区别的比较简单的理解;如有错误还望斧正,谢谢。