请在2024 Clojure状态调查!分享您的想法。

欢迎!请查看关于页面以了解有关此操作的一些更多信息。

0
ClojureScript

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

$ java -version java version "9.0.4" Java(SE)运行时环境(构建9.0.4+11) Java HotSpot(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

由mfikes发表的评论

使用Java 10时,可能消耗了另一部分比特

$ java -version java version "10" 2018-03-20 Java(TM) SE 运行时环境 18.3 (构建 10+46) Java HotSpot(TM) 64位服务器VM 18.3 (构建 10+46,混合模式) $ clj -A:cljs/rel -re nashorn cljs.user=> (require 'cljs.js) 函数有超过131071个程序点

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