Python Internal - Part 0. 深入 CPython Internal
Python 是非常熱門的程式語言,尤其在 Web 端、深度學習、資料科學領域、甚至是測試等備受重用,自它被發布之後,一直在 TIOBE 榜上有名,甚至蟬聯幾年的榜首。Python 語法強大的動態性、彈性、徹底的萬事萬物皆物件概念,寫起來真的就像 pseudo code 一樣,非常適合要入門寫程式的新手。然而,在語法高度彈性的背後,究竟擁有什麼樣的機制 ? 彈性的背後又會讓 Python 帶來什麼樣的限制 ? 接下來就讓我們探知這個強大動態語言的內在吧😊
# Part 0. 打開 Python 的黑盒子
# 一、動機 : 為什麼想要研究 Python Virtual Machine ?
# 1-1. 對 Pythonic Code 表現力的熱愛
因為我真的非常熱愛 Python。很多人對 Python 可能嗤之以鼻,覺得它是一門沒甚麼技術性又易學的語言,像 Google、Facebook 一些大公司徵才時從不會考 Python,但對我而言,一個語言的價值並不能被這些世俗價值所束縛。Python 對我來說是 易學難精的語言 ,你要寫一個精簡、極具表現力的 Python 程式碼相當困難,你要懂物件導向以及充分理解 Python 的語言特性,才能寫出堪稱藝術品的 Python 程式碼。
然而當你可以寫出很美的 Python Code 的時候,基本上你對 clean code 已經具有相當經驗了,對我來說 Pythonic Code 是可讀性的極致(C、Golang 因為精簡的關鍵字使得可讀性也很高,但前提是你要能善用 ><) 也是我在開發其他程式語言的模板。我們可以從更抽象的層面、更 High-Level 角度去解決問題,之後如果必要的話可以再將解決方法從 Python 遷移到其它程式碼上,你解決問題的能力(先求有再求好)會變得非常快 !
另外,雖然 C++ 語法非常的豐(ㄈㄨˋ)富(ㄗㄚˊ),但你可以看到像是 range-based for loop、Lambda 等等,充滿了 pythonic 的味道 (opens new window)。綜合以上,Python 算是我對程式碼品味的啟蒙老師。
# 1-2. 精進 Compiler 領域
近期我一直在研究 Compiler 的領域,因為我們的製程快到物理極限了(摩爾定律即將失效),但我們能利用 compiler 幫我們生出最佳化的程式碼用力榨出硬體效能。Compiler 是一門相當具有潛力的技術,而 Compiler 又與 Virtual Machine 息息相關,很想知道 Python 怎麼進行垃圾回收的、怎麼進行程式碼最佳化、又是怎麼執行 Bytecode 的,我相信深入研究這個虛擬機可以為我在這個領域帶來更多的精進。
# 1-3. 高度物件導向的 Source Code - CPython
其實去看 Github 的 CPython 的 Source Code,實話一句,這個簡直可以當如何寫好 C 語言的教科書。雖然 Linux Kernel 也是高度物件導向的程式結構,但是相對太複雜了,如果你想提高寫 C 語言的品味,看 Cpython Code 準沒錯。Python 真的是從外美到內的程式語言 (現在以 CPython 為主)。就抱著欣賞藝術品的心情去欣賞 Cpython Code。
# 1-4. 想要自幹一個 Python 虛擬機
之前偶爾發現中國有一本書叫自己動手寫 Python 虛擬機 (opens new window),我立刻買回來看,因為真的很好奇,書中提到很多實現的重點,但是只支援到 Python 2.x,而且書講的有點太快,可能受限於篇幅的問題。所以我想要針對 Python 的各個強大的部分 Devide and Conquer 進行頗析,相信可以受益良多,另外網路上其實還有很多 Python 虛擬機的實現,可以參考。
- 自己動手寫 Python 虛擬機 (opens new window)
- pylite (opens new window)
- CoCo (opens new window)
- A Python Interpreter Written in Python (opens new window)
# 二、專欄目的
- 了解 Cpython 底層實作
- 自幹一個 Python 虛擬機
- 研究相關的 JIT compiler (Ex: PyPy, Numba 等)
# 三、參考資源
# 3-1. Python Internal 的書籍
# 3-2. Python Internal 的教學影片
# 3-3. Python Internal 教學網站
# 3-4. Python Internal 筆記 (真心淚推)
- CPython-Internals (opens new window)
- Python 源码深度剖析 (要付費) (opens new window)
- python3-source-code-analysis (opens new window)
- Python源码剖析 (opens new window)