自动将Clojure源转换为Java源的最佳方法

时间:2011-07-02 16:05:02

标签: java clojure

我想使用Clojure工作源代码文件(.clj)并将它们自动转换为等效的java源代码文件(.java)。我想知道最好的方法是什么,或者甚至可能。转换后的java源代码需要足够可接受。

4 个答案:

答案 0 :(得分:17)

正如其他人指出的那样,你最好的选择是使用字节码反编译器。你仍然需要clojure课程。但是,更重要的是,如果您的目标是生成需要由Java程序员处理的Java代码,那么您就不太可能成功。

Clojure不只是“具有不同语法的java”。它的语言结构与java有很大不同,许多惯用的Clojure在Java中看起来都很陌生。

即使您的Java代码看起来或多或少可读,您的Java开发人员也会感到非常沮丧。他们基本上仍然需要编写Lisp程序,但使用Java语法和非常奇怪的结构:这将是一团糟。

如果您希望在Java开发人员团队中使用Clojure,我会尝试将您的Clojure代码开发并打包为具有定义良好的Java API的jar。 Java开发人员会很高兴,因为它只是另一个java库,你会很高兴,因为你会编写适当的Clojure代码。

答案 1 :(得分:8)

我会尝试从.clj生成.class文件,然后使用反编译器将其反编译为.java。 JAD。

答案 2 :(得分:8)

Clojure调试工具包是一个很好的工具,用于挖掘已编译的Clojure代码,并演示了Clojure类与java源代码类不同的一些方法。 例如,编写java代码以表示Clojures闭包很困难(尽管可能)

Clojure 生成无法通过编译任何java程序生成的字节代码,因此无法实现通用解决方案。特别是Clojure在进行递归调用之前将参数(在调用帧中)置空。由于您是从源文件而不是.class文件开始的,所以如果您不尝试保证java代码将产生完全相同的行为,那么您应该能够足够接近。 Clojure可以防止在递归中出现一些内存泄漏,这在相应的java代码中很难避免。

“这段代码的目的是使参数无效以防止在递归函数调用的情况下”保持头部。“来自George Jahad关于反编译clojure类的讨论。 http://georgejahad.com/clojure/clojureDecompiled.html

答案 3 :(得分:4)

我对Clojure并不熟悉,但请注意,您通常可以读取Lisp程序并将其视为数据结构,这很可能比处理已编译的Clojure代码更好,因为这很大程度上取决于Clojure运行时。 / p>

如果这是针对您自己的程序,那么您可能会使用完整Clojure的一小部分,并且您可以使用小程序生成器处理自己。