-
内容大纲
大模型的出现让AI技术经历了从量变到质变的过程,而Python作为AI首选语言,一直默默推动着AI技术的快速发展。你是否想过,这是为什么呢?答案就藏在CPython中!CPython是用C语言实现的Python解释器,它是Python的官方实现,并且是使用最广泛的Python解释器。其实在谈论Python的时候,99%的情况说的就是CPython!本书共16章,从获取CPython源代码开始,手把手带你重新编译CPython,我们将一起调试代码、升级组件,在这个过程中,你可以详细了解Python各类特性的工作原理,成长为一名更棒的Python程序员。 -
作者介绍
-
目录
第1章 获取CPython源代码
第2章 准备开发环境
2.1 使用IDE或代码编辑器
2.2 安装Visual Studio
2.3 安装Visual Studio Code
2.3.1 安装
2.3.2 本书中的推荐扩展程序
2.3.3 使用高级代码导航和扩展
2.3.4 配置任务和启动文件
2.4 安装JetBrains CLion
2.5 安装Vim
2.6 小结
第3章 编译CPython
3.1 在macOS系统上编译CPython
3.2 在Linux系统上编译CPython
3.3 安装自定义版本
3.4 make快速入门
3.5 CPython的make目标
3.5.1 构建目标
3.5.2 测试目标
3.5.3 清理目标
3.5.4 安装目标
3.5.5 其他目标
3.6 在Windows系统上编译CPython
3.6.1 安装依赖项
3.6.2 从命令行编译
3.6.3 使用Visual Studio编译
3.7 PGO
3.8 小结
第4章 Python语言和语法
4.1 为什么CPython是用C语言而不是Python语言实现的
4.2 Python语言规范
4.2.1 语言说明文档
4.2.2 语法文件
4.3 解析器生成器
4.4 重新生成语法
4.5 小结
第5章 配置和输入
5.1 配置状态
5.1.1 预初始化配置
5.1.2 相关源文件
5.1.3 运行时配置数据结构
5.1.4 通过命令行来设置运行时配置
5.1.5 查看运行时标志
5.2 构建配置
5.3 从输入构建模块
5.3.1 相关的源文件
5.3.2 读取文件和输入
5.3.3 从命令行输入字符串
5.3.4 通过本地模块输入
5.3.5 来自脚本文件或标准输入的输入
5.3.6 从编译好的字节码输入
5.4 小结
第6章 基于语法树的词法分析和语法解析
6.1 具象语法树生成器
6.2 CPython解析器-分词器
6.2.1 相关源文件
6.2.2 从文件向解析器中输入数据
6.2.3 解析器-分词器工作流
6.3 抽象语法树
6.3.1 相关源文件
6.3.2 使用instaviz工具展示抽象语法树
6.3.3 编译抽象语法树
6.4 要记住的术语
6.5 示例:添加一个约等于运算符
6.6 小结
第7章 编译器
7.1 相关源文件
7.2 重要的专业术语
7.3 实例化一个编译器
7.4 未来标志和编译器标志
7.4.1 未来标志
7.4.2 在Python 3.9中引用未来标志
7.4.3 编译器标志
7.5 符号表
7.5.1 相关源文件
7.5.2 符号表数据结构
7.5.3 使用symtable标准库模块
7.5.4 符号表实现
7.6 核心编译过程
7.6.1 从Python访问编译器
7.6.2 编译器C语言API
7.6.3 指令
7.6.4 基础帧块
7.6.5 操作和参数
7.7 汇编
7.7.1 汇编器数据结构
7.7.2 汇编器深度优先搜索算法
7.7.3 汇编器C语言API
7.7.4 深度优先搜索
7.8 创建一个代码对象
7.9 使用instaviz展示代码对象
7.10 示例:实现约等于运算符
7.11 小结
第8章 求值循环
8.1 相关源文件
8.2 重要术语
8.3 构建线程状态
8.3.1 线程状态类型
8.3.2 相关源文件
8.4 构建帧对象
8.4.1 帧对象类型
8.4.2 相关源文件
8.4.3 帧对象初始化API
8.5 帧的执行
8.6 值栈
8.6.1 字节码操作的例子:BINARY_OR
8.6.2 模拟值栈
8.6.3 栈效果
8.7 示例:在列表中添加元素
8.8 小结
第9章 内存管理
9.1 C语言中的内存分配
9.1.1 静态内存分配
9.1.2 自动内存分配
9.1.3 动态内存分配
9.2 Python内存管理系统设计
9.2.1 内存分配域
9.2.2 内存分配器
9.3 CPython内存分配器
9.3.1 相关源文件
9.3.2 重要术语
9.3.3 内存块、内存池和堆区
9.3.4 内存块分配API
9.3.5 使用Python调试API
9.4 对象和PyMem内存分配域
9.5 原始内存分配域
9.6 自定义内存分配器
9.7 自定义的内存分配“消毒剂”
9.7.1 AddressSanitizer
9.7.2 MemorySanitizer
9.7.3 UndefinedBehaviorSanitizer
9.8 PyArena内存堆区
9.9 引用计数
9.9.1 在Python中创建变量
9.9.2 增加引用
9.9.3 减少引用
9.9.4 字节码操作中的引用计数
9.9.5 CPython引用计数的优点
9.10 垃圾回收
9.10.1 相关源文件
9.10.2 垃圾回收器的设计
9.10.3 垃圾回收器管理的容器类型
9.10.4 不可追踪对象与可变性
9.10.5 垃圾回收算法
9.10.6 分代垃圾回收
9.10.7 使用Python的垃圾回收API
9.11 小结
第10章 并行和并发
10.1 并行模型和并发模型
10.2 进程的结构
10.3 多进程并行
10.3.1 在POSIX中fork进程
10.3.2 Windows系统上的多进程
10.3.3 multiprocessing包
10.3.4 相关源文件
10.3.5 spawn进程和fork进程
10.3.6 使用队列和管道交换数据
10.3.7 进程之间的共享状态
10.3.8 示例应用程序
10.3.9 多进程总结
10.4 多线程
10.4.1 全局解释器锁
10.4.2 相关源文件
10.4.3 在Python中启动线程
10.4.4 线程状态
10.4.5 POSIX线程
10.4.6 Windows线程
10.4.7 多线程总结
10.5 异步编程
10.6 生成器
10.6.1 生成器结构
10.6.2 相关源文件
10.6.3 创建生成器
10.6.4 执行生成器
10.7 协程
10.7.1 相关源文件
10.7.2 事件循环
10.7.3 示例
10.8 异步生成器
10.9 子解释器
10.9.1 相关源文件
10.9.2 示例
10.10 小结
第11章 对象和类型
11.1 本章示例
11.2 内置类型
11.3 对象类型和可变长度对象类型
11.4 type类型
11.4.1 类型槽
11.4.2 在C语言中使用类型
11.4.3 类型属性字典
11.5 bool类型和long类型
11.5.1 long类型
11.5.2 示例
11.6 Unicode字符串类型
11.6.1 相关源文件
11.6.2 处理Unicode码点
11.6.3 UTF-8和UTF-
11.6.4 宽字符类型
11.6.5 字节顺序标记
11.6.6 encodings包
11.6.7 编解码器模块
11.6.8 编解码器的实现
11.6.9 内部的编解码器
11.6.10 示例
11.7 字典类型
11.7.1 哈希
11.7.2 相关源文件
11.7.3 字典结构
11.7.4 查找
11.8 小结
第12章 标准库
12.1 Python模块
12.2 Python模块和C语言模块
第13章 测试套件
13.1 在Windows系统上运行测试套件
13.2 在Linux系统或macOS系统上运行测试套件
13.3 测试标志
13.4 运行特定测试
13.5 测试模块
13.6 测试工具
13.7 小结
第14章 调试
14.1 使用崩溃处理程序
14.2 编译调试的支持
14.2.1 Windows系统
14.2.2 macOS系统或Linux系统
14.3 在macOS系统上使用LLDB
14.3.1 创建断点
14.3.2 启动CPython
14.3.3 附加到正在运行的CPython解释器中
14.3.4 处理断点
14.3.5 使用cpython_lldb扩展
14.4 使用GDB
14.4.1 创建断点
14.4.2 启动CPython
14.4.3 附加到正在运行的CPython解释器中
14.4.4 处理断点
14.4.5 使用python-gdb扩展
14.5 使用Visual Studio调试器
14.5.1 添加断点
14.5.2 启动调试器
14.5.3 处理断点
14.6 使用CLion调试器
14.6.1 调试make应用程序
14.6.2 附加调试器
14.6.3 创建断点
14.6.4 处理断点
14.7 小结
第15章 基准测试、性能分析和追踪
15.1 使用timeit进行微基准测试
15.2 使用Python基准测试套件进行
运行时基准测试
15.2.1 执行基准测试
15.2.2 对比基准测试
15.3 使用cProfile分析Python代码
15.4 使用DTrace分析C语言代码
15.4.1 相关源文件
15.4.2 安装DTrace
15.4.3 编译DTrace支持
15.4.4 使用CLion中的DTrace
15.4.5 DTrace示例
15.5 小结
第16章 下一步计划
16.1 为CPython编写C语言扩展模块
16.2 改进Python应用程序
16.3 为CPython项目做贡献
16.3.1 问题分类
16.3.2 创建一个拉取请求来修复问题
16.3.3 其他贡献
16.4 继续学习
附录A 面向Python程序员的C语言
简介
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-
孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-
时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-
本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...