Python是编译型还是解释型语言?与Java有何不同?

前段时间有几个人在群里争论Java和Python是编译型还是解释型语言。阿驹在这里谈谈自己的看法。
毕竟作为曾经的Java程序员,猿!

广而告之: 学习Python的同学可以加QQ群249708924,或者搜索细学Python即可申请加入。

以下探讨建立在标准Java、CPython的基础上, 不讨论PyPy等。

先说结论

Java既是解释型也是编译型,CPython是解释型。

什么是编译型,什么是解释型

编译型:源码——经过编译器编译——机器码——执行。
解释型:源码——经过编译器编译——中间码(字节码)——经过解释器解释——机器码——执行。

Python与Java各自的方式

Java的执行是 .java 编译成 适配 JVM的 .class字节码,JVM再解释后执行。CPython也几乎一致的过程。从这点来看,Java和CPython都是解释型
但是,Java有个JIT机制,即是,经常被调用的代码会直接被编译成机器码,而在此后的执行过程中不再需要解释,这是编译型的特点,所以Java又可以说是编译型的。而CPython没有JIT这一套。所以CPython就不能说成是编译型

本质

阿驹说什么东西都喜欢探讨它的本质,那么编译型和解释型,他们实质上有区别吗?
没有理解透基础概念的,不必关心下面说的话,免得越学越糊涂。
其实,上面对编译型和解释型的理解是比较狭义的。高级语言要拿去执行,中间不都有个编译器去编译一下嘛?从更广义看,所有高级语言都是编译型,也是可解释的,包括C。

  • 版权声明:自由转载-保留署名-禁止商用-禁止演绎(知识共享4.0许可协议)
  • 发表时间:2015-10-29 13:57:40
  • 最后更新:2016-04-20 14:00:22
  • 永久链接:http://aju.space/2015/10/29/python-is-compiler-or-interpreter.html