首页
学习
活动
专区
圈层
工具
发布

CPython源码阅读笔记(2)

PyObject CPython 中基本的数据结构是 Object,所有的 Python 对象都可以用 PyObject * 来访问,CPython 中通过 Object 手动实现了对象系统。...CPython 中的对象都需要通过特定的函数来创建,所有对象都需要申请内存来创建在堆中,不允许创建在栈上或者创建为全局变量(例如直接声明 PyIntObject i),因为需要统一使用引用计数来管理内存...解释器的基本执行流程,根据之前的知识,代码先会被编译成字节码,然后在核心循环中执行,所以我们调试 CPython 时可以按照如下步骤: 编写想要调试的功能对应的 Python 代码 使用 dis 模块得到源码对应的字节码...的核心循环中找到字节码对应的 TARGET,下断点 先看一下两个 PyIntObject 如何相加, 创建 test.py 文件写入以下内容: # test.py a=1 b=2 c=a+b 调用反编译模块...可以看到,反编译出的字节码中,先通过 LOAD_NAME 将两个变量压栈,所以 BINARY_ADD 先从栈中 POP 出这两个变量,PyInt_AS_LONG 宏是从 PyIntObject 中取对应的

1.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CPython 3.11 来了

    当使用 pyperformance 基准套件测量在 Ubuntu Linux 上使用 GCC 编译时, CPython 3.11 平均比 CPython 3.10 快 25% 。...而 Faster CPython 团队在 CPython 3.11 中所做的优化工作在很大程度上忽略了扩展模块的问题,对此,团队领导者 Shannon 表示,团队正在开辟将低级函数 API 暴露给虚拟机的可能性...至于饱受期待的 JIT 编译器,Shannon 表示实现 JIT 的第一步是实现一个跟踪解释器,但目前还有太多需要关注的项目,引入 JIT 编译器的工作还有一段路要走,“最早可能要到 3.13 才能到达...(顺便说一下,Shannon 一直对 CPython 是否真的需要引入 JIT 持怀疑态度。)...这个提案和 Faster CPython 团队的工作将以截然不同的方式加速多线程 Python 代码,但两者又可能产生一些冲突,毕竟 Faster CPython 已实施的优化,很大一部分都基于 GIL

    1.7K30

    想学CPython,Python之父Guido亲上阵

    就在刚刚(2020年2月10日),Python之父Guido van Rossum在其个人Blog中发布了他对CPython学习的帮助教程。下面让我们一睹为快吧! ? 1 你需要了解的!...2 入门文档 ▌核心教程,先从这里开始: ▌https://cpython-core-tutorial.readthedocs.io/en/latest/ ?...4 Workflow ▌Git设置 1、如果你还没有GitHub账号,请登录GitHub.com 2、在GitHub上调用Python/CPython repo,点击Fork按钮(右上角): ?...3、在本地克隆你的fork: `git clone git@github.com:YOURUSERNAME/cpython.git` `cd cpython` 4、配置upstream remote,现在你可以用...“git push”和“git pull”来push/pull你的fork: git remote add upstream https://github.com/python/cpython/ 5、创建一个分支工作

    97310

    5倍提升,加速CPython!Quant如何看?

    今天既有正经推文,也有量化八卦~ 去年11月,Python 之父Guido van Rossum宣布了他已经加入微软的消息: 在微软的日子里,他获得了选择项目的自由,并决定让CPython变得更快。...Guido van Rossum、Mark Shannon(加速计划的提出者,精通 Python 性能研究)、Eric Snow(Python 核心开发者之一、微软高级工程师)等多人组成的小团队来加速CPython...加速CPython! 在今年2021 Python语言峰会上,Guido Van Rossum在表示:他打算在2022年10月发布3.11版本时将快CPython的速度提高1倍。...在接下来的四年里,他的目标是将CPython的速度提高到原来的5倍。 相关阅读 最新!...想学CPython,Python之父Guido亲上阵 整个计划被称为“香农计划”(即“Shannon Plan”,得名于提出者),期望花 4 年时间把 Python 提速 5 倍,即每年 1.5 倍。

    1.5K10

    一文读懂 Python 编译器生态:从 CPython 到 PyPy,解锁代码运行的核心动力

    今天,我们就来系统盘点 Python 生态中的主流编译器,解析它们的工作原理、特性和适用场景,帮你找到最适合自己项目的工具 一、Python 编译器的 “官方标配”:CPython 提到 Python...编译器,首先要认识的就是 CPython—— 它不仅是 Python 官方的参考实现,更是绝大多数开发者日常使用的 “默认编译器”。...核心特性: “半编译半解释” 的独特模式:CPython 会先将 .py 源代码编译成字节码(.pyc 文件),再由 Python 解释器执行字节码。...Python 语法的 “最终解释者”:所有 Python 新特性(如类型注解、模式匹配、异步语法)都会先在 CPython 中实现,其他编译器往往以 CPython 的行为作为兼容标准。...核心特性: JIT 编译的 “黑科技”:与 CPython 逐行解释字节码不同,PyPy 会在代码运行过程中,对 “热点代码”(频繁执行的函数或循环)进行动态编译,直接转换成机器码执行。

    78410

    《PyPy超越CPython的核心技术架构解析》

    开发者在初次接触PyPy时,往往会通过典型的迭代计算场景验证其性能优势,比如处理百万级数据的遍历与转换任务,CPython的执行时间会随着数据量的增长呈现明显的线性上升趋势,而PyPy则会因为编译优化的加持...,出现非线性的性能跃升,部分场景下的执行效率甚至能逼近静态编译语言的水准,这种无需开发者手动修改代码的性能跃迁,恰恰印证了PyPy超越CPython的核心逻辑—不是以牺牲Python的动态特性为代价换取速度...PyPy的自适应编译策略,凭借其精准的运行时监控与动态优化能力,让其在不同场景下都能精准命中性能痛点,这是CPython的固定执行模式无法企及的核心优势。...此外,PyPy还引入了编译缓存机制,将生成的优化机器码进行缓存,避免相同代码片段的重复编译,进一步提升执行效率,开发者在调整编译参数的过程中,能够发现不同的触发阈值会对性能产生显著影响,比如将代码的编译触发次数从默认值调整为更高的数值...,远超CPython的传统C扩展方式。

    9100

    浅析 Python 的一些底层原理与 CPython

    除 CPython 外,还有其他解释器实现,如 Jython(Java 实现)、IronPython(.NET 和 Mono 框架实现)和 PyPy(Python 实现,使用了即时编译技术)。...PyPy 之所以比 CPython 更快,主要有以下两个原因: 即时编译(JIT):PyPy 使用了即时编译(Just-In-Time Compilation)技术。...这种技术允许 PyPy 在执行程序前先将部分代码编译成机器码,而不是像 CPython 那样逐行解释执行。...这种方法结合了提前编译和解释的优点,既提高了性能,又保持了解释型语言的灵活性和跨平台可用性。...对于 C 语言,由于类型已经预先定义,a + b 在编译后就变成了一条简单的机器指令。因此,Python 和 C 语言在效率上存在显著差异。

    1.9K01

    Python源码剖析:深度探索Cpython对象-达观数据

    想要更深入的认识 Python,就需要了解 CPython 的源码实现。本文将从 CPython 的对象构造器开始入手,带大家揭开 CPython 源码的面纱,带你进入 C + Python 的世界。...CPython我们可以从下文的 GitHub 地址下载各版本的 CPython 源代码(本文内容以 Python 3.11 为例),其目录结构如下:接下来,我们将从源代码编译 CPython。...此步骤需要 C 编译器和一些构建工具。不同的系统编译方法也不同,这里我用的是 mac 系统。.../configure步骤用来自动化构建过程,CPPFLAGS 是 c 和 c++ 编译器的选项,这里指定了 zlib 头文件的位置,LDFLAGS 是 gcc 等编译器会用到的一些优化参数,这里是指定了...每次改动源代码,都需要重新运行 make 进行编译。

    60910

    深入Python胶水语言的本质:从CPython到各类扩展机制

    CPython:Python的默认实现当我们谈论Python时,实际上通常指的是CPython,即用C语言实现的Python解释器。这是Python的参考实现,也是最广泛使用的Python解释器。...CPython的基本架构CPython主要包含以下几个部分:Python解释器核心内存管理系统Python对象系统Python/C API当我们执行一个Python程序时,大致流程是:source code...CPython的工作机制。...CPython的编译和执行过程当我们运行一个Python程序时,实际发生了这些步骤:词法分析:def add(a, b): return a + b这段代码首先被分解成一系列标记(tokens):...检查错误result = lib.add(1, 2)动态查找开销:ctypes需要在运行时动态查找符号,这比编译时链接慢。

    86200

    了解 Python 底层的解释器 CPython 和 Python 的对象模型

    一、CPython CPython 是 Python 编程语言的官方和最广泛使用的实现。它是用 C 语言编写的,因此得名 “CPython”。...如何工作 源码解析:当你运行一个 Python 程序时,CPython 首先将 Python 代码(源码)解析成一种称为抽象语法树(AST)的内部表示。 编译:接着,AST 被编译成字节码。...主要特性和优势 广泛兼容性:作为 Python 的默认实现,几乎所有的第三方库都首先确保它们在 CPython 上能够正常工作。...社区支持:CPython 拥有庞大而活跃的开发者社区,这意味着任何 bug 快速修复和新功能的迭代速度都比较快。...对于那些追求程序极致性能、或需要与其他语言混合编程环境工作的高级用户来说,则可能需要更深入地掌握 CPython 相关知识。

    98800

    微软裁撤 Python 之父的嫡系核心团队,CPython 团队没了

    多位 CPython 核心贡献者离开 Faster CPython 团队由 Python 之父 Guido van Rossum 和核心开发者 Mark Shannon、Michael Droettboom...自成立起,Faster CPython 团队推动了过去几个 Python 版本中大部分性能改进,包括专用解释器、JIT 编译器、垃圾回收机制(GC)优化、栈引用(stackrefs)等。...然而就在昨日,CPython 核心开发人员 Brett Cannon 在 LinkedIn 透露,来自 Faster CPython 团队的 3 名核心开发人员都被卷入微软刚刚宣布的全球裁员中,包括 Eric...公开资料显示,Eric Snow 自 2012 年起成为 CPython 核心开发者,2021 年初成为微软 Faster CPython 的成员,专注于提升 Python 的性能。...在此之前,Katriel 在以色列海法的英特尔开发中心工作,为微软编译器团队使用的 Merced 处理器开发性能模拟器;博士毕业后,还从事过 15 年的银行技术工作。

    41610

    各种 Python 实现的简单介绍与比较

    CPython CPython是标准Python,也是其他Python编译器的参考实现。通常提到“Python”一词,都是指CPython。...CPython由C编写,将Python源码编译成CPython字节码,由虚拟机解释执行。没有用到JIT等技术,垃圾回收方面采用的是引用计数。...所以当有人问道Python是解释执行还是编译执行,可以这样回答:Python(CPython)将Python源码编译成CPython字节码,再由虚拟机解释执行这些字节码。...想对于CPython,PyPy的性能提升非常明显,但对第三方模块的支持真心是弱爆了。比如无法很好的支持使用CPython的C API编写的扩展,完全不支持使用SWIG、SIP等工具编写的扩展。...Pyston使用类似JavaScript V8那样的多层编译,其中也用到了LLVM来优化代码。Pyston正在发展中,还不成熟。

    1.3K50

    Python有哪些实现方式你知道吗?

    CPython CPython是标准Python,也是其他Python编译器的参考实现。通常提到“Python”一词,都是指CPython。...CPython由C编写,将Python源码编译成CPython字节码,由虚拟机解释执行。没有用到JIT等技术,垃圾回收方面采用的是引用计数。...所以当有人问道Python是解释执行还是编译执行,可以这样回答:Python(CPython)将Python源码编译成CPython字节码,再由虚拟机解释执行这些字节码。...想对于CPython,PyPy的性能提升非常明显,但对第三方模块的支持真心是弱爆了。比如无法很好的支持使用CPython的C API编写的扩展,完全不支持使用SWIG、SIP等工具编写的扩展。...Pyston使用类似JavaScript V8那样的多层编译,其中也用到了LLVM来优化代码。Pyston正在发展中,还不成熟。

    1.4K20
    领券