Python运行初探

Python的运行有两个步骤,Compile(编译)和Interpret(解释)。

  • Compile: 把原始的Python代码解析成字节码的形式

  • Interpreter: 在Python虚拟机中逐条执行字节码

我们通常认为Python是“解释型语言”,“解释型语言”并不是不用编译,而是不需要用户显式去使用编译器。

Python运行的流程如图所示

Compile

Compile过程可以看做是一个翻译过程,通过抽象语法树 Abstract Syntax Tree 将Python代码转换成汇编指令(这里的汇编指令并不是直接运行在CPU上的x86汇编,而是Python自定义的,运行在Python虚拟机上的汇编)。Compile把高级语言翻译成汇编语言,这个过程中只做语法检查和翻译,不会执行任何代码,因此也不会检测到任何运行时的错误。

Interprete过程将逐条执行翻译好的汇编指令,可以类比为x86的汇编和MIPS汇编在CPU上的执行过程,定了基本的数据传输,算术运算,控制转移等指令。

我们可以参考cpython/Include/opcode.hcpython/Python/ceval.c 两个文件来了解Python自定义的汇编指令集。

/* File: cpython/Include/opcode.h */
#define POP_TOP                   1
#define ROT_TWO                   2
// ...
#define BINARY_ADD               23
// ...

比如这里的BINARY_ADD 指令,就是一个加法指令,他会从运行栈中POP()出两个值,相加后再PUSH()到运行栈里,实现代码在

/* File: cpython/Python/ceval.c */
// ...
        TARGET(BINARY_ADD) {
            PyObject *right = POP();
            PyObject *left = TOP();
            // ...
// ...

我们接下来会以一个简单的例子,了解Python的编译,解释过程,并初步了解python是如何执行这些指令的。

results matching ""

    No results matching ""