Python的總體架構
學習環境:
系統:ubuntu 12.04 STL
python版本:2.7
既然要學習python的源碼,首先我們要在電腦上安裝python并且下載python的源碼,ubuntu 12.04 STL
自帶的python版本為2.7.3,這就可以了,接下來下載源碼,訪問這個網址:
點擊此處,下載python2.7.7的源代碼,下載結束后解壓文件,我們會看到如下文件結構:
,接下來介紹一下,
demo文件夾里放的是一些例子;
Doc文件夾里放的是文檔,Grammer是語法分析器,include是python所包含的一些頭文件,Lib是python的庫,都是用 python語言寫的,Moduels是用C寫的python模塊,Parser是分詞器。圖片是最生動的文字,現在我來附上我所理解的python總體 架構圖片:
其中,最左邊的python的庫,模塊以及用戶自定義的模塊,都依賴于python解釋器來實現,而python解釋器主要包括掃描器,分詞器,編譯器和代碼生成四部分,我們寫一個python文件之后,由python解釋器執行,其大致執行過程如下:
1、掃描器掃描python文件,將掃描結果發給分詞器;
2、在掃描過程中識別出文件中的對象,類型和結構(注:在python中類型和結構都是對象);
3、分詞器將結果發給編譯器,編譯器在此時生成相應對象同時給對象分配內存空間;
4、編譯之后將代碼生成,進行內存管理并處理當前狀態。
5、對象、類型、結構體、內存管理以及當前狀態構成了python極其復雜的runtime運行時。
還有,很多人會有疑問,python是動態語言,內存到底是如何管理的,初來乍到,我也不太明白,由于python的各種歷史原因,python的內存處 理和線程管理非常復雜,打開源碼看看,如果出現類似object_new這樣的東西,那么他的內存就是用C++中的new來開辟的,如果是 object_malloc這樣的東西,則表示內存是用C中的malloc來實現的。
python屬于脫管型的語言,內存不需要我們手動處理,方便了很多,其實,python在底層是用自動引用計數器來實現的,python中創建小對象 時,往往直接在內存池中創建,而大對象則是使用new/malloc從內存中再創建一個。針對并不復雜的對象關系時,比如只有一個對象時,python是 不會運行鏈路檢測的,而如果對象很多,過系又很復雜,就會有一個鏈路檢測,以防出現循環引用和死循環的問題,當釋放內存時,則遵守自動引用計數的規則,非 常了不起。
來自:http://www.androiddev.net/python_sourcecode_study1/