信息学科竞赛教育训练计划——CPython初探
侧边栏壁纸
  • 累计撰写 8 篇文章
  • 累计收到 35 条评论

信息学科竞赛教育训练计划——CPython初探

hongyuxuan
2024-09-22 / 0 评论 / 24 阅读 / 正在检测是否收录...

组员信息:

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.cceval.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

第8周:对象模型与内存管理

  • 目标:理解CPython中对象的实现和内存管理机制。
  • 学习内容

    • 理解Python对象模型,深入阅读object.cobmalloc.c
    • 了解Python中每个对象的内存布局与引用计数
    • 垃圾回收机制:标记-清除算法与分代回收
    • 研究PyObject结构体的实现,理解其对各种Python对象的抽象
  • 任务

    • 跟踪某些常用数据结构(如列表、字典)在内存中的分配和释放过程
    • 修改CPython源码,打印出每个对象创建和销毁的日志信息

第9周:内建模块与扩展机制

  • 目标:理解CPython中的内建模块和如何编写C扩展模块。
  • 学习内容

    • 学习CPython内建模块的实现,了解其与Python语言的交互
    • 了解Python的C API,学会如何编写C扩展模块
    • 深入理解import机制,了解模块的加载过程
  • 任务

    • 阅读一些常见的内建模块(如mathsys)的源码
    • 编写一个简单的C扩展模块并在Python中调用

第10周:调试与性能分析

  • 目标:掌握CPython的调试方法,并了解Python的性能瓶颈。
  • 学习内容

    • 学习如何使用调试器(如gdb)调试CPython
    • 理解如何通过性能分析工具(如valgrindperf)发现性能瓶颈
    • 了解影响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

评论 (0)

取消