簡體   English   中英

python解釋器到底實現了什么?

[英]What exactly is the python interpreter implemented with?

我是編程的初學者,並且嘗試從“學習Mark Lutz的Python”中學習Python。 在“ Python解釋器簡介”一章中,作者陳述了以下內容:

取決於運行的Python風格,解釋器本身可以實現為C程序,一組Java類或其他形式。

我無法理解如何區分一段Python代碼,以便在解釋器中進行划分(作者聲明是C程序還是Java類)。

一段Python代碼就是Python代碼。 作者的意思是有不同的Python解釋器-所有的解釋器都運行Python代碼。 這些不同的Python解釋器可以是用CJavaC#Python本身編寫的程序。 它們是您在命令行中鍵入python或從應用程序菜單中選擇python時運行的程序。 通常是CPython:Python軟件基金會使用C語言編寫的語言的參考實現。

總而言之,這對於學習Python絕對不是必需的-只需略過,然后在對語言更加熟悉后再回到這個問題。

Python的參考解釋器(其他人用作指導)使用C語言編寫,並且被昵稱為CPython(不要與不是解釋器的Cython混淆)。 它將Python代碼編譯為Python字節碼,並在其虛擬機上運行,​​該虛擬機也用C編寫。

還有其他口譯員。 以下是一些最著名的。

  • Jython ,用Java編寫,它將Python編譯為Java字節碼,並在Java虛擬機上運行它。 它允許Python代碼調用Java代碼。 不知何故。
  • IronPython ,是用C#編寫的(其中一些顯然是用Python編寫的),它將Python編譯成Microsoft的CLI(如果我寫錯了,請糾正我)字節碼,然后在相應的虛擬機上運行它。
  • PyPy ,用RPython(Python的更嚴格的分支)編寫,它將Python編譯為PyPy字節碼(與CPython字節碼基本相同)並在其虛擬機上運行。 更多信息: http : //doc.pypy.org/en/latest/interpreter.html

從理論上和理想情況下,所有嚴格合法的Python代碼都應在其中任何一個上運行相同的代碼。 可以將其視為針對C的不同編譯器:嚴格合法的C代碼將在任何編譯器上編譯為等效程序

  • 一個編譯器將允許某些非標准的東西,但不允許其他編譯器void main() Visual Studio中的void main()是非標准的)。
  • Linux編譯器將無法訪問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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM