CPython源码解读——前言

开一个大大的坑,不知道能不能写完。加油!

文章结构

本文主要分为以下几个部分

  • 一、基础知识介绍
  • 二、Python对象实现
  • 三、Python虚拟机
  • 四、Pyhton标准库的实现

其中基础知识介绍中主要介绍与C相关的前置基础知识,以及Python的基础知识。该部分均为零散的知识点,阅读后面部分时有看不懂的地方可以在该部分查找。

Python对象实现:在 Python 的世界一切皆对象,不论是整数,还是字符串,甚至连类型、函数等都是一种对象。这一节从源码的角度,介绍这些对象的实现原理。

Python虚拟机 在介绍完对象的实现原理后,介绍Python如何解释你的Py文件中的代码。该部分将包括虚拟机的编译处理,内存管理,线程管理等部分。

Pyhton标准库的实现 包含了所有用 C 语言编写的模块,比如 math、hashlib 等。它们都是那些对速度要求非常严格的模块。也包括Lib 目录下则是存放一些对速度没有太严格要求的模块,比如 os。

当然,整个文章还包括这篇前言。前言介绍了文章结构和一些开始前的准备工作。读者可以跟着我一起做好准备工作,这样我们可以一起读源码了。

对了,本文基于的系统环境时Window 10。部分内容与Linux会稍有区别

本文阅读需要以下前置知识:

  • 【了解】编译原理,计算机组织原理
  • 【熟悉】C语言,操作系统
  • 【掌握】Python语法

下载CPython源码

https://github.com/python/cpython

源码里有什么

cpython/
│
├── Doc      ← 源代码文档说明
├── Grammar  ← 计算机可读的语言定义
├── Include  ← C 语言头文件(头文件中一般放一些重复使用的代码)
├── Lib      ← Python 写的标准库文件
├── Mac      ← Mac 支持的文件
├── Misc     ← 杂项
├── Modules  ← C 写的标准库文件
├── Objects  ← 核心类型和对象模块
├── Parser   ← Python 解析器源码
├── PC       ← Windows 编译支持的文件
├── PCbuild  ← 老版本的 Windows 系统 编译支持的文件
├── Programs ← Python 可执行文件和其他二进制文件的源代码
├── Python   ← CPython  解析器源码
└── Tools    ← 用于构建或扩展 Python 的独立工具

其中:

  • Include 目录:包含了 Python 提供的所有头文件,如果用户需要自己用 C 或 C++来编写自定义模块扩展 Python,那么就需要用到这里提供的头文件。
  • Lib 目录:包含了 Python 自带的所有标准库,且都是用 Python 语言编写的。
  • Modules 目录:包含了所有用 C 语言编写的模块,比如 math、hashlib 等。它们都是那些对速度要求非常严格的模块。而相比而言,Lib 目录下则是存放一些对速度没有太严格要求的模块,比如 os。
  • Parser 目录:包含了 Python 解释器中的 Scanner 和 Parser 部分,即对 Python 源代码进行词法分析和语法分析的部分。除此以外,此目录还包含了一些有用的工具,这些工具能够根据 Python 语言的语法自动生成 Python 语言的词法和语法分析器,与 YACC 非常类似。
  • Objects 目录:包含了所有 Python 的内建对象,包括整数、list、dict 等。同时,该目录还包括了 Python 在运行时需要的所有的内部使用对象的实现。
  • Python 目录:包含了 Python 解释器中的 Compiler 和执行引擎部分,是 Python 运行的核心所在。
  • PCbuild 目录:包含了 Visual Studio 2003 的工程文件,研究 Python 源代码就从这里开始(本文采用 Visual Studio 2017 对 Python 进行编译)。
  • Programs 目录:包含了 Python 二进制可执行文件的源码。

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHAis initialing...