本篇文章更新時間:2025/12/26
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
內容目錄
Python 3.15 在 Windows 上變快了?深入解讀 tail-calling interpreter 的真實效益
編輯前言:這篇文章源自 Ken Jin 的部落格文章 Python 3.15’s interpreter for Windows x86-64 should hopefully be 15% faster。作者揭露了 Python 在 Windows(以及 macOS AArch64)上透過 tail-calling interpreter 帶來的性能提升,並解釋了背後的原因。對於開發者來說,這不只是「變快」,而是 Python 執行模型的一次結構性突破。
核心觀點 (Key Takeaways)
- Tail-calling interpreter 在 macOS AArch64 上約能帶來 5% 的速度提升,在 Windows x86-64 上甚至達到 15% 的幾何平均加速。
- MSVC 2026 引入了必須尾呼叫(musttail)相關功能,使 tail-call threading 成為可能的實作方式。
- 真正的效益來自「讓編譯器喘口氣」:tail call 將龐大的 CPython eval loop 拆解,使編譯器能重新啟用內聯等優化。
深入解析
這篇原文的主軸,是作者重新檢視先前關於尾呼叫解譯器(tail calling interpreter)的性能結論,並指出先前的誤判源於編譯器 bug。經過修正後,他發現兩個平台的測試結果相當亮眼:
Windows x86-64(使用實驗性的 MSVC)在 pyperformance 上獲得約 15–16% 的平均加速。
這並不是小幅調整,而是在 Python 這種成熟的語言實作上,相當罕見的「兩位數百分比」性能突破。
作者花了篇幅說明三種主要的 Python 直譯器寫法:
- switch-case interpreter:最傳統、最常見,也最容易形成 12k 行巨型函式的寫法。
- computed goto interpreter:GCC/Clang 的 labels-as-values 技術,可避免不必要跳轉,但在現代編譯器下優勢有限。
- tail-calling interpreter:每個 opcode 處理器是獨立函式,由 tail call 連結,但過去因為編譯器不保證 tail call,容易導致 stack overflow,因此未被廣泛採用。
真正讓 tail call threading 成為主流可行方案的關鍵在於:
Clang 與 MSVC 加入了 musttail,讓尾呼叫成為強制要求,而非最佳化「可能」發生的行為。
為什麼會變快?
作者觀察後得出一個重要結論:
性能提升的主因不是 tail call 更有效率,而是 tail call 讓編譯器終於能正常工作。
在 CPython 中,傳統 eval loop 是一個超過 1.2 萬行的大函式。這對編譯器來說是惡夢:
- 內聯常被拒絕
- 優化 heuristics 失準
- 指令碼分支複雜度過高
但 tail call threading 將每個 opcode 拆成獨立函式,使編譯器能在更小、更局部的範圍內自由進行 inline 與其他最佳化。文章甚至直接展示:在傳統 switch-case 模式下,簡單如 PyStackRef_CLOSE_SPECIALIZED 都沒有被內聯;但 tail calling 模式下,MSVC 卻能順利將其展開。
筆者心得與啟發
這篇文章讓我重新思考了「效能優化」在語言實作中的本質。很多時候,速度變快不是因為加入了什麼神奇技巧,而是「把阻礙編譯器的障礙拿掉」。Python eval loop 的 12k 行巨型函式就是一個典型案例:當整體架構不利於優化時,再聰明的編譯器也無能為力。
換句話說:
這次的突破不是 tail call 的勝利,而是軟體工程結構調整的勝利。
對我來說,最值得關注的不是那個漂亮的 15% 或 30% 的加速,而是 Python 團隊願意在語言已經 30 多歲的情況下,仍然大膽嘗試新的直譯器結構。這讓我對未來 3.15、3.16 的演進更加期待。
對使用者而言,這篇文章給我們兩個重要提醒:
- 若你使用 Windows,Python 3.15 很可能讓你的純 Python 程式碼免費加速。
- 若你對語言 VM 或編譯器技術有興趣,tail-call threading 的再次崛起是一個值得追蹤的趨勢。
期待未來官方釋出正式的 Windows 二進位版本後,能更輕鬆體驗這項提升。
