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

欢迎!请参阅关于页面以获取更多有关该平台如何工作的信息。

0
Clojure

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

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

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

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

我不确定,但通过一点谷歌搜索,这似乎是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都已发布。
我尝试使用ASM5在JDK8上编译Clojure,并且一切正常。

0

由:alexmiller

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

0

由:bronsa

我下载了ASM5,在将包名改为 "clojure.asm" 后,用该版本替换了clojure附带的ASM,然后运行 mvn install,所有测试都通过了。

0

由:alexmiller

我实际上是在谈论JDK 8的更改——我很好奇确切是什么被更改了?

0

由:alexmiller

具体来说,我假设你没有修改build.xml来更改编译的 -source 或 -target ,并且用JAVA_HOME / 路径设置为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}}(以及可能在该向量中的其他类)时将抛出异常。

使用提供的补丁,所有测试组合均通过
+ macOS 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

绝对明白 —— 对于Clojure 1.10的发布没有紧急情况。我只是最近才扫过一遍开放的缺陷票据列表,看看有哪些我能说一点关于的。

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