前段时间有几个人在群里争论Java和Python是编译型还是解释型语言。阿驹在这里谈谈自己的看法。
毕竟作为曾经的Java程序员,猿!
广而告之: 学习Python的同学可以加QQ群
249708924
,或者搜索细学Python
即可申请加入。
以下探讨建立在标准Java、CPython的基础上, 不讨论PyPy等。
先说结论
什么是编译型,什么是解释型
编译型:源码——经过编译器编译——机器码——执行。
解释型:源码——经过编译器编译——中间码(字节码)——经过解释器解释——机器码——执行。
Python与Java各自的方式
Java的执行是 .java 编译成 适配 JVM的 .class字节码,JVM再解释后执行。CPython也几乎一致的过程。从这点来看,Java和CPython都是解释型。
但是,Java有个JIT机制,即是,经常被调用的代码会直接被编译成机器码,而在此后的执行过程中不再需要解释,这是编译型的特点,所以Java又可以说是编译型的。而CPython没有JIT这一套。所以CPython就不能说成是编译型。
本质
阿驹说什么东西都喜欢探讨它的本质,那么编译型和解释型,他们实质上有区别吗?
没有理解透基础概念的,不必关心下面说的话,免得越学越糊涂。
其实,上面对编译型和解释型的理解是比较狭义的。高级语言要拿去执行,中间不都有个编译器去编译一下嘛?从更广义看,所有高级语言都是编译型,也是可解释的,包括C。