只是好奇,想知道這是有可能在充分詮釋方式,其中編譯可以跳過如何繞過編譯階段
如何繞過編譯階段
回答
假設你指到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. 編譯器的階段?
- 2. 添加編譯器階段
- 3. 編譯器的語義階段
- 4. 優化發生在編譯階段
- 5. c編譯器的語義階段
- 6. 使用CMAKE編譯CUDA C++ - 指定了多個編譯階段
- 7. Maven:構建耳朵:跳過編譯階段?
- 8. 如何獲得最後編譯階段oracle中的過程代碼?
- 9. 如何編譯這個程序?鏈接器階段出錯
- 10. 如何在編譯階段解決cmake錯誤
- 11. 編譯超出預處理器階段,但在裝配前階段
- 12. 如何繞過Java編譯中的「方法太大」錯誤?
- 13. C++翻譯階段混亂
- 14. 編譯器階段的符號表和行號編號
- 15. (Rails)我如何繞過STI空字段?
- 16. 的Protobuf編譯器階:ScalaPB
- 17. 如何階段,playframework
- 18. 角的WebPack編譯成功,停留在編譯階段 - 網頁沒有開通
- 19. 遺傳編程階段
- 20. 在編譯器中如何解析階段與規則引擎不同?
- 21. 使用maven-plugin-plugin使用help-mojo階段編譯Maven插件
- 22. Maven assembly插件不會在編譯階段覆蓋文件
- 23. sizeof運算符評估在gcc編譯的哪個階段
- 24. 瓶蓋 - 編譯VS解讀階段的JavaScript
- 25. 停止斯卡拉編譯特定階段
- 26. Config Maven 2在編譯階段打印出javac命令
- 27. C#:如何繞過
- 28. 如何繞過default_scope?
- 29. 如何繞過AppWidgetManager.ACTION_APPWIDGET_PICK?
- 30. Spark如何管理階段?
是的......打開一個REPL會話並代碼。 –