注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計CPython設(shè)計與實現(xiàn)

CPython設(shè)計與實現(xiàn)

CPython設(shè)計與實現(xiàn)

定 價:¥99.80

作 者: [英]安東尼·肖(Anthony Shaw)
出版社: 人民郵電出版社
叢編項:
標 簽: 暫缺

購買這本書可以去


ISBN: 9787115645265 出版時間: 2024-06-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字數(shù):  

內(nèi)容簡介

  大模型的出現(xiàn)讓 AI 技術(shù)經(jīng)歷了從量變到質(zhì)變的過程,而 Python 作為 AI 首選語言,一直默默推動著 AI 技術(shù)的快速發(fā)展。你是否想過,這是為什么呢?答案就藏在 CPython 中! CPython 是用 C 語言實現(xiàn)的 Python 解釋器,它是 Python 的官方實現(xiàn),并且是使用最廣泛的 Python 解釋器。其實在談?wù)?Python 的時候,99% 的情況說的就是 CPython!本書共 16 章,從獲取 CPython 源代碼開始,手把手帶你重新編譯CPython,我們將一起調(diào)試代碼、升級組件,在這個過程中,你可以詳細了解 Python 各類特性的工作原理,成長為一名更棒的Python 程序員。

作者簡介

  安東尼 · 肖(Anthony Shaw),CPython 項目貢獻者,Apache 軟件基金會成員。安東尼是一個狂熱的 Python 愛好者,擅長理解復雜的系統(tǒng),然后簡化它們,并教給其他人。 譯者介紹: 史海,Python 語言組成員,CPython Top100 貢獻者,原 OpenStack 社區(qū)核心開發(fā)者,原華為云計算編程語言 Lab 負責人,目前負責華為云計算 IAAS 軟件工程能力建設(shè)和優(yōu)化。 趙羽,華為云計算編程語言 Lab 核心成員,華為公司 Python 編程語言生態(tài)建設(shè)及開源管理負責人。長期從事 Python 虛擬機的開發(fā)及研究工作。 陳嘯,華為軟件開發(fā)工程師。 李俊辰,擁有多年編譯器開發(fā)經(jīng)驗。

圖書目錄

