组员信息:
230122183 洪宇轩(暑期计划结束,重新开题)
230122185 温志宏
基本目标
在3~16周掌握CPython的基本架构和运行机制,能够理解其源码并具备一定修改或扩展能力。
第3周:Python的高级特性
- 目标:深入理解Python本身的一些高级特性,为后续理解CPython做好准备。
学习内容:
- 复习Python的基本语法和数据结构(列表、字典、元组等)
- 理解Python中的内存管理机制:引用计数、垃圾回收
- 了解Python中的对象模型(
__dict__
、__slots__
) - 学习装饰器、生成器、上下文管理器等高级特性
任务:
- 使用Python实现一个简单的装饰器和生成器
- 阅读Python官方文档中的数据模型章节
第4周:C语言基础学习
- 目标:掌握C语言的基本语法和数据结构,为后续阅读CPython源码做准备。
学习内容:
- C语言基本语法(变量、控制流、函数)
- 指针和内存管理
- 结构体与联合体的使用
- 动态内存分配(
malloc
/free
)
任务:
- 使用C语言编写一些简单的程序:如冒泡排序、链表等
- 理解指针的基本操作和内存管理
第5周:了解CPython的架构
- 目标:对CPython的整体架构有一个宏观的了解,理解其核心模块和执行流程。
学习内容:
- CPython是如何将Python代码解释执行的
- 理解CPython的架构:编译器、解释器、内存管理、垃圾回收等模块
- 熟悉CPython的目录结构与核心文件(如
pythonrun.c
、ceval.c
) - 了解编译和安装CPython的过程
任务:
- 下载并编译CPython源码:CPython官方GitHub
- 找到并理解CPython核心文件中的函数,如
PyObject
结构
第6周:动手搭建CPython开发环境
- 目标:能够在本地成功编译CPython,并开始熟悉其源码。
学习内容:
- 在本地搭建开发环境(Linux/Mac/WSL环境更佳)
- 安装所需的依赖和工具链(如GCC、Make)
- 理解
Makefile
和CPython的编译过程 - 学习如何进行简单的源码修改与重新编译
任务:
- 修改CPython的源码,使其打印出额外的调试信息
- 重新编译并测试修改后的CPython
第7周:字节码与解释器
- 目标:了解Python代码是如何被编译为字节码,并由解释器执行的。
学习内容:
- Python代码的执行过程:从源代码到字节码
- 学习CPython的编译器模块,了解如何将Python源码转换为字节码
- 深入阅读
ceval.c
文件,理解解释器的执行过程 - 理解字节码指令和虚拟机的工作原理
任务:
- 编写一个简单的Python程序并使用
dis
模块查看其字节码 - 阅读并理解CPython解释器的核心执行循环(
PyEval_EvalFrameEx
)
- 编写一个简单的Python程序并使用
第8周:对象模型与内存管理
- 目标:理解CPython中对象的实现和内存管理机制。
学习内容:
- 理解Python对象模型,深入阅读
object.c
和obmalloc.c
- 了解Python中每个对象的内存布局与引用计数
- 垃圾回收机制:标记-清除算法与分代回收
- 研究
PyObject
结构体的实现,理解其对各种Python对象的抽象
- 理解Python对象模型,深入阅读
任务:
- 跟踪某些常用数据结构(如列表、字典)在内存中的分配和释放过程
- 修改CPython源码,打印出每个对象创建和销毁的日志信息
第9周:内建模块与扩展机制
- 目标:理解CPython中的内建模块和如何编写C扩展模块。
学习内容:
- 学习CPython内建模块的实现,了解其与Python语言的交互
- 了解Python的C API,学会如何编写C扩展模块
- 深入理解
import
机制,了解模块的加载过程
任务:
- 阅读一些常见的内建模块(如
math
、sys
)的源码 - 编写一个简单的C扩展模块并在Python中调用
- 阅读一些常见的内建模块(如
第10周:调试与性能分析
- 目标:掌握CPython的调试方法,并了解Python的性能瓶颈。
学习内容:
- 学习如何使用调试器(如
gdb
)调试CPython - 理解如何通过性能分析工具(如
valgrind
、perf
)发现性能瓶颈 - 了解影响Python性能的因素,如全局解释器锁(GIL)
- 学习如何使用调试器(如
任务:
- 使用
gdb
调试CPython源码,分析函数调用栈 - 使用性能分析工具,分析一个Python程序的性能瓶颈
- 使用
第11周:CPython的线程与并发模型
- 目标:理解CPython的并发模型以及全局解释器锁(GIL)的工作机制。
学习内容:
- 研究CPython中的线程模型和线程安全机制
- 深入理解GIL的设计与影响
- 学习CPython中的多线程与多进程模块实现
任务:
- 编写一个简单的Python多线程程序,观察GIL的影响
- 阅读并理解CPython中与线程相关的源码部分
第12周:垃圾回收机制深入研究
- 目标:深入理解CPython的垃圾回收机制,尤其是分代回收机制。
学习内容:
- 了解CPython的垃圾回收算法及其优化策略
- 深入阅读
gcmodule.c
,了解分代垃圾回收器的实现 - 研究如何通过修改垃圾回收参数来优化性能
任务:
- 修改CPython源码中的垃圾回收参数,测试其对性能的影响
- 编写一个Python程序,验证分代垃圾回收机制的效果
第13周:学习Python 3的新特性及其在CPython中的实现
- 目标:了解Python 3.x的新特性是如何在CPython中实现的。
学习内容:
- 阅读Python 3.x中的重要新特性(如类型注解、f-strings、异步IO)的实现
- 理解这些特性在CPython中的实现细节
任务:
- 阅读某个新特性的PEP(Python Enhancement Proposal)
- 在CPython源码中定位并理解相关实现
第14周:探索CPython的优化机制
- 目标:理解CPython中的性能优化技术与JIT的前景。
学习内容:
- 研究CPython中的优化机制,如快速路径优化、对象池等
- 了解字节码优化与编译优化的区别
任务:
- 对比不同Python版本的性能优化,理解其源码差异
第15周:尝试修改和扩展CPython
- 目标:动手修改CPython源码,了解如何做出贡献。
学习内容:
- 按照自己的需求,尝试修改CPython的某个功能
- 学习CPython贡献流程,提交Pull Request
任务:
- 完成一次简单的CPython源码修改并重新编译
- 了解如何通过贡献者渠道提交代码
第16周:总结与进阶方向
- 目标:总结学习成果,规划下一步的学习方向。
任务:
- 总结CPython中的重要模块和机制
- 制定后续进阶学习计划,如参与CPython社区、学习JIT优化等
评论 (0)