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

欢迎!请参阅关于页面以获取有关此操作的一些更多信息。

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
by

评论者为:alexmiller

1) 尚未发布支持JDK 8的ASM。ASM 5将会,但直到JDK 8发布到最终阶段之前它不会是最终的。

2) 可能更可能。

0
by

评论者为:bronsa

截至目前,JDK8和ASM5都已发布。
我刚刚尝试使用JDK8和ASM5编译clojure,所有操作都编译正常。

0

评论者为:alexmiller

你是怎样运行这个测试的?

0

评论者为:bronsa

我下载了ASM5,替换了clojure中捆绑的ASM,更改包名为"clojure.asm",并执行mvn install,所有测试都通过。

0

评论者为:alexmiller

我实际上在谈论JDK 8的变化——想知道具体变动了什么?

0

评论者为:alexmiller

特别是,我假设你没有更改构建.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
by

评论者为:alexmiller

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

0
by

由:jafingerhut发表的评论

完全理解——这里没有关于 Clojure 1.10 版本的压力。只是有时浏览一下待处理缺陷列表,看看哪些我可能有所了解。

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