55. VM 是如何执行 ByteCode 的?(2)
终于,我们进入了 PyEval EvalFrameDefault 函数,这是 Python VM 最核心部分,在这里我们将于 VM 的执行零距离接触。 opcode 和 opargs ByteCode 的最小单元是 …
阅读全文终于,我们进入了 PyEval EvalFrameDefault 函数,这是 Python VM 最核心部分,在这里我们将于 VM 的执行零距离接触。 opcode 和 opargs ByteCode 的最小单元是 …
阅读全文现在我们已经深入到 ByteCode 在 Python 的中表示:PyCodeObject,是的,Python 自身的字节码也是对象。PyCodeObject 中提供了运行 Python 程序所需要的一切信息,最终由 …
阅读全文字节码 (ByteCode) 是一组精心构建的二进制表示,其中主要包含两种信息: 执行什么操作; 操作的参数; 除此之外 Python 中的各种常量、名称、变量也在字节码中。 Python 的面向对象非常彻底,字节码的管 …
阅读全文上一节我们说到, .py 源码先后转换为 AST、ByteCode,最终到了 VM 这里付诸执行。有的朋友认为字节码的存在,是一种加速优化技术,某种程度上这样说是合理的,但这并不意味着 VM 可以同时支持 Python …
阅读全文对于 Python 是一门优雅的语言,这一点应该不会有太多人反对,随着我们对 CPython 实现的研究,不得不说 Python 的优雅一直渗透到它的底层,在 Python 的 C 实现这一层,几乎全部以 Python …
阅读全文最近在研究 CPython,深入到 Python VM 需要大量借助 GDB 调试,但是问题在于,Python 的底层实现中,大量使用了 Python C API 和各种 Object,如果试图通过 GDB 指令查看 …
阅读全文有关 iterable 和 iterator 的定义介绍已经很多了: 实现 iter 或者 getitem 方法的对象是 iterable 对象; 实现 iter 和 next 方法的对象是 iterator 对象; 那 …
阅读全文Set 的意思是集合,在 Python 的实现中,Set 的 Key 与 Dict 的 Key 相似性相当高,也难怪一些作者认为 “Set 是 value 为空的特殊 Dict”。前面两节已经说明了 Set 元素的添加、 …
阅读全文Set 是无序容器,它的插入顺序与迭代(或者 print)输出的顺序不保证与插入顺序一致,与 Dict 类似的问题,Set 的输出顺序是如何决定的呢? 首先我们从 Set 的输出开始寻找蛛丝马迹,在 Dict 的研究中, …
阅读全文让我们再次请出 PySetObject 图示: 其中最关键的是: fill:有效元素 + dummy 元素数量,dummy 元素与 Dict 中类似,是删除元素的遗迹。 used: 实际有效元素数量。 Set 采用与 …
阅读全文