Python源碼的三大應(yīng)用技術(shù)
在計算機的應(yīng)用過程Python源碼剖析是經(jīng)常被用到的計算機語言,這篇文章就是對Python源碼剖析包括的三個方面做一詳細介紹,如果你想更好的了解相關(guān)的計算機相關(guān)的語言,不防瀏覽下面的文章。
1. Python總體架構(gòu)
在最高的層次上,Python的整體架構(gòu)可以分為四個主要的部分,整個架構(gòu)如圖1所示。在左邊,是Python提供的大量的模塊,庫以及用戶自定義的模塊。比如在執(zhí)行import os時,這個os就是Python內(nèi)建的模塊,當然用戶還可以通過自定義模塊來擴展Python系統(tǒng)。在本系列文章中,我們不會對這一部分進行過多的考察。
Python的運行時環(huán)境,包括對象/類型系統(tǒng)(Object/Type structures),內(nèi)存分配器(Memory Allocator)和運行時狀態(tài)(Current State of Python)。運行時狀態(tài)維護了解釋器在執(zhí)行字節(jié)碼時在不同的狀態(tài)之間切換的動作,我們可以將它視為一個巨大而復(fù)雜的有窮狀態(tài)機。內(nèi)存分配器則全權(quán)負責Python中創(chuàng)建對象時對內(nèi)存的申請工作,實際上它就是Python運行時與C中malloc的一層接口。而對象/類型系統(tǒng)則包含了Python中存在的各種內(nèi)建對象,比如整數(shù),list和dict等等
在中間的部分,可以看到Python的核心,解釋器(interpreter)。在解釋器中,箭頭的方向指示了Python運行時的數(shù)據(jù)流方向。其中Scanner對應(yīng)詞法分析,將文件輸入的Python源代碼或從命令行輸入的一行行Python代碼切分為一個一個的token;Parser對應(yīng)語法分析部分,在Scanner的分析結(jié)果上進行語法分析,建立抽象語法樹(AST);Compiler是根據(jù)建立的AST生成指令集合——Python字節(jié)碼(byte code),就像Java編譯器和C#編譯器所做的那樣;最后由Code Evaluator來解釋并執(zhí)行這些字節(jié)碼。因此,Code Evaluator又可以被稱為執(zhí)行引擎。
在Interpreter與右邊的對象/類型系統(tǒng),內(nèi)存分配器之間的箭頭表示“使用”關(guān)系;而與運行時狀態(tài)之間的箭頭表示修改關(guān)系,即Python在執(zhí)行的過程中會不斷地修改當前解釋器所處的狀態(tài),在不同的狀態(tài)之間切換。#t#
2. Python源代碼的組織
中國有句老話,巧婦難為無米之炊。要分析Python源碼,首先當然要獲得Python源碼。
3. 編譯Python
好了,下載了Python的源代碼之后,我們就可以走出剖析Python源碼的第一步——編譯Python——了:)
Python2.4.1是在Visual Studio 2003環(huán)境下開發(fā)的,在PCBuild目錄下可以看到VS2003的工程文件,打開工程后,還需要進行一些設(shè)置,才能成功編譯。
我們還需要一個pythonnt_rc_d.h,這個文件在Python2.4.1的源碼包中沒有提供,必須要通過一個編譯make_versioninfo子工程才能自動生成。
好了,現(xiàn)在再編譯,一切都會順利完成了。