[Python] Python Internal
Python Internal
有需要了解Python 內部是如何運作 ?
從組合語言、C語言一路學習上來,學習新的程式語言,總是會先探究他的內部,雖然不必深入了解他內部的運作,但是清楚的知道他的優劣、運作流程以及他已經為我們做哪些,個人覺得是必要的。
Python Benefit
擁有其他眾多程式語言的優點,例如 C++、 Java …
OOP (Object Oriented Programming) 程式語言, like C++
直譯式 (Interpreted) 程式語言, like Java
可攜性( Portability of source code and VM), Like Java
記憶體管理 (memory management) (註1)
Python Internal
這篇Design of the CPython Compiler 可以清楚知道Python 是如何將我們程式碼轉換成CPU可執行的程式碼了。
以下就是文中列出Python 2.5 轉換的步驟:
Parse source code into a parse tree (Parser/pgen.c)
Transform parse tree into an Abstract Syntax Tree (Python/ast.c)
Transform AST into a Control Flow Graph (Python/compile.c)
Emit bytecode based on the Control Flow Graph (Python/compile.c)
更確切說是,轉換成bytecode 再交給(emit) VM (Virtual Machine)執行。
Python 不像C語言,會直接轉成CPU 看的懂的機器語言 (machine language),而是像Java language 會有一個 VM來執行bytecode,
這也讓Python 具有可攜性 (Portability) 的優點;同一套程式碼只要配上相對平台的VM,就可以在不必修改程式碼的情況下,在任何平台上執行了。
整個Python 內部運作就好像下圖
Python code 經過 pgen.c、ast.c、compile.c 轉換成bytecode,再emit給 PVM (Python Virtual Machine) 執行。
註1 :
個人認為這點是讓他火紅的重中之重,第一,不像C語言的程式設計人員,總是在為記憶體的漏洞煩惱;再者,對於剛接觸程式語言的新手,學習Python,記憶體管理已不再是必要選項;少了記憶體管理的煩惱,相對地,增加程式設計帶來的成就感,這也讓他的效率 (Performance) 的缺點被眾人給忽略了,讓坊間的教育單位一致的推薦Python 為入門的程式語言。