我想采用Clojure工作源代码文件(.clj)并将它们自动转换为等效的java源代码文件(.java).我想知道最好的方法是什么,或者甚至可能.转换后的java源代码需要足够可接受.
Ger*_*ert 17
正如其他人所指出的,你最好的选择是使用字节码反编译器.你仍然需要clojure课程.但是,更重要的是,如果您的目标是生成需要由Java程序员处理的Java代码,那么您就不太可能成功.
Clojure不仅仅是"具有不同语法的java".它的语言结构与java非常不同,许多惯用的Clojure在Java中看起来都很陌生.
即使您的Java代码看起来或多或少可读,您的Java开发人员也会非常沮丧.他们基本上仍然需要编写Lisp程序,但使用Java语法和非常奇怪的结构:这将是一团糟.
如果您希望在Java开发人员团队中使用Clojure,我会尝试将您的Clojure代码开发并打包为具有定义良好的Java API的jar.Java开发人员会很高兴,因为它只是另一个java库,你会很高兴,因为你会编写适当的Clojure代码.
我会尝试从.clj生成.class文件,然后使用反编译器(例如JAD)将其反编译为.java.
Clojure调试工具包是一个很好的工具,用于挖掘已编译的Clojure代码,它演示了Clojure类与java源代码类不同的一些方法.例如,编写java代码以表示Clojures闭包很困难(尽管可能)
Clojure 生成无法通过编译任何java程序生成的字节代码,因此无法实现通用解决方案.特别是Clojure在进行递归调用之前将参数(在调用帧中)置空.由于您是从源文件而不是.class文件开始的,所以如果您不尝试保证java代码将产生完全相同的行为,那么您应该能够足够接近.Clojure可以防止在递归中出现一些内存泄漏,这在相应的java代码中很难避免.
"这段代码的目的是使参数无效,以防止在递归函数调用的情况下'保持头部'."来自George Jahad关于反编译clojure类的讨论.http://georgejahad.com/clojure/clojureDecompiled.html
我对 Clojure 并不十分熟悉,但请注意,您通常可以读取 Lisp 程序并将其视为数据结构,这很可能比处理编译后的 Clojure 代码更好,因为这在很大程度上取决于 Clojure 运行时。
如果这是用于您自己的程序,那么您可能可以使用完整 Clojure 的一个非常小的子集,并且您可能可以使用一个小型程序生成器来处理自己。
归档时间: |
|
查看次数: |
5949 次 |
最近记录: |