2024状态调查中分享您的看法!

欢迎!请参阅关于页面以了解更多关于这是如何工作的信息。

0
Clojure

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

这可以缩小到以下两个最新Clojure和JDK8评估的行为差异

`
;; 以下两行与最新的(2014年1月11日)Clojure 1.6.0-master-SNAPSHOT一起工作
;; 但在JDK 8中抛出异常,如果在JDK 6或JDK 7上运行。

(import '[clojure.asm ClassReader ClassVisitor Type Opcodes])
(def r (ClassReader. "java.lang.Object"))
`

我不确定,但经过一些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替换为该版本,并将包名改为"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 运行时会失败,因为测试中没有取消注释会抛出异常,尝试调用({{(type-reflect classname :reflector asm-reflector)}})对于类 {{java.io.FileInputStream}}(以及可能在向量中的其他类)。

按照当前补丁的方式,以下版本的组合下所有测试都通过
+ 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

评论者:alexmiller

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

0

评论由:jafingerhut发表

完全明白 -- 1.10 版本发布这里并不着急。只是偶尔浏览了一下长期以来悬而未决的缺陷缺陷单列表,看看哪些我可能有点儿话要说。

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