相关疑难解决方法(0)

Clojure doseq会产生巨大的代码吗?

我最近一直在玩clojure并遇到了一个我不确定如何处理的问题.我有一个带有7个参数的doseq,它扩展到一个巨大的块,几乎超过了最大的类大小.为什么doseq扩展到如此巨大的clojure代码块?

例:

(def q '(doseq
[p0 (nth (:params operator) 0 (quote (nil)))
p1 (nth (:params operator) 1 (quote (nil)))
p2 (nth (:params operator) 2 (quote (nil)))
p3 (nth (:params operator) 3 (quote (nil)))
p4 (nth (:params operator) 4 (quote (nil)))
p5 (nth (:params operator) 5 (quote (nil)))
p6 (nth (:params operator) 6 (quote (nil)))]
(do-print board (:oname operator) p0 p1 p2 p3 p4 p5 p6)))
Run Code Online (Sandbox Code Playgroud)

然后:

(macroexpand q)
Run Code Online (Sandbox Code Playgroud)

在我的机器上,这提供了大量的代码(97331字节).这是正常的还是我做错了什么?运算符是一个简单的defrecord.如果有兴趣的话,这里是扩展结果的链接:http://pastebin.com/6gw1q078

编辑:

通过做同样的事情,但是使用for form,我得到的东西要小几个数量级(3653字节):

(def q '(for
[p0 …
Run Code Online (Sandbox Code Playgroud)

macros code-generation clojure

6
推荐指数
1
解决办法
384
查看次数

方法代码太大!使用 ASM 的异常

我正在使用 ASM 代码迭代一个类而不操作任何字节代码。但是当我将 classwriter 转换为 bytearray(cw.toByteArray()) 时,我得到的方法代码太大了!例外。

谁能告诉我这是什么时候发生的..

我的代码片段如下---

InputStream in= new FileInputStream("D:/AshiqWorkspace/RandD/ByteCodeStudy/temp/GameManager.class");
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES);
ClassVisitor ca = null;
ca = new CustomClassNode(cw);  // CustomClassNode class extends ClassNode implements Opcodes
cr.accept(ca, 0);   
File outputDir=new File("D:/AshiqWorkspace/RandD/ByteCodeStudy/out");
outputDir.mkdirs();
DataOutputStream dout=new DataOutputStream(new FileOutputStream(new File(outputDir,"GameManager.class")));
dout.write(cw.toByteArray()); // on this line "method code too large exception coming"
Run Code Online (Sandbox Code Playgroud)

java java-bytecode-asm

5
推荐指数
1
解决办法
2641
查看次数