Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
因为 Clojure 构建在 JVM 之上,我想我可以使用GCJ直接将其编译为机器代码,但我找不到任何有关它的信息。
如果可能的话,我怎么能把它“剥离”到它的基本要素,所以启动时间和内存占用尽可能小。
我真的很想用 Clojure 编写遵循 UNIX 原则的小型终端程序
理论上,您可以将 Clojure 源代码 AOT 编译为 Java 字节码,然后使用gcj将这个字节码编译为本机机器码。在实践中,我不希望这会起作用。gcj有严重的限制,使其无法用于大多数现代 Java 应用程序。具体来说,它对语言特性的支持在 Java 1.2 停止(Clojure 需要Java 1.6),并且它对 Clojure 运行时所需的标准类库的实现不完整。在野外,我看到 Clojure 应用程序在使用gcj运行时而不是 OpenJDK 或 Oracle JRE 意外启动时崩溃和烧毁。
gcj
clojure 编译器通常从文件中获取源“表达式”,并生成 JVM 字节码。然后这个字节码被 JVM 编译为 JIT 风格的机器码。clojure 编译器和 GCJ 都是编译器,尽管针对不同的语言,所以讨论一个接一个地链接是没有意义的。clojure 编译器不生成 java 源代码,它直接生成字节码。