04|字节码文件:编译器与虚拟机的标准合约
海纳
你好,我是海纳。
从上一节课的例子中可以看出,字节码文件在整个 Python 语言的实现中位于中枢地位,这一节课,我们就聚焦字节码文件的格式,目标是把 Python 3.8 的字节码成功地加载进内存。
CPython 虚拟机既可以执行 py 文件,也可以执行编译过的 pyc 文件,这是因为 CPython 里包含了一个可以编译 py 文件的编译器,在执行 py 文件时,第一步就是要把 py 文件先翻译成字节码文件。
接下来,我们将深入分析 pyc 文件结构,实现 pyc 文件的解析,将文件内容加载进内存,并且做好执行的准备。
字节码文件格式
我们先准备一个 pyc 文件。新建一个名为 hello.py 的文件,内容如下:
然后执行 python -m compileall hello.py 命令,就可以得到 hello.pyc 文件。还有一种办法,就是直接运行 python 命令,进入 CPython 的交互式界面,然后执行 import hello,也可以生成 hello.pyc 文件。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. 字节码文件在 Python 语言实现中处于核心地位,CPython 虚拟机可以执行编译过的 pyc 文件,因为包含了一个可以编译 py 文件的编译器。 2. pyc 文件的格式包括魔数、文件时间戳和类型标志,其中魔数用于标识文件类型和版本,文件时间戳记录创建时间,类型标志用于优化文件结构。 3. CodeObject 结构是虚拟机中的核心结构,对于实现一个简单的虚拟机具有重要意义。 4. pyc 文件的解析和加载进内存是为了做好执行的准备,这对于理解 Python 语言的内部工作原理具有重要意义。 5. 对于 Python 3.x 版本,生成的二进制文件位于__pycache__下,这是了解 Python 编译后文件存储位置的重要信息。 6. CPython 虚拟机既可以执行 py 文件,也可以执行编译过的 pyc 文件,这是因为 CPython 里包含了一个可以编译 py 文件的编译器。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》,新⼈⾸单¥59
《手写 Python 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 细雨平湖老师,能不能按照行号,一行一行讲解“hello.pyc”字节码文件?现在这个讲法,完全看不懂啊。2024-05-13归属地:北京
收起评论