Clojure編譯器(它只是一個jar/java應用程序)用來生成JVM字節碼的庫/ api是什麼?我很好奇,因爲字節碼是由java而不是javac在運行時生成的,所以它是一個輸出jvm字節碼的java程序。Clojure編譯器如何生成JVM字節碼?
回答
Clojure使用名爲ASM的Java庫來生成字節碼。一部分lib的fork被嵌入到clojure項目中:https://github.com/clojure/clojure/tree/master/src/jvm/clojure/asm
Clojure編譯器如何生成JVM字節碼?
這只是Java編程(除非他們已經將自己的代碼生成器引導到Clojure ......這看起來不太可能)。作爲總體簡化,正在打開一個文件,按照JVM規範指定的「classfile」格式寫出代碼,然後關閉文件。 (或者編寫代碼來一個ByteArrayOutputStream或同等學歷)。
爲了記錄在案,有什麼什麼Clojure的編譯器做的和Java編譯器可以做,如果你在運行時調用它之間有質的不同。但顯然,由於語言的差異以及各個開發人員的不同想法和優先級,細粒度細節會有所不同。
1 - 如果你想知道如何代碼生成器在一般工作,請繼續閱讀編譯器編寫的教科書。關於Clojure的所有細節,請查看源代碼...
我知道關於Clojure和Java字節碼生成的一個例外是Clojure本地清除,它沒有Java模擬iirc。 – noisesmith
有一個CinC(Clojure中的Clojure)項目,可以在不使用任何Java代碼的情況下生成Clojure字節碼,但尚未成熟。 – noisesmith
- 1. 如何將JVM彙編代碼編譯爲字節碼?
- 2. clojure編譯器生成的字節碼中的「public static {}」是什麼意思?
- 3. Oracle和Eclipse編譯器生成的java字節碼差異
- 4. JavaScript字節碼編譯器?
- 5. 如何檢查Clojure從repl生成的java字節碼?
- 6. 如何設置javac編譯器標誌來生成1.7字節碼?
- 7. 如何在使用手寫編譯器生成字節碼時處理範圍
- 8. 編譯器代碼生成器驗證
- 9. 構建在JVM上運行並生成Java字節碼的F#編譯器的最簡單方法是什麼?
- 10. 是否可以查看由JVM熱點編譯器生成的機器代碼?
- 11. 編譯時如何生成代碼?
- 12. 如何讓Java編譯器在編譯代碼中生成行號碼
- 13. 從Eclipse的編譯單元生成字節碼
- 14. 序列化,編譯和字節代碼生成
- 15. Scala的多個參數列表是如何被編碼成JVM字節碼
- 16. Haskell編譯器的代碼生成
- 17. javax.annotation.processing.AbstractProcessor:編譯器生成的代碼
- 18. Swift編譯器 - 代碼生成
- 19. 編譯器代碼生成比較
- 20. JavaScript中的Java字節碼編譯器
- 21. 內部字節碼(P-CODE)編譯器
- 22. C++到CLR的字節碼編譯器?
- 23. Django的xhtml2pdf - 生成PDF(編解碼器不能解碼字節)
- 24. 編譯時代碼生成
- 25. 從jvm字節碼生成java類文件頭
- 26. 爲一個一元非表達式生成JVM字節碼
- 27. 我應該看看java編譯器產生的字節碼嗎?
- 28. 字節碼編譯錯誤
- 29. 基於JVM的語言/運行時如何生成Java字節碼?
- 30. 一個編譯器,編譯到達爾維克字節碼?
它實際上是ASM的一個子集。作爲Clojure 1.6的一部分,該子集最近在master中更新爲ASM 4.1。更新了 –
,謝謝 – noisesmith