天天看點

編譯器,解釋器及混合編譯

我們編寫代碼時會得到一個.py結尾的檔案,要想運作執行此檔案就需要python解釋器。

傳回頂部

python解釋器的構成及其各部分功能

解釋器由一個編譯器和一個虛拟機構成,編譯器負責将源代碼轉換成位元組碼檔案,而虛拟機負責執行位元組碼。

是以,解釋型語言其實也有編譯過程,隻不過這個編譯過程并不是直接生成目标代碼,而是中間代碼(位元組碼),然後再通過虛拟機來逐行解釋執行位元組碼

cpython:是解釋器,即我們正在用的python就是cpython解釋器

解釋器有多種,在ipython視窗就是Ipython解釋器.

執行過程原理

  1. 執行 python XX.py 後,将會啟動 Python 的解釋器
  2. python解釋器的編譯器會将.py源檔案編譯(解釋)成位元組碼生成PyCodeObject位元組碼對象存放在記憶體中。
  3. python解釋器的虛拟機将執行記憶體中的位元組碼對象轉化為機器語言,虛拟機與作業系統互動,使機器語言在機器硬體上運作。
  4. 運作結束後python解釋器則将PyCodeObject寫回到pyc檔案中。當python程式第二次運作時,首先程式會在硬碟中尋找pyc檔案,如果找到,則直接載入,否則就重複上面的過程。

    是以我們應該這樣來定位PyCodeObject和pyc檔案,我們說pyc檔案其實是PyCodeObject的一種持久化儲存方式。

    pyc檔案,檔案中包含python的magic number(來說明編譯時使用的python版本号)、源檔案的mtime(使pyc和py檔案保持同步)、編譯出的code對象

總結

cpu不管你是什麼語言,隻能運作最終的機器碼---最低級的指令集.

Python語言 是:被一個 C 寫的解釋器CPython解釋成機器碼由cpu執行,從頭到尾都沒生成 C 代碼。---解釋型

而pyx語言(先轉換成 .C 中間代碼)再被編譯成pyd檔案,是生成了最終的dll檔案的-----編譯型

cython:是一種python的擴充語言(支援python和c混編---編寫代碼中同時含有c和python),可以讓python調用C++容器,例如vector. cython混合語言在python中典型代表就是.pyx檔案--------編譯型語言和解釋型共存

Cython 會先把 .PXD .PY .PYW .PYX 檔案轉換成 .C 中間代碼, 再編譯成 .PYD 子產品檔案(最終的dll檔案),就可以被python import引入調用了.

編譯pyx程式需要的是cl.exe及cython包

包含pyd和python語言的程式就是編譯型語言和解釋型語言共同執行的情況.

編譯器,解釋器及混合編譯

.cu檔案

總結: