因爲Clojure建立在JVM之上,所以我猜想我可以使用GCJ直接將其編譯爲機器代碼,但我找不到任何有關它的信息。如何/我可以使用GCJ編譯Clojure
如果可能的話,我怎麼能把它「剝離」到它的基本要素,所以啓動時間和內存佔用儘可能小。
我真的很想寫繼UNIX原則使用Clojure
因爲Clojure建立在JVM之上,所以我猜想我可以使用GCJ直接將其編譯爲機器代碼,但我找不到任何有關它的信息。如何/我可以使用GCJ編譯Clojure
如果可能的話,我怎麼能把它「剝離」到它的基本要素,所以啓動時間和內存佔用儘可能小。
我真的很想寫繼UNIX原則使用Clojure
理論上,您可以將Clojure源代碼AOT編譯爲Java字節碼,然後使用gcj
將此字節碼編譯爲本機機器碼。在實踐中,我不希望這會起作用; gcj
有severe limitations,阻止它用於大多數現代Java應用程序。具體來說,它支持Java 1.2的語言功能(Clojure需要Java 1.6),並且它具有Clojure運行時所需的標準類庫的不完整實現。在野外,我看到Clojure應用程序在使用gcj
運行時而不是OpenJDK或Oracle JRE意外啓動時崩潰並燒燬。
Clojure的編譯器會在源「表情」,通常是從一個文件,併產生JVM字節碼的小終端程序。然後這個字節碼被JVM編譯成機器碼。 clojure編譯器和GCJ都是編譯器,雖然對於不同的語言,所以談論一個接一個地鏈接是沒有意義的。 clojure編譯器不生成java源代碼,它直接生成字節碼。
[根據項目頁面](https://gcc.gnu.org/java/)GCJ可以將字節碼編譯爲機器碼。這就是我困惑的原因 – Quanttek
你沒有,你不能。 **然而**,你可以使用不同的LISP實現,可以編譯爲本地代碼。 –
如果有幫助:SBCL編譯爲本地代碼(通常非常快),我相信ECL編譯爲C. – Mars
[本討論](https://groups.google.com/forum/#!topic/clojure/) f_zn0v0wr3s)是相關的。 – Mars