python语⾔是编译执⾏_JAVA,Python代码是编译执⾏还是解
释执⾏?
有⼈在讨论 Python 代码是编译执⾏还是解释执⾏?这个问题还可以换⼀种说法: Python 是编译型语⾔还是解释型语⾔?回答这个问题前,我们先弄清楚什么是编译型语⾔,什么是解释型语⾔。
所谓编译执⾏就是源代码经过编译器编译处理,⽣成⽬标机器码,就是机器能直接运⾏的⼆进制代码,下次运⾏时⽆需重新编译。不过它是针对特定CPU体系的,这些⽬标代码只能在特定平台执⾏,如果这个程序需要在另外⼀种 CPU 上⾯运⾏,这个代码就必须重新编译。它不具备可移植性,但是执⾏速度快,C、C++这类语⾔属于编译型语⾔。
⽽解释型语⾔是在代码运⾏期间逐⾏翻译成⽬标机器码,下次执⾏时,还是需要逐⾏解释,我们可以简单认为 Java、Python 都是解释型语⾔。
注:
有⼈说Java是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就⽆法执⾏。
也有⼈说Java是解释型的。因为java代码编译后不能直接运⾏,它是解释运⾏在JVM上的,所以它是解释型的。
所以很多地⽅都说“java是⼀种半编译、半解释执⾏”的语⾔;
对于C和C++,它们经过⼀次编译之后,可以由操作系统直接执⾏,所以它们是编译型语⾔。⽽Java不⼀样,它⾸先由编译器编译
成.class(字节码)⽂件,然后在通过JVM从.class⽂件中读⼀⾏解释执⾏⼀⾏,所以它是解释型的语⾔。也正是由于java对于多种不同的操作系统有不同的JVM,所以实现了真正意义上的跨平台。
编译型相当于厨师直接做好⼀桌⼦菜,顾客来了直接开吃,⽽解释型就像吃⽕锅,厨师把菜洗好,顾客需要⾃⼰动⼿边煮边吃,效率上来说解释型语⾔⾃然⽐不过编译型语⾔,当然也不是绝对了,像 JIT 的效率就很⾼java python是什么意思
以上是对编译型语⾔和解释型语⾔的⼀个简单粗暴的区分,但是
Python(这⾥主要是指CPython)并不是严格的解释型语⾔,因为 Python 代码在运⾏前,会先编译(翻译)成中间代码,每个 .py
⽂件将被换转成 .pyc ⽂件,.pyc 就是⼀种字节码⽂件,它是与平台⽆关的中间代码,不管你放在 Windows 还是 Linux
平台都可以执⾏,运⾏时将由虚拟机逐⾏把字节码翻译成⽬标代码。
我们安装Python
时候,会有⼀个 ⽂件,它就是 Python 解释器,你写的每⼀⾏ Python
代码都是由它负责执⾏,解释器由⼀个编译器和⼀个虚拟机构成,编译器负责将源代码转换成字节码⽂件,⽽虚拟机负责执⾏字节码,所以,解释型语⾔其实也有编译过程,只不过这个编译过程并不是直接⽣成⽬标代码,⽽是中间代码(字节码),然后再通过虚拟机来逐⾏解释执⾏字节码。
总结
Python代码⾸先会编程⼀个字节码⽂件,再由虚拟机逐⾏解释,把每⼀⾏字节码代码翻译成⽬标指令给CPU执⾏。
编译型语⾔和解释型语⾔的优缺点:
编译型语⾔在程序执⾏之前,有⼀个单独的编译过程,将程序翻译成机器语⾔就不⽤再进⾏翻译了。
解释型语⾔,是在运⾏的时候将程序翻译成机器语⾔,所以运⾏速度相对于编C/C++ 等都是编译型语⾔,⽽Java,C#等都是解释型语⾔。
虽然Java程序在运⾏之前也有⼀个编译过程,但是并不是将程序编译成机器语⾔,⽽是将它编译成字节码(可以理解为⼀个中间语⾔)。在运⾏的时候,由JVM将字节码再翻译成机器语⾔。
注:脚本语⾔⼀般都有相应的脚本引擎来解释执⾏。 他们⼀般需要解释器才能运⾏。JAVASCRIPT,ASP,PHP,PERL,Nuva都是脚本语⾔。C/C++编译、链接后,可形成独⽴执⾏的exe⽂件。
①编译型:优点:运⾏速度快,代码效率⾼,编译后的程序不可修改,保密性较好。
缺点:代码需要经过编译⽅可运⾏,可移植性差(java可移植性好,java利⽤jvm实现跨平台),只能在兼容的操作系统上运⾏。
②解释型:优点:可移植性较好,只要有解释环境,可在不同的操作系统上运⾏。
缺点:运⾏需要解释环境,运⾏起来⽐编译的要慢,占⽤资源也要多⼀些,代码效率低,代码修改后就可运⾏,不需要编译过程。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论