Python 解釋型語言

參考:http://blog.csdn.net/tjxy_20081/article/details/8937687

何爲字節編譯?解釋器與編譯器的區別?Java的字節碼和Python的字節碼有什麼區別?

    結論:不能把語言純粹地分成解釋型和編譯型這兩種。用Java來舉例,Java首先是通過編譯器編譯成字節碼文件,然後在運行時通過解釋器給解釋成機器文件。所以我們說Java是一種先編譯後解釋的語言。Python在運行時會生成.pyc的二進制臨時文件,看起來很像是預編譯的結果,也不是純的解釋型語言。Python解釋器只把我們可能重用到的模塊持久化成.pyc文件。
    編譯型:編譯鏈接生成機器碼,直接在內存中執行
   解釋型:簡單理解,每一行單獨執行與執行整個腳本效果是一樣的    
   Python是一個解釋型的語言。但是爲了效率上的考慮,Python也提供了編譯的方法。編譯之後是bytecode的形式。Python也提供了和Java 類似的VM來執行bytecode。不同的是,因爲Python是一個解釋 型的語言,所以編譯(compile)不是一個強制的操作。事實上,編譯是一個自動的過程。多數情況下,你甚至不會在意他的存在。編譯 成bytecode可以節省加載模塊的時間,從而提高效率。
    除了效率原因,bytecode也增加了反向工程的難度,在某種程度上保 護你的代碼。當然,反編譯仍然是可以的。所以如果真的想保護代碼 ,還是用別的方法吧。另外Python還提供了-O選項,可以編譯生成“優化”的bytecode,文 件擴展名是.pyo。但實際上優化的內容有限,作用不大。 如果希望生成可執行文件,就要依賴於第三方的工具了。Java編程人員在編寫完軟件後,通過Java編譯器將Java源程序編譯爲JVM的字節代碼。任何一臺機器只要配備了Java解釋器,就可以運行這個程序,而不管這種字節碼是在何種平臺上生成的。解釋器不能單獨執行,必須要有虛擬機。解釋器它的作用只是把代碼解釋成虛擬機能夠讀懂的東西。Java採用的是基於IEEE標準的數據類型。通過JVM保證數據類型的一致性,也確保了Java的平臺無關性Java類會被編譯成一個或者多個字節碼文件(.class)然後打包到JAR文件,而後Java虛擬機會從相應的CLASS文件和JAR文件中獲取相應的字節碼。
    C/C++語言編譯器是直接把源程序一步翻譯爲目標計算機(16位,32位,64位)的指定芯片(X86或ALPHA PPC,RISC)、指定操作系統用的特定可執行程序目標碼,而JAVA編譯器是把程序翻譯爲中間碼,由虛擬機將中間碼解釋爲最終的指定芯片、指定操作系統的可執行程序目標碼。

 

 

 

 

 

發佈了24 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章