只是好奇,想知道這是有可能在充分詮釋方式,其中編譯可以跳過如何繞過編譯階段
如何繞過編譯階段
回答
假設你指到Python的默認實現運行python程序運行python程序。 您不能跳過編譯
當您運行命令:
python <script-name>.py
的Python(在一個非常廣泛和根本的意義上)執行下列操作步驟:
- Python中首先分析你代碼文件。結果是一個抽象語法 樹(又名AST)。
- AST然後傳遞給Python編譯器。 Python編譯器 爲Python虛擬機生成字節碼。
- 然後虛擬機執行代碼。
第二步在Python解釋器過程中至關重要。沒有它,你堅持使用AST,虛擬機沒有什麼可執行的。彙編是一個必要的過程。這不是可選的,它是強制性的。
要完全回答這個問題,因爲它的模糊性,將需要比我有時間更仔細的答案,但備案:
- CPython的執行編譯源模塊爲字節碼。
- 當一個模塊是進口的,解釋查找編譯字節碼 文件比源更新,並使用它,如果發現
- 否則解釋試圖寫入模塊的編譯的字節代碼 它會在未來的進口被發現 - 無法寫入文件是 不是錯誤。
- 字節碼由解釋器的
eval
循環解釋,而不是 翻譯成機器碼。
其他實現具有其他特徵。
優化的Python的PyPy實現使用JIT技術將Python編譯爲可執行的機器代碼,但我不知道它是否會嘗試緩存JIT編寫的代碼。我懷疑這樣做是不明智的,因爲每次運行的優化很可能不同。
IronPython實現編譯爲.NET CLR字節碼,我相信這可以進一步優化。
Jython以Java虛擬機字節碼爲目標,並且許多JVM實現在每次運行的基礎上再次應用JIT技術。
啊,好主意提到其他Python的實現。我也許錯誤地認爲OP只專指CPython。+1 –
人們經常會這樣做,但問題可能在於緩存字節碼或編譯爲機器碼。 – holdenweb
- 1. Clang編譯器階段
- 2. 添加編譯器階段
- 3. 編譯器的階段?
- 4. 調試標誌和GCC(編譯階段/鏈接階段)
- 5. 關於Java編譯器的階段
- 6. 模板中的第二階段編譯
- 7. RPM是否需要編譯階段?
- 8. 編譯器的語義階段
- 9. 優化發生在編譯階段
- 10. c編譯器的語義階段
- 11. 使用CMAKE編譯CUDA C++ - 指定了多個編譯階段
- 12. Maven:構建耳朵:跳過編譯階段?
- 13. 如何獲得最後編譯階段oracle中的過程代碼?
- 14. 如何避免運行liquibase:update任務的maven編譯階段?
- 15. maven:如何添加編譯階段後生成的資源
- 16. 如何在Python包distutils安裝的構建階段編譯CoffeeScript?
- 17. 如何編譯這個程序?鏈接器階段出錯
- 18. 如何運行maven編譯階段與測試jar依賴
- 19. 如何在廚師編譯階段中止當前食譜?
- 20. 如何在編譯階段解決cmake錯誤
- 21. 如何繞過Java編譯中的「方法太大」錯誤?
- 22. 編譯超出預處理器階段,但在裝配前階段
- 23. C++翻譯階段混亂
- 24. 如何在階段通過JSON在kineticjs
- 25. 如何跳過jQuery的冒泡階段
- 26. 如何通過這個合成階段?
- 27. 編譯器階段的符號表和行號編號
- 28. (Rails)我如何繞過STI空字段?
- 29. 的Protobuf編譯器階:ScalaPB
- 30. 如何階段,playframework
是的......打開一個REPL會話並代碼。 –