python 是解释型的语言,也是编译型的语言
简单的理解:
编译 compile:
是将高等语言,可读性很高的语言,
转化为,可执行的二进制程序,( 符合 CPU 指令集的机器码 )
( C 语言,就是这样做的 )
你的操作系统,能够运行这个文件
解释 interpreted:
执行程序,就是一次读取一行源代码,
把那一行源代码,操作掉
( shell 就是这样做的 )
广义的编译:
将程序从语言 A (源代码),转换为语言 B ( 目标语言 )
同一个程序,从形式 A,到形式 B
通常语言 A ,比语言 B 高级。例如,从 C 到机器码
( Babel 把代码,从JavaScript 8 转化为 JavaScript 5,也是一种编译)
bytecode 字节码
python 中,源代码编译为更简单的形式,字节码 byte code
byte code 是类似 CPU 指令集的指令
CPU 不执行 byte code ,
虚拟机软件,执行 byte code
( 该虚拟机软件,并不是模拟整个操作系统的虚拟机,是简化的 CPU 执行环境 )
隐式编译
python 编译到字节码,是完全隐式的
( 从不跑一下,一个 python 编译器,
简单运行 .py 文件,即可 )
python 是按需编译,python 只会把需要的文件,给编译了
Java 的编译方式:
你必须,运行 java 编译器,把 java 的源代码,转化为编译好的类文件问题: java 编译的粒度,是按照 class 类文件,
那 python 的编译粒度,是文件中的代码吗?所以,java 是一门编译型语言,python 是一门解释型语言
java 和 python 都编译成 bytecode 字节码,
然后都会有相应的虚拟机的软件实现,来执行他们的 bytecode 字节码
Java 原生,总是编译为字节码 byte code,
Java 率先采用 just-in-time (JIT) 技术,在运行时,编译为机器码
现在,java 有时完全编译为机器码,C 的风格
Python , 的常规实现是 CPython,CPython 就是用 C 写的
PyPy 是另一种实现,采用了 JIT 编译技术,
运行代码,比 CPython 快很多