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

CPython源码阅读笔记(2)

PyObject CPython 中基本的数据结构是 Object,所有的 Python 对象都可以用 PyObject * 来访问,CPython 中通过 Object 手动实现了对象系统。...CPython 中的对象都需要通过特定的函数来创建,所有对象都需要申请内存来创建在堆中,不允许创建在栈上或者创建为全局变量(例如直接声明 PyIntObject i),因为需要统一使用引用计数来管理内存...中存储普通整数的对象(使用 long 类型存储)。...解释器的基本执行流程,根据之前的知识,代码先会被编译成字节码,然后在核心循环中执行,所以我们调试 CPython 时可以按照如下步骤: 编写想要调试的功能对应的 Python 代码 使用 dis 模块得到源码对应的字节码...PyIntObject 中使用 long 存储对应的整数,使用 sys.maxint 可以得到 PyIntObject 可以存储的数的上限。

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

    CPython 3.11 来了

    当使用 pyperformance 基准套件测量在 Ubuntu Linux 上使用 GCC 编译时, CPython 3.11 平均比 CPython 3.10 快 25% 。...此外还需关注 C 扩展的问题:CPython 与 C 的简单接口是主要优势,而与 C 扩展的不兼容性则是一大槽点。...而 Faster CPython 团队在 CPython 3.11 中所做的优化工作在很大程度上忽略了扩展模块的问题,对此,团队领导者 Shannon 表示,团队正在开辟将低级函数 API 暴露给虚拟机的可能性...(顺便说一下,Shannon 一直对 CPython 是否真的需要引入 JIT 持怀疑态度。)...这个提案和 Faster CPython 团队的工作将以截然不同的方式加速多线程 Python 代码,但两者又可能产生一些冲突,毕竟 Faster CPython 已实施的优化,很大一部分都基于 GIL

    1.5K30

    想学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,现在你可以用.../python.exe -- SCRIPTNAME.py ARGUMENT … … (lldb) run 5、Windows:在Visual Studio中使用调试器(而不是VS代码) ▌https:/

    91210

    开源贡献代码之​探索一下CPython

    探索一下Cython 本篇文章将会围绕最近给Apache提的一个feature为背景,展开讲讲CPython遇到的问题,以及尝试自己从0写一个库出来,代码也已经放星球了,感兴趣的同学可以去下载学习。..._scalar(True) 问题2:定义顺序 当我使用后面创建的_true,每次传递进去的默认值是空,这个比较好理解,因为最后编译好了会翻译为一个xxx.cpp文件,根据C++规则前面读到的自然就是空了...C++写一个类,封装sort和sum,然后使用Python调用。..., 5, 3, 5] f.sort(nums) print("Sorted nums:", nums) print("Sum of nums:", f.sum(nums)) Cython在一些项目中使用挺多的...,学习起来吧~ 运行: ➜ cpython_examples python3 test.py Sorted nums: [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] Sum of

    23710

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

    Python 解释器有多个主要实现版本,其中,CPython 的使用最为广泛。CPython,作为 Python 的官方解释器,是用 C 语言编写的,并在 Python 社区得到了广泛支持和贡献。...除 CPython 外,还有其他解释器实现,如 Jython(Java 实现)、IronPython(.NET 和 Mono 框架实现)和 PyPy(Python 实现,使用了即时编译技术)。...PyPy 之所以比 CPython 更快,主要有以下两个原因: 即时编译(JIT):PyPy 使用了即时编译(Just-In-Time Compilation)技术。...这些结构在底层已经实现好,可以直接使用,无需通过如 list() 这种调用类型对象的方式来创建。 通过 PyObject 的循环双向链表,CPython 可以很方便地管理底层真正分配内存的变量。...因此,通过这种方式,CPython 能够高效地管理我们创建的对象,并自动释放不再使用的对象。 仅依赖引用计数器进行对象的自动销毁存在问题,因为它无法处理容器对象的循环引用(例如列表)。

    1.5K01

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

    CPython 是 Python 社区的标准,其他版本的 Python,比如 pypy,都会遵行 CPython 的标准 API 实现。...想要更深入的认识 Python,就需要了解 CPython 的源码实现。本文将从 CPython 的对象构造器开始入手,带大家揭开 CPython 源码的面纱,带你进入 C + Python 的世界。...比如创建列表:可以使用 list()、也可以使用 [ ];创建元组:可以使用 tuple()、也可以使用 ();创建字典:可以使用 dict()、也可以使用 {}。...本文从 CPython 对象构造器入手,介绍了浮点数对象在 CPython 底层数据结构中的表现形式以及对象创建的过程。...通过进一步了解 CPython 动态性的实现方式,读者可望在阅读 CPython 源码后提升编写高质量代码的能力。

    49010

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

    一、CPython CPython 是 Python 编程语言的官方和最广泛使用的实现。它是用 C 语言编写的,因此得名 “CPython”。...C 扩展:开发者可以使用 C 或 C++ 编写扩展模块,直接与 Python 代码交互。这对于性能关键型任务非常有用。...可使用该模块以纯 Python 形式对这些库进行封装。...【pybind11 — C++ 11 与 Python 之间的无缝操作性】 稳定且成熟:作为最早被开发和使用的 Python 实现,CPython 经过多年迭代,已经非常稳定和成熟。...Python 作为一种面向对象的编程语言,其对象模型是理解和使用这门语言的核心。在 Python 中,几乎所有的东西都是对象,包括数字、字符串、函数等。

    69300

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

    多位 CPython 核心贡献者离开 Faster CPython 团队由 Python 之父 Guido van Rossum 和核心开发者 Mark Shannon、Michael Droettboom...然而就在昨日,CPython 核心开发人员 Brett Cannon 在 LinkedIn 透露,来自 Faster CPython 团队的 3 名核心开发人员都被卷入微软刚刚宣布的全球裁员中,包括 Eric...公开资料显示,Eric Snow 自 2012 年起成为 CPython 核心开发者,2021 年初成为微软 Faster CPython 的成员,专注于提升 Python 的性能。...他提出并推动了全局解释器锁(A Per-Interpreter GIL)的实现,这一工作旨在提高 Python 在多线程环境下的并行性能,使得 Python 3.12 版本能够使用不共享 GIL 的解释器...在此之前,Katriel 在以色列海法的英特尔开发中心工作,为微软编译器团队使用的 Merced 处理器开发性能模拟器;博士毕业后,还从事过 15 年的银行技术工作。

    30410

    这本 CPython 书把内部实现全讲透了!

    这些秘密都藏在 CPython 中! 这是一本怎样的书? Python 之父 Guido van Rossum 推荐、CPython 核心开发者 Carol Willing 作序!...本书从语法解析、编译器等基础概念出发,深入求值循环、内存管理等 CPython 解释器实现细节。轻松!简明!豁然开朗!手把手带你重新编译 CPython,了解 Python 的内部实现。...内文展示 专业推荐 我把这本书推荐给所有想要开始学习 CPython 的人。...——Carol Willing,CPython 核心开发者,CPython 指导委员会成员 这本书将带你探秘 Python 幕后,尽览 CPython 内核奥义,深入了解底层的内存管理、并发和性能调优技巧...——读者B 不要再犹豫了,即刻购买《CPython设计与实现》,让你的 Python 技能上升新高度!

    19400

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

    编译器,首先要认识的就是 CPython—— 它不仅是 Python 官方的参考实现,更是绝大多数开发者日常使用的 “默认编译器”。...高度兼容 CPython:PyPy 几乎支持所有 Python 语法特性,甚至能直接运行大多数基于 CPython 开发的脚本。...数据处理中的循环逻辑; 长时间运行的服务:如爬虫调度器、游戏服务器,JIT 优化的效果会随运行时间累积; 纯 Python 项目:不依赖 C 扩展的代码(PyPy 对 C 扩展的支持有限,可能导致某些库无法使用...使用方式:在 .pyx 文件中编写带类型的代码(如 def add(int a, int b): return a + b),通过 setup.py 编译成 .so(Linux)或 .pyd(Windows...)文件,再用 Python 导入使用。

    13010

    Python解释器种类以及特点

    CPython CPython是Python官方的解释器,使用C语言开发。它是最常用、广泛支持的解释器,也是Python标准库的参考实现。CPython的特点如下: 完全兼容Python语言规范。...以下是使用CPython的代码示例: print("Hello, CPython!") 输出结果如下: Hello, CPython!...与CPython不同,Jython没有全局解释器锁,可以支持多线程并行处理。 以下是使用Jython的代码示例: print("Hello, Jython!")...可以替代CPython,提供更快的执行速度和更低的内存占用。 兼容绝大多数的Python代码和库,但某些CPython特有的功能可能不完全支持。...对于计算密集型任务,PyPy的性能通常比CPython好。 以下是使用PyPy的代码示例: print("Hello, PyPy!") 输出结果如下: Hello, PyPy!

    61300
    领券