Python Internal - Part 0. 深入 CPython Internal

5/26/2022 PythonVirtual MachineCompiler

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 虛擬機的實現,可以參考。

  1. 自己動手寫 Python 虛擬機 (opens new window)
  2. pylite (opens new window)
  3. CoCo (opens new window)
  4. A Python Interpreter Written in Python (opens new window)

# 二、專欄目的

  1. 了解 Cpython 底層實作
  2. 自幹一個 Python 虛擬機
  3. 研究相關的 JIT compiler (Ex: PyPy, Numba 等)

# 三、參考資源

# 3-1. Python Internal 的書籍

  1. Python 源碼剖析 (opens new window)

  2. Foundations of Programming Languages (opens new window)

  3. 自己動手寫 Python 虛擬機 (opens new window)

  4. Cpython Internal (opens new window)

  5. Inside Python Virtual Machine (opens new window)

# 3-2. Python Internal 的教學影片

  1. Phillp Guo - CPython internals (opens new window)

  2. CPython Internals - (Full Course) (opens new window)

  3. Pyhton源码剖析 (opens new window)

# 3-3. Python Internal 教學網站

  1. Real Python (opens new window)

  2. Eli Bendersky's Python Internals series (opens new window)

  3. Yaniv Aknin's Python Innards series (opens new window)

  4. Allison Kaptur's Python Internals Series (opens new window)

  5. My Python Internals Series! (opens new window)

# 3-4. Python Internal 筆記 (真心淚推)

  1. CPython-Internals (opens new window)
  2. Python 源码深度剖析 (要付費) (opens new window)
  3. python3-source-code-analysis (opens new window)
  4. Python源码剖析 (opens new window)

# 3-5. Github 教學資源蒐集

  1. python-internals (opens new window)

  2. python-source-code-analysis (opens new window)

  3. Python 執行過程視覺化(大推) (opens new window)

Last Updated: Wed Jul 26 2023 21:50:49 GMT+0800