Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wp-statistics domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /data/wwwroot/wordpress/wp-includes/functions.php on line 6114

Notice: 函数 _load_textdomain_just_in_time 的调用方法不正确twentyfifteen 域的翻译加载触发过早。这通常表示插件或主题中的某些代码运行过早。翻译应在 init 操作或之后加载。 请查阅调试 WordPress来获取更多信息。 (这个消息是在 6.7.0 版本添加的。) in /data/wwwroot/wordpress/wp-includes/functions.php on line 6114
CPython源码解读 – 地图之外

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 二进制可执行文件的源码。