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 位服务器虚拟机 (版本 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 中存在但现在更容易触碰到的一个限制。

具体请参阅

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
...