请分享您的看法:2024 年 Clojure 状态调查!

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

0
ClojureScript

以下内容在 Java 8 中有效,但在 Java 9 中无效

$ java -version java version "9.0.4" Java(TM) SE 运行环境(构建 9.0.4+11)Java HotSpot(TM) 64 位服务器 VM(构建 9.0.4+11,混合模式)$ script/nashornrepljs 要退出,请输入::.cljs/quit cljs.user=> (require 'cljs.js) 函数有超过 262143 个程序点 cljs.user=> cljs.js nil

可能与 CLJS-2530 密切相关。

3 个答案

0

评论者:mfikes

为{{(dump-core)}}生成的 JavaScript 代码显然足够大,以至于我们触发了存在于 JDK 8 中的一个限制,但现在是 JDK 9 更容易触发的限制。

具体请参见

http://hg.openjdk.java.net/jdk9/jdk9/nashorn/file/17cc754c8936/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/ProgramPoints.java#l57

http://hg.openjdk.java.net/jdk9/jdk9/nashorn/file/17cc754c8936/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/NashornCallSiteDescriptor.java#l156

所涉及的限制在此更改集中进行了修订http://hg.openjdk.java.net/jdk9/jdk9/nashorn/rev/7cb19fa78763#l48.108

在其中的{{CALLSITE_PROGRAM_POINT_SHIFT}}从 11 增加到 14,将{{MAX_PROGRAM_POINT_VALUE}}从 21 位减少到 18 位。(2^18 - 1 = 262143)

这与此票据有关https://bugs.java.com/view_bug.do?bug_id=8139931

请注意,如果您阅读了 JDK 代码中的注释,您可以看到有一种假设,即 JavaScript 方法拆分器已将大的函数拆分得足够小,以便适应这些限制。也许 ClojureScript 生成的函数不适合拆分。

0
by

评论者:mfikes

使用Java 10时,可能用掉了另一个位

$ java -version java version "10" 2018-03-20 Java(TM) SE Runtime Environment 18.3 (build 10+46) Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode) $ clj -A:cljs/rel -re nashorn cljs.user=> (require 'cljs.js) 函数具有超过131071个程序点

0
by
参考:[链接](https://clojure.atlassian.net/browse/CLJS-2531)(由mfikes报告)
...