编译程序是一种解释程序对吗,解释程序属于编译程序
程序的编译和解释,你知道是什么吗?
如果你不是很清楚,或者你所知道的有点模糊,那么今天的文章可能会对你有所帮助。看一看。不会占用你几分钟的时间,但是可以让你获得一些新的知识点或者加深理解!
我们先简单看一下节目的编译和解读,也就是说,明确什么是编译,什么是解读,两者之间有什么联系和区别。了解这些用途和基础知识,可以帮助你更好的编程,学习新的技术知识。
所谓基础不牢,地动山摇。来,我们来看看什么是编译和解释:
编译和解释属于翻译,翻译的最终目的是把程序源代码变成计算机可以执行的机器语言,也就是二进制形式。
编译就是把源程序一次性翻译成机器语言,让计算机执行得更快。
解释是程序执行的时候,把源代码一个一个翻译成机器语言,没有编译快。
如果你的理解能力超强的话,通过阅读上面的内容,基本可以掌握今天要说的大部分知识,但是涉及到一些细节知识点,考虑到大部分人的理解能力并不是超强,我还是有必要继续详细讲解。如果你觉得仅仅看了上面的内容就有点迷茫,不妨跟着我来。
学过低级语言和高级语言编程的人可能对这两个概念比较熟悉。什么是低级语言,即机器语言和汇编语言?你觉得C语言是低级语言吗?其实人家C语言不能算低级语言,但也不是高级语言。它介于两者之间。
高级语言就是我们经常说和学的,比如Java,Python,c。
低级语言:最基本的低级语言是机器语言。早期的编程是用机器语言,难度很大,就是0和1的形式。没错,就是二进制,二进制是由0和1组成的。不同的组合代表不同的含义或说明。时代在进步,技术在发展。后来发展出由0和1组成的机器代码指令,用一些助记符号来表示,就形成了。
其实你可以在不同的平台上把汇编代码翻译成机器码,这就是所谓的交叉汇编技术。我不知道你怎么理解这个。如果你觉得读的很透彻很舒服,可以继续读下去。但是如果你有点困惑,可以停下来重读一遍。如果看不懂,可以尽量多看几遍。很容易理解。既然你花了时间看了这篇文章,我还是希望你能有所收获,但是你看不完。
我们来看看高级语言。
上面也一般说了,所谓的高级语言就是我们熟悉的那些,比如Java,Python。为什么是高级语言?因为这些语言的设计逻辑大多是按照我们正常的思维来设计的,所以看起来门槛比较低。大多数高级语言都有自己的解释器,它将源代码翻译成目标平台代码以便执行。
还可以吗?我们继续往下走。
翻译和执行(主要针对Java)在这里,我要给大家介绍两个概念,一个是翻译,一个是执行,也就是简单的看一下这两个货是什么,有助于你理解编译和解释。
翻译的目的是生成另一套代码格式,就是把A变成B,生成的B可以直接由计算机执行。即一步完成翻译生成目标机器码,可以直接运行。这叫编译。
当然,生成的B也可能是半成品,计算机无法直接执行。它是一个需要再次翻译成目标机器码的中间代码。这个重译过程被称为口译。前一个从A生成B的过程,也就是生成中间代码的过程,也被编译。所以编译可以直接一步完成,也可以编译成中间代码,然后再解释成计算机可以直接执行的目标代码。
因此,翻译包括两种,一是编译,二是解释。
我知道什么是翻译,以及如何执行它。就代码而言,执行的最终目的是运行计算机中的代码。如果要运行,就要经过前面的翻译过程,得到目标机器码,才能执行。
由上可知,翻译分为编译和解释,所以会有编译和解释。
编译解释执行编译执行就是把源程序一步翻译成目标机器码,然后直接运行。
执行就是把生成的中间代码翻译出来,也就是不管是不是源程序,然后把中间代码一个一个翻译成目标机器码,一个一个翻译执行。Java就是这样。
这其实是在告诉你什么是编译,什么是解读。编译强调的是一次性准备,也就是先把所有源代码翻译成机器码,想运行就直接读取执行,但解释不一样。重点是用了就翻译,就是一个一个翻译,一个一个翻译,边翻译边执行。
单看解释。其实我觉得编译比解释更容易理解。更纯粹一点,就是一次性把源程序翻译成目标机器码,直接一次性给你你想要的一切。如果跑的话,直接看就可以了,但是解释略麻烦。
如果你正在学习Java,你可能会停留在对编译和解释的理解上。其实对于Java来说,上面的理解是正确的,对编译和解释的理解也很到位。但是如果离开Java,放到其他高级语言中,对编译的理解没有问题,但是对解释的理解就有点偏了。这是因为在Java中,编译生成中间代码,也就是字节码,然后由虚拟机将字节码解释成平台的目标机器码。
因为没有其他语言能像java一样生成中间代码,先编译字节码,再解释成目标机器码,所以Java这种高级编程语言,不能说是编译语言,也不能说是解释语言,而是两者兼而有之。
说到另一种知名语言Python,其翻译模式与Java非常相似,即先编译成中间代码,再由解释器解释执行。然而,与PHP不同,它是一种解释性语言。
对于PHP来说,就是直接把源程序一个一个翻译成目标机器码然后执行,中间不编译任何东西,也就是解释一个代码,直接执行一个代码。专业点就是PHP把代码解释成操作码,然后交给Zend engine执行。
比如C和C就是编译语言,先把源程序一次性编译成目标机器码,然后执行。
明白重要的一点,两者的区别。这里用一个编译量来说明两者的一个区别,因为我个人觉得知道这个对理解编译和解释的区别有很大的帮助。
再来看编译。经过上面的解释,你应该知道编译讲究的是把源程序一次性翻译成目标机器码,然后交给计算机执行。这里很重要的一点是,程序代码编译后,会生成另一种可存储的代码。计算机执行是读取生成的代码,一般是目标机器码。
我们来看看Java的编译过程。就是生成中间代码,也就是字节码。你可以看到这个字节码,也就是javac命令之后的字节码文件。这又是一套可见可存储的代码,生成的代码是可存储的,这是编译的一个特点。
另一方面,口译一般是翻译和执行一起,一个一个翻译,然后翻译和执行。此过程不会生成可存储的目标代码。
就编译而言,它的翻译和执行是分开的。首先,它被翻译成代码,然后被执行。但是,与其解读不同。它的翻译和执行是密不可分的,翻译和执行是同步进行的。
你知道什么是编译和解释吗?在这里,不知道大家有没有搞清楚编译和解释?如果还是有点模糊,看看我下面的总结。
总结一下,我们写的代码最终会在计算机上运行,它会被转换成计算机可以识别的机器码。这个过程叫做翻译,翻译有两种方式,一种是编译,一种是解释:
1.编译:将源代码或源程序一次性翻译成目标机器码,然后执行。比较快,类似吃火锅。先全部吃完,然后一起吃。
2.解释:把源代码或者源代码一个一个翻译,就是翻译一项,执行另一项,类似于边吃火锅边吃。
最后,编译解释背后的一个本质现象是,在编译的过程中,控制权在原程序,即源程序或源程序中。因为源程序是要一次性编译成目标代码的,你的源程序决定了编译后的最终机器码,而解释就不一样了。它的控制权在解释者,因为它读的是一个又一个解释,而解释者在这个中间解释过程中起主导作用。
先说边吃火锅边吃,相当于你是翻译。你可以决定我想吃什么,我想吃什么,但是编那种就像吃火锅,一下子放进锅里。你不能决定你想吃什么,但这取决于你的食材。所有的食材都放在锅里,所以只能吃这么多,也就是只能在锅里选。
嗯,清楚了吗?如果你还是不明白,那么我建议你再看一遍,或者留言表达你的疑惑。
另外,由于本人技术能力有限,文章如有不妥之处,敬请指正。让我们一起学习吧!
Ps:其实我们现在也不能那么确定到底是解释还是编译什么语言。毕竟技术在进步。比如大家都认为C语言是编译语言,是gcc编译的,实际上是可以直接在TCC上解释和执行的。例如,PHP实际上是一种解释性语言。脸书很早就有hiphop编译器,可以把PHP编译成C,然后再编译成二进制。
好了,今天的分享就到这里。我觉得很好。期待您的阅读和转发!