[英]What exactly is the python interpreter implemented with?
我是編程的初學者,並且嘗試從“學習Mark Lutz的Python”中學習Python。 在“ Python解釋器簡介”一章中,作者陳述了以下內容:
取決於運行的Python風格,解釋器本身可以實現為C程序,一組Java類或其他形式。
我無法理解如何區分一段Python代碼,以便在解釋器中進行划分(作者聲明是C程序還是Java類)。
Python的參考解釋器(其他人用作指導)使用C語言編寫,並且被昵稱為CPython(不要與不是解釋器的Cython混淆)。 它將Python代碼編譯為Python字節碼,並在其虛擬機上運行,該虛擬機也用C編寫。
還有其他口譯員。 以下是一些最著名的。
從理論上和理想情況下,所有嚴格合法的Python代碼都應在其中任何一個上運行相同的代碼。 可以將其視為針對C的不同編譯器:嚴格合法的C代碼將在任何編譯器上編譯為等效程序
void main()
Visual Studio中的void main()
是非標准的)。 windows.h
庫(例如CPython將無法訪問Java庫)。 聽起來您的真正問題是Python解釋器如何執行它的工作。 這是整個大學課程的主題,但這是重點。
解釋器使用稱為解析器的特殊功能讀取Python源。 這是一個輸入處理器,它以上下文無關文法的形式理解Python語言的確切結構。
解析過程檢查輸入是否符合Python語法規則(此處是語法錯誤的出處),並生成一個數據結構,該數據結構以非常簡單的步驟的形式提煉了Python程序的原始含義,這些步驟以稱為字節的簡單數組表示字節碼。
輸入,解析和字節碼生成的完整過程稱為編譯。 是的,Python本質上具有一種簡單的編譯器。
字節碼執行非常基本的操作,例如算術,測試以及基於測試結果,字符串操作,從函數的調用和返回,輸入,輸出以及結合在一起的Python程序執行的所有數百種基本運算,跳轉到其他字節碼位置並快速執行,使程序看起來功能強大。
在原始Python源相當接近人類語言的地方(嗯,有點……),字節碼也相當接近機器語言:處理器將1和0的模式理解為指令。 字節代碼是程序運行時寫入.pyc
文件的內容。
它只需要一個相當小的和簡單的程序(最好是一個快速的程序)來調用字節碼解釋器(是Python解釋器中的解釋器)就可以處理字節碼,以使處理器完成原始Python程序想要的工作。
當然,如果.pyc
文件已經存在並且比相應的源代碼新,則可以跳過編譯。
那里有...一門大學課程,只需幾句話。 我略過了很多細節,(警告)我寫的一些內容僅適用於其中的許多Python實現,但這只是了解的開始。
您的書的作者說上述所有實現語言都可以是C或Java(Python的Jython實現)。 他沒有提到僅使用C或Java實現Python的最小核心。 其余的在Python本身中。
如果您有興趣了解更多信息,可以找到一些價格合理且價格合理的免費資源。 例如,請參見本文 ,也不要花太多錢,請嘗試“ 計划9來自空的空間”,以了解如何實現除Python外的其他語言的解釋器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.