文章

随笔

53. Byte Code 的栖身之所 PyCodeObject

字节码 (ByteCode) 是一组精心构建的二进制表示,其中主要包含两种信息: 执行什么操作; 操作的参数; 除此之外 Python 中的各种常量、名称、变量也在字节码中。 Python 的面向对象非常彻底,字节码的管 …

阅读全文
随笔

52. 一览真容,离 VM 最近的字节码

上一节我们说到, .py 源码先后转换为 AST、ByteCode,最终到了 VM 这里付诸执行。有的朋友认为字节码的存在,是一种加速优化技术,某种程度上这样说是合理的,但这并不意味着 VM 可以同时支持 Python …

阅读全文
随笔

51. Python 是如何运行起来的?

对于 Python 是一门优雅的语言,这一点应该不会有太多人反对,随着我们对 CPython 实现的研究,不得不说 Python 的优雅一直渗透到它的底层,在 Python 的 C 实现这一层,几乎全部以 Python …

阅读全文
随笔

50. 预备,用 GDB 调试 CPython

最近在研究 CPython,深入到 Python VM 需要大量借助 GDB 调试,但是问题在于,Python 的底层实现中,大量使用了 Python C API 和各种 Object,如果试图通过 GDB 指令查看 …

阅读全文
随笔

49. Python 为什么需要 iterator?

有关 iterable 和 iterator 的定义介绍已经很多了: 实现 iter 或者 getitem 方法的对象是 iterable 对象; 实现 iter 和 next 方法的对象是 iterator 对象; 那 …

阅读全文
随笔

46. Set 是如何工作的(2)

让我们再次请出 PySetObject 图示: 其中最关键的是: fill:有效元素 + dummy 元素数量,dummy 元素与 Dict 中类似,是删除元素的遗迹。 used: 实际有效元素数量。 Set 采用与 …

阅读全文