我讀過Clojure編譯的地方。像Java或Scala一樣,它是否真的被編譯,而不是像Jython或JRuby一樣被解釋?Clojure是編譯還是解釋?
回答
Clojure是總是編譯。
Clojure編譯器生成Java字節碼,通常由JVM JIT編譯爲本地代碼。
可以混淆的是Clojure的動態和交互性,這意味着如果你願意,可以在運行時調用編譯器。這是Lisp「代碼是數據」傳統的一部分。
例如,下面將調用在運行時Clojure的編譯器來編譯和執行的形式(+ 1 2)
:
(eval '(+ 1 2))
=> 3
調用在運行時編譯的能力是非常有用的 - 例如,它使您能夠使用REPL在正在運行的Clojure應用程序中編譯和運行新代碼。但重要的是不要混淆這種「互動式」發展風格與「解讀」--Clojure開發是互動式的,但仍然是經常編譯的。
雙方! (當涉及到生成字節碼)
Clojure是上最飛越時compiled at code load time到JVM字節碼,其具有感和解釋語言的流,及ahead-of-time compiled到JVM字節碼,其具有流的編譯語言。 這兩個都是由Java Hotspot編譯器將JIT編譯爲機器代碼,後者負責Clojure的速度依賴的動態優化。只是爲了使事情變得有趣「加載/評估」代碼可以在運行時即時編譯,並且AOT編譯代碼可以在運行時加載和評估源代碼。
- 如果你想「解釋」,那麼你可以從0123的
(load "/my/file.clj")
從repl。 - 如果你想要提前編譯,我可以建議使用leiningen clojure項目管理工具。
在當我提到編譯與解釋我應該清楚,我說的是打開源代碼轉換成JVM字節碼這種情況。所有的JVM語言都是compiled by the JVM at runtime,所以區別並不是很有趣。
兩個!是錯誤的,它只有一種解釋型語言的流程,沒有任何解釋。 – nickik 2011-04-14 21:41:52
我們正在陷入純粹的定義和明確的簡潔答案之間的爭論。在最後一段。我正在討論創建JVM字節碼的過程。 – 2011-04-14 21:49:48
編輯,使之更清晰,謝謝kickik – 2011-04-14 22:08:00
Clojure是一種編譯的JVM語言。這意味着當遇到新程序時,第一步就是將其編譯爲JVM字節碼。
如果您使用的是OpenJDK或其衍生產品,某些JVM字節碼稍後可能會通過HotSpot編譯爲機器代碼。
作爲一種高級語言,Clojure具有動態類型的形式,這就是「完全動態」的短語所指的。
- 1. Java - 解釋還是編譯?
- 2. 是javascript解釋還是jit編譯
- 3. ETL是解釋還是編譯語言
- 4. .NET VM是編譯器還是解釋器?
- 5. 是解釋還是編譯的DBMS(MySQL,SQL Server ...)?
- 6. php是編譯語言還是解釋語言?
- 7. 編譯vs解釋:允許還是不允許
- 8. CUDA使用解釋器還是編譯器?
- 9. 解釋器是否編譯python腳本?
- 10. Scala有一個解釋器給Scala項目執行它們的選項是編譯還是解釋?
- 11. 編譯器vs解釋器,還是用解釋型語言編寫編譯器仍然使它成爲編譯器?
- 12. JAVA:解釋器還是編譯器? Java的文件擴展名?如何執行?
- 13. Clojure開發:IDE還是REPL?
- 14. clojure程序/編譯器/解釋器如何實際「工作」?
- 15. G729編解碼器是32kbps還是8kbps?
- 16. 是我的PHP解釋器發瘋了,還是我是誰?
- 17. Clojure編譯
- 18. 編譯Clojure?
- 19. 飛鏢編譯器瘋了,還是我?
- 20. LLVM編譯優化bug還是什麼?
- 21. 我應該用/ MD還是/ MT編譯?
- 22. 編譯解釋語言
- 23. python編譯器包解釋
- 24. 從解釋到編譯heist
- 25. QMetaObject編譯器解釋?
- 26. Java編譯器/解釋器
- 27. 腳本解析後還是立即編譯?
- 28. 什麼是Perl 5的可用編譯器/解釋器?
- 29. 解釋器或編譯器中的單元格是什麼?
- 30. Python是否使用編譯器或解釋器或組合?
JFGI。看看項目主頁。 – Marcin 2011-04-14 21:30:43
@Marcin我做了,但它讓我困惑了一下。你能否與donwvote一起提供一個aswer? – OscarRyz 2011-04-14 21:32:00
「Clojure是一種編譯語言 - 它直接編譯爲JVM字節碼,但仍保持完全動態。」夠清楚了嗎? – Marcin 2011-04-14 21:33:56