CPython設計與實現 CPython Internals: Your Guide to the Python 3 Interpreter
[英]安東尼·肖(Anthony Shaw)
- 出版商: 人民郵電
- 出版日期: 2024-10-01
- 售價: $599
- 貴賓價: 9.5 折 $569
- 語言: 簡體中文
- 頁數: 260
- 裝訂: 平裝
- ISBN: 7115645264
- ISBN-13: 9787115645265
- 此書翻譯自: CPython Internals: Your Guide to the Python 3 Interpreter (Paperback)
立即出貨 (庫存=1)
買這商品的人也買了...
-
$446PCI Express 體系結構導讀
-
$228$217 -
$408深入淺出 MFC, 2/e
-
$790$616 -
$948$901 -
$301MicroPython 入門指南
-
$299$284 -
$1,200$1,020 -
$354$336 -
$580$493 -
$556MySQL 是怎樣運行的 -- 從根兒上理解 MySQL
-
$359$341 -
$890$587 -
$520文件系統技術內幕:大數據時代海量數據存儲之道
-
$599$569 -
$2,146Introduction to Algorithms, 4/e (Hardcover)
-
$580$435 -
$534$507 -
$1,980$1,881 -
$556containerd 原理剖析與實戰
-
$474$450 -
$630$498 -
$774$735 -
$407C++ 設計模式
-
$654$621
相關主題
商品描述
大模型的出現讓 AI 技術經歷了從量變到質變的過程,而 Python 作為 AI 首選語言,一直默默推動著 AI 技術的快速發展。你是否想過,這是為什麽呢?答案就藏在 CPython 中! CPython 是用 C 語言實現的 Python 解釋器,它是 Python 的官方實現,並且是使用最廣泛的 Python 解釋器。其實在談論 Python 的時候,99% 的情況說的就是 CPython!本書共 16 章,從獲取 CPython 源代碼開始,手把手帶你重新編譯
CPython,我們將一起調試代碼、升級組件,在這個過程中,你可以詳細瞭解 Python 各類特性的工作原理,成長為一名更棒的Python 程序員。
作者簡介
安東尼 · 肖(Anthony Shaw),CPython 項目貢獻者,Apache 軟件基金會成員。安東尼是一個狂熱的 Python 愛好者,擅長理解覆雜的系統,然後簡化它們,並教給其他人。
譯者介紹:
史海,Python 語言組成員,CPython Top100 貢獻者,原 OpenStack 社區核心開發者,原華為雲計算編程語言 Lab 負責人,目前負責華為雲計算 IAAS 軟件工程能力建設和優化。
趙羽,華為雲計算編程語言 Lab 核心成員,華為公司 Python 編程語言生態建設及開源管理負責人。長期從事 Python 虛擬機的開發及研究工作。
陳嘯,華為軟件開發工程師。
李俊辰,擁有多年編譯器開發經驗。
目錄大綱
第 1章 獲取 CPython 源代碼 1
第 2章 準備開發環境 3
2.1 使用 IDE或代碼編輯器 3
2.2 安裝 Visual Studio 4
2.3 安裝 Visual Studio Code 6
2.3.1 安裝 6
2.3.2 本書中的推薦擴展程序 6
2.3.3 使用高級代碼導航和擴展 7
2.3.4 配置任務和啟動文件 8
2.4 安裝 JetBrains CLion 9
2.5 安裝 Vim 12
2.6 小結 15
第3章 編譯 CPython 16
3.1 在 macOS 系統上編譯 CPython 16
3.2 在 Linux 系統上編譯 CPython 18
3.3 安裝自定義版本 19
3.4 make 快速入門 20
3.5 CPython 的 make 目標 21
3.5.1 構建目標 21
3.5.2 測試目標 21
3.5.3 清理目標 22
3.5.4 安裝目標 22
3.5.5 其他目標 23
3.6 在 Windows 系統上編譯 CPython 23
3.6.1 安裝依賴項 24
3.6.2 從命令行編譯 24
3.6.3 使用 Visual Studio 編譯 25
3.7 PGO 28
3.8 小結 29
第4章 Python 語言和語法 30
4.1 為什麽 CPython 是用 C 語言
而不是 Python 語言實現的 30
4.2 Python 語言規範 32
4.2.1 語言說明文檔 32
4.2.2 語法文件 33
4.3 解析器生成器 35
4.4 重新生成語法 36
4.5 小結 39
第5章 配置和輸入 41
5.1 配置狀態 42
5.1.1 預初始化配置 43
5.1.2 相關源文件 43
5.1.3 運行時配置數據結構 44
5.1.4 通過命令行來設置運行時
配置 44
5.1.5 查看運行時標志 45
5.2 構建配置 45
5.3 從輸入構建模塊 46
5.3.1 相關的源文件 46
5.3.2 讀取文件和輸入 47
5.3.3 從命令行輸入字符串 47
5.3.4 通過本地模塊輸入 48
5.3.5 來自腳本文件或標準輸入的輸入 49
5.3.6 從編譯好的字節碼輸入 49
5.4 小結 50
第6章 基於語法樹的詞法分析和
語法解析 51
6.1 具象語法樹生成器 52
6.2 CPython 解析器-分詞器 54
6.2.1 相關源文件 54
6.2.2 從文件向解析器中輸入數據 54
6.2.3 解析器-分詞器工作流 55
6.3 抽象語法樹 58
6.3.1 相關源文件 59
6.3.2 使用 instaviz 工具展示
抽象語法樹 59
6.3.3 編譯抽象語法樹 62
6.4 要記住的術語 65
6.5 示例:添加一個約等於運算符 65
6.6 小結 69
第7章 編譯器 70
7.1 相關源文件 71
7.2 重要的專業術語 71
7.3 實例化一個編譯器 72
7.4 未來標志和編譯器標志 73
7.4.1 未來標志 73
7.4.2 在 Python 3.9 中引用未來
標志 73
7.4.3 編譯器標志 74
7.5 符號表 74
7.5.1 相關源文件 74
7.5.2 符號表數據結構 75
7.5.3 使用 symtable 標準庫模塊 75
7.5.4 符號表實現 77
7.6 核心編譯過程 79
7.6.1 從 Python 訪問編譯器 79
7.6.2 編譯器 C 語言API 80
7.6.3 指令 82
7.6.4 基礎幀塊 83
7.6.5 操作和參數 83
7.7 匯編 84
7.7.1 匯編器數據結構 84
7.7.2 匯編器深度優先搜索算法 84
7.7.3 匯編器 C 語言API 85
7.7.4 深度優先搜索 86
7.8 創建一個代碼對象 87
7.9 使用 instaviz 展示代碼對象 88
7.10 示例:實現約等於運算符 89
7.11 小結 94
第8章 求值循環 95
8.1 相關源文件 96
8.2 重要術語 96
8.3 構建線程狀態 96
8.3.1 線程狀態類型 96
8.3.2 相關源文件 97
8.4 構建幀對象 97
8.4.1 幀對象類型 97
8.4.2 相關源文件 98
8.4.3 幀對象初始化 API 98
8.5 幀的執行 102
8.6 值棧 105
8.6.1 字節碼操作的例子:BINARY_OR 105
8.6.2 模擬值棧 106
8.6.3 棧效果 109
8.7 示例:在列表中添加元素 109
8.8 小結 112
第9章 內存管理 114
9.1 C 語言中的內存分配 114
9.1.1 靜態內存分配 115
9.1.2 自動內存分配 115
9.1.3 動態內存分配 116
9.2 Python 內存管理系統設計 117
9.2.1 內存分配域 117
9.2.2 內存分配器 118
9.3 CPython 內存分配器 118
9.3.1 相關源文件 120
9.3.2 重要術語 120
9.3.3 內存塊、內存池和堆區 120
9.3.4 內存塊分配 API 125
9.3.5 使用 Python調試API 126
9.4 對象和 PyMem 內存分配域 126
9.5 原始內存分配域 129
9.6 自定義內存分配器 129
9.7 自定義的內存分配“消毒劑” 130
9.7.1 AddressSanitizer 130
9.7.2 MemorySanitizer 131
9.7.3 UndefinedBehaviorSanitizer 131
9.8 PyArena 內存堆區 132
9.9 引用計數 133
9.9.1 在 Python 中創建變量 133
9.9.2 增加引用 133
9.9.3 減少引用 134
9.9.4 字節碼操作中的引用計數 135
9.9.5 CPython 引用計數的優點 137
9.10 垃圾回收 137
9.10.1 相關源文件 138
9.10.2 垃圾回收器的設計 138
9.10.3 垃圾回收器管理的容器
類型 139
9.10.4 不可追蹤對象與可變性 140
9.10.5 垃圾回收算法 140
9.10.6 分代垃圾回收 143
9.10.7 使用 Python 的垃圾回收
API 144
9.11 小結 145
第 10章 並行和並發 146
10.1 並行模型和並發模型 147
10.2 進程的結構 148
10.3 多進程並行 149
10.3.1 在 POSIX 中fork 進程 149
10.3.2 Windows 系統上的
多進程 152
10.3.3 multiprocessing 包 152
10.3.4 相關源文件 152
10.3.5 spawn 進程和 fork 進程 152
10.3.6 使用隊列和管道交換
數據 158
10.3.7 進程之間的共享狀態 165
10.3.8 示例應用程序 165
10.3.9 多進程總結 167
10.4 多線程 167
10.4.1 全局解釋器鎖 168
10.4.2 相關源文件 169
10.4.3 在 Python 中啟動線程 169
10.4.4 線程狀態 172
10.4.5 POSIX 線程 176
10.4.6 Windows 線程 176
10.4.7 多線程總結 177
10.5 異步編程 177
10.6 生成器 177
10.6.1 生成器結構 178
10.6.2 相關源文件 179
10.6.3 創建生成器 179
10.6.4 執行生成器 181
10.7 協程 182
10.7.1 相關源文件 184
10.7.2 事件循環 184
10.7.3 示例 185
10.8 異步生成器 186
10.9 子解釋器 187
10.9.1 相關源文件 189
10.9.2 示例 189
10.10 小結 190
第 11章 對象和類型 191
11.1 本章示例 192
11.2 內置類型 192
11.3 對象類型和可變長度對象類型 193
11.4 type類型 194
11.4.1 類型槽 195
11.4.2 在 C 語言中使用類型 196
11.4.3 類型屬性字典 196
11.5 bool 類型和 long 類型 197
11.5.1 long類型 198
11.5.2 示例 199
11.6 Unicode 字符串類型 200
11.6.1 相關源文件 201
11.6.2 處理 Unicode 碼點 202
11.6.3 UTF-8和UTF-16 202
11.6.4 寬字符類型 203
11.6.5 字節順序標記 204
11.6.6 encodings 包 204
11.6.7 編解碼器模塊 205
11.6.8 編解碼器的實現 205
11.6.9 內部的編解碼器 206
11.6.10 示例 207
11.7 字典類型 208
11.7.1 哈希 208
11.7.2 相關源文件 210
11.7.3 字典結構 210
11.7.4 查找 211
11.8 小結 212
第 12章 標準庫 213
12.1 Python 模塊 213
12.2 Python 模塊和 C 語言模塊 214
第 13章 測試套件 217
13.1 在 Windows 系統上運行測試
套件 217
13.2 在 Linux 系統或 macOS 系統上
運行測試套件 217
13.3 測試標志 218
13.4 運行特定測試 218
13.5 測試模塊 220
13.6 測試工具 220
13.7 小結 221
第 14章 調試 222
14.1 使用崩潰處理程序 222
14.2 編譯調試的支持 223
14.2.1 Windows系統 223
14.2.2 macOS 系統或 Linux
系統 223
14.3 在 macOS 系統上使用LLDB 223
14.3.1 創建斷點 224
14.3.2 啟動 CPython 224
14.3.3 附加到正在運行的 CPython 解釋器中 224
14.3.4 處理斷點 225
14.3.5 使用 cpython_lldb 擴展 226
14.4 使用 GDB 227
14.4.1 創建斷點 227
14.4.2 啟動 CPython 227
14.4.3 附加到正在運行的 CPython 解釋器中 227
14.4.4 處理斷點 228
14.4.5 使用 python-gdb 擴展 228
14.5 使用 Visual Studio 調試器 228
14.5.1 添加斷點 229
14.5.2 啟動調試器 229
14.5.3 處理斷點 230
14.6 使用 CLion 調試器 231
14.6.1 調試 make 應用程序 232
14.6.2 附加調試器 232
14.6.3 創建斷點 232
14.6.4 處理斷點 234
14.7 小結 235
第 15章 基準測試、性能分析和追蹤 236
15.1 使用 timeit 進行微基準測試 237
15.2 使用 Python 基準測試套件進行
運行時基準測試 238
15.2.1 執行基準測試 240
15.2.2 對比基準測試 240
15.3 使用 cProfile 分析 Python 代碼 242
15.4 使用 DTrace 分析 C 語言代碼 245
15.4.1 相關源文件 245
15.4.2 安裝 DTrace 246
15.4.3 編譯 DTrace 支持 246
15.4.4 使用 CLion 中的 DTrace 246
15.4.5 DTrace 示例 247
15.5 小結 248
第 16章 下一步計劃 249
16.1 為 CPython 編寫 C 語言擴展
模塊 249
16.2 改進 Python 應用程序 249
16.3 為 CPython 項目做貢獻 250
16.3.1 問題分類 250
16.3.2 創建一個拉取請求來修復問題 251
16.3.3 其他貢獻 252
16.4 繼續學習 252
附錄A 面向Python程序員的 C 語言
簡介 253