2024年Clojure状态调查中分享您的想法!

欢迎!请参阅关于页面以获取更多有关该功能的信息。

0
Clojure

在提交更新后的ASM库(CLJ-713)之后,Clojure构建并通过了除了reflect.clj中的compare-reflect-and-asm之外的所有测试。

这可以缩小到以下两个形式在使用最新的Clojure和JDK8时的行为差异

`
;; 以下两行在最新的(2014年1月11日)Clojure 1.6.0-master-SNAPSHOT上运行时正常,但如果在JDK 6或JDK 7上运行,则会抛出异常。
(import '[clojure.asm ClassReader ClassVisitor Type Opcodes])

(def r (ClassReader. "java.lang.Object"))
I不确定,但通过一点Google搜索似乎这可能是ASM库版本4的限制 - 当尝试读取JDK 8生成的类文件时,它会抛出异常,因为这涉及新的类文件版本号。
`

支持这一结论的链接

http://mail-archive.ow2.org/asm/2013-02/msg00000.html

http://forge.ow2.org/tracker/index.php?func=detail&aid=316375&group_id=23&atid=350023

有一些替代方案是:

(1) 再次更新ASM以支持JDK 8类文件

(2) 禁用compare-reflect-and-asm测试。Clojure本身不使用AsmReflector来执行任何事情,除了这个单元测试。Java反射器是默认的。

11 个答案

0

评论者:alexmiller

1) 目前还没有发布支持JDK 8的ASM。ASM 5会,但不会在JDK 8进入最终发布阶段之前完成。

2) 可能更多。

0

评论者:bronsa

到目前为止,JDK8和ASM5都已经发布。
我只是尝试使用JDK8和ASM5编译clojure,一切编译正常

0

评论者:alexmiller

你是如何运行这个测试的?

0

评论者:bronsa

我下载了ASM5,在将包名改为"clojure.asm"之后,用这个ASM替换clojure中捆绑的ASM,然后运行mvn install,所有测试都通过了。

0

评论者:alexmiller

我实际上在谈论JDK 8的变化——我对具体发生了什么变化感到好奇?

0

评论者:alexmiller

特别是,我假设你还没有修改build.xml来更改编译的-Source或-target,并且使用设置的JAVA_HOME/path运行JDK 8。

我们实际上没有计划在不久的将来用JDK 8构建Clojure,所以我对这一点不是很在意。但是,嵌入的ASM 4不能读取JDK 8中的新类文件。据我所知,这发生在clojure.reflect.java中的AsmReflector处,它不是默认的反射器。JavaReflector将正确地反射Java 8类。

ASM 5已经发布了几天,已经有至少一个严重的错误报告——我们希望在切换到它之前看到更多的使用,所以这可能是Clojure 1.6之后发布的好目标。

0

评论者:alexmiller

补丁,暂时禁用失败的测试,直到我们有一个支持JDK 8的ASM。

0

评论者:jafingerhut

我已经测试了Clojure 1.10.0-RC3的最新代码,通过使用附加的补丁clj-1323-experiment-v1.patch重新启用之前禁用的测试。

如果不对文件src/clj/clojure/reflect/java.clj进行修改,则在运行OpenJDK 11时会失败,因为未取消注释的测试在尝试对类java.io.FileInputStream调用{{(type-reflect classname :reflector asm-reflector)}}时抛出异常(并且在vector中的其他类可能也会抛出异常)。

使用所写的补丁,在以下版本组合下所有测试都通过:
+ Mac OS X 10.13.6加上Oracle Java 1.8.0_192
+ Ubuntu 16.04.5加上OpenJDK 11 - 未取消注释的测试会抛出异常

我并不是说我知道这个补丁是好的,或者我在文件src/clj/clojure/reflect/java.clj中做出的改变的全面影响。我只是想要运行一个实验,看看我能否使被注释掉的测试再次通过。像Ghadi Shayban这样的人在评估这种变化的影响上比我更有能力。

0
by

评论者:alexmiller

不打算为Clojure 1.10做这件事,但可以评估1.11。

0
by

评论者:jafingerhut

完全理解——这里没有急迫需要Clojure 1.10发布。不过是最近一段时间第一次浏览仍未解决的缺陷票据列表,看看哪些问题我可能略有所知。

0
by
参考: https://clojure.atlassian.net/browse/CLJ-1323(由jafingerhut报告)
...