第 1章 獲取 CPython 源代碼 1
第 2章 準備開發(fā)環(huán)境 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 配置任務(wù)和啟動文件 8
2.4 安裝 JetBrains CLion 9
2.5 安裝 Vim 12
2.6 小結(jié) 15
第3章 編譯 CPython 16
3.1 在 macOS 系統(tǒng)上編譯 CPython 16
3.2 在 Linux 系統(tǒng)上編譯 CPython 18
3.3 安裝自定義版本 19
3.4 make 快速入門 20
3.5 CPython 的 make 目標 21
3.5.1 構(gòu)建目標 21
3.5.2 測試目標 21
3.5.3 清理目標 22
3.5.4 安裝目標 22
3.5.5 其他目標 23
3.6 在 Windows 系統(tǒng)上編譯 CPython 23
3.6.1 安裝依賴項 24
3.6.2 從命令行編譯 24
3.6.3 使用 Visual Studio 編譯 25
3.7 PGO 28
3.8 小結(jié) 29
第4章 Python 語言和語法 30
4.1 為什么 CPython 是用 C 語言
而不是 Python 語言實現(xiàn)的 30
4.2 Python 語言規(guī)范 32
4.2.1 語言說明文檔 32
4.2.2 語法文件 33
4.3 解析器生成器 35
4.4 重新生成語法 36
4.5 小結(jié) 39
第5章 配置和輸入 41
5.1 配置狀態(tài) 42
5.1.1 預初始化配置 43
5.1.2 相關(guān)源文件 43
5.1.3 運行時配置數(shù)據(jù)結(jié)構(gòu) 44
5.1.4 通過命令行來設(shè)置運行時
配置 44
5.1.5 查看運行時標志 45
5.2 構(gòu)建配置 45
5.3 從輸入構(gòu)建模塊 46
5.3.1 相關(guān)的源文件 46
5.3.2 讀取文件和輸入 47
5.3.3 從命令行輸入字符串 47
5.3.4 通過本地模塊輸入 48
5.3.5 來自腳本文件或標準輸入的輸入 49
5.3.6 從編譯好的字節(jié)碼輸入 49
5.4 小結(jié) 50
第6章 基于語法樹的詞法分析和
語法解析 51
6.1 具象語法樹生成器 52
6.2 CPython 解析器-分詞器 54
6.2.1 相關(guān)源文件 54
6.2.2 從文件向解析器中輸入數(shù)據(jù) 54
6.2.3 解析器-分詞器工作流 55
6.3 抽象語法樹 58
6.3.1 相關(guān)源文件 59
6.3.2 使用 instaviz 工具展示
抽象語法樹 59
6.3.3 編譯抽象語法樹 62
6.4 要記住的術(shù)語 65
6.5 示例:添加一個約等于運算符 65
6.6 小結(jié) 69
第7章 編譯器 70
7.1 相關(guān)源文件 71
7.2 重要的專業(yè)術(shù)語 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 相關(guān)源文件 74
7.5.2 符號表數(shù)據(jù)結(jié)構(gòu) 75
7.5.3 使用 symtable 標準庫模塊 75
7.5.4 符號表實現(xiàn) 77
7.6 核心編譯過程 79
7.6.1 從 Python 訪問編譯器 79
7.6.2 編譯器 C 語言API 80
7.6.3 指令 82
7.6.4 基礎(chǔ)幀塊 83
7.6.5 操作和參數(shù) 83
7.7 匯編 84
7.7.1 匯編器數(shù)據(jù)結(jié)構(gòu) 84
7.7.2 匯編器深度優(yōu)先搜索算法 84
7.7.3 匯編器 C 語言API 85
7.7.4 深度優(yōu)先搜索 86
7.8 創(chuàng)建一個代碼對象 87
7.9 使用 instaviz 展示代碼對象 88
7.10 示例:實現(xiàn)約等于運算符 89
7.11 小結(jié) 94
第8章 求值循環(huán) 95
8.1 相關(guān)源文件 96
8.2 重要術(shù)語 96
8.3 構(gòu)建線程狀態(tài) 96
8.3.1 線程狀態(tài)類型 96
8.3.2 相關(guān)源文件 97
8.4 構(gòu)建幀對象 97
8.4.1 幀對象類型 97
8.4.2 相關(guān)源文件 98
8.4.3 幀對象初始化 API 98
8.5 幀的執(zhí)行 102
8.6 值棧 105
8.6.1 字節(jié)碼操作的例子:BINARY_OR 105
8.6.2 模擬值棧 106
8.6.3 棧效果 109
8.7 示例:在列表中添加元素 109
8.8 小結(jié) 112
第9章 內(nèi)存管理 114
9.1 C 語言中的內(nèi)存分配 114
9.1.1 靜態(tài)內(nèi)存分配 115
9.1.2 自動內(nèi)存分配 115
9.1.3 動態(tài)內(nèi)存分配 116
9.2 Python 內(nèi)存管理系統(tǒng)設(shè)計 117
9.2.1 內(nèi)存分配域 117
9.2.2 內(nèi)存分配器 118
9.3 CPython 內(nèi)存分配器 118
9.3.1 相關(guān)源文件 120
9.3.2 重要術(shù)語 120
9.3.3 內(nèi)存塊、內(nèi)存池和堆區(qū) 120
9.3.4 內(nèi)存塊分配 API 125
9.3.5 使用 Python調(diào)試API 126
9.4 對象和 PyMem 內(nèi)存分配域 126
9.5 原始內(nèi)存分配域 129
9.6 自定義內(nèi)存分配器 129
9.7 自定義的內(nèi)存分配“消毒劑” 130
9.7.1 AddressSanitizer 130
9.7.2 MemorySanitizer 131
9.7.3 UndefinedBehaviorSanitizer 131
9.8 PyArena 內(nèi)存堆區(qū) 132
9.9 引用計數(shù) 133
9.9.1 在 Python 中創(chuàng)建變量 133
9.9.2 增加引用 133
9.9.3 減少引用 134
9.9.4 字節(jié)碼操作中的引用計數(shù) 135
9.9.5 CPython 引用計數(shù)的優(yōu)點 137
9.10 垃圾回收 137
9.10.1 相關(guān)源文件 138
9.10.2 垃圾回收器的設(shè)計 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 小結(jié) 145
第 10章 并行和并發(fā) 146
10.1 并行模型和并發(fā)模型 147
10.2 進程的結(jié)構(gòu) 148
10.3 多進程并行 149
10.3.1 在 POSIX 中fork 進程 149
10.3.2 Windows 系統(tǒng)上的
多進程 152
10.3.3 multiprocessing 包 152
10.3.4 相關(guān)源文件 152
10.3.5 spawn 進程和 fork 進程 152
10.3.6 使用隊列和管道交換
數(shù)據(jù) 158
10.3.7 進程之間的共享狀態(tài) 165
10.3.8 示例應(yīng)用程序 165
10.3.9 多進程總結(jié) 167
10.4 多線程 167
10.4.1 全局解釋器鎖 168
10.4.2 相關(guān)源文件 169
10.4.3 在 Python 中啟動線程 169
10.4.4 線程狀態(tài) 172
10.4.5 POSIX 線程 176
10.4.6 Windows 線程 176
10.4.7 多線程總結(jié) 177
10.5 異步編程 177
10.6 生成器 177
10.6.1 生成器結(jié)構(gòu) 178
10.6.2 相關(guān)源文件 179
10.6.3 創(chuàng)建生成器 179
10.6.4 執(zhí)行生成器 181
10.7 協(xié)程 182
10.7.1 相關(guān)源文件 184
10.7.2 事件循環(huán) 184
10.7.3 示例 185
10.8 異步生成器 186
10.9 子解釋器 187
10.9.1 相關(guān)源文件 189
10.9.2 示例 189
10.10 小結(jié) 190
第 11章 對象和類型 191
11.1 本章示例 192
11.2 內(nèi)置類型 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 相關(guān)源文件 201
11.6.2 處理 Unicode 碼點 202
11.6.3 UTF-8和UTF-16 202
11.6.4 寬字符類型 203
11.6.5 字節(jié)順序標記 204
11.6.6 encodings 包 204
11.6.7 編解碼器模塊 205
11.6.8 編解碼器的實現(xiàn) 205
11.6.9 內(nèi)部的編解碼器 206
11.6.10 示例 207
11.7 字典類型 208
11.7.1 哈希 208
11.7.2 相關(guān)源文件 210
11.7.3 字典結(jié)構(gòu) 210
11.7.4 查找 211
11.8 小結(jié) 212
第 12章 標準庫 213
12.1 Python 模塊 213
12.2 Python 模塊和 C 語言模塊 214
第 13章 測試套件 217
13.1 在 Windows 系統(tǒng)上運行測試
套件 217
13.2 在 Linux 系統(tǒng)或 macOS 系統(tǒng)上
運行測試套件 217
13.3 測試標志 218
13.4 運行特定測試 218
13.5 測試模塊 220
13.6 測試工具 220
13.7 小結(jié) 221
第 14章 調(diào)試 222
14.1 使用崩潰處理程序 222
14.2 編譯調(diào)試的支持 223
14.2.1 Windows系統(tǒng) 223
14.2.2 macOS 系統(tǒng)或 Linux
系統(tǒng) 223
14.3 在 macOS 系統(tǒng)上使用LLDB 223
14.3.1 創(chuàng)建斷點 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 創(chuàng)建斷點 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 調(diào)試器 228
14.5.1 添加斷點 229
14.5.2 啟動調(diào)試器 229
14.5.3 處理斷點 230
14.6 使用 CLion 調(diào)試器 231
14.6.1 調(diào)試 make 應(yīng)用程序 232
14.6.2 附加調(diào)試器 232
14.6.3 創(chuàng)建斷點 232
14.6.4 處理斷點 234
14.7 小結(jié) 235
第 15章 基準測試、性能分析和追蹤 236
15.1 使用 timeit 進行微基準測試 237
15.2 使用 Python 基準測試套件進行
運行時基準測試 238
15.2.1 執(zhí)行基準測試 240
15.2.2 對比基準測試 240
15.3 使用 cProfile 分析 Python 代碼 242
15.4 使用 DTrace 分析 C 語言代碼 245
15.4.1 相關(guān)源文件 245
15.4.2 安裝 DTrace 246
15.4.3 編譯 DTrace 支持 246
15.4.4 使用 CLion 中的 DTrace 246
15.4.5 DTrace 示例 247
15.5 小結(jié) 248
第 16章 下一步計劃 249
16.1 為 CPython 編寫 C 語言擴展
模塊 249
16.2 改進 Python 應(yīng)用程序 249
16.3 為 CPython 項目做貢獻 250
16.3.1 問題分類 250
16.3.2 創(chuàng)建一個拉取請求來修復問題 251
16.3.3 其他貢獻 252
16.4 繼續(xù)學習 252
附錄A 面向Python程序員的 C 語言
簡介 253

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號