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

欢迎!请查看关于页面以获取有关此功能的更多信息。

0
编译器
编辑

看起来未检查的数学没有将(long)转换为(unchecked-long),但(int)却如此。我相信这是一个错误,如果不是,我也不确定为什么,因为作为一个用户,我期望未检查的数学标志将所有有等价未检查变体的函数转换为那个变体。

(set! *unchecked-math* true)
(decompile (int (nth [1 2 3] 1)))
;; RT.uncheckedIntCast(RT.nth(const__5, RT.uncheckedIntCast(1L)));
(decompile (long (nth [1 2 3] 1)))
;; Numbers.num(RT.longCast(RT.nth(const__5, RT.uncheckedIntCast(1L))));

(set! *unchecked-math* false)
(decompile (int (nth [1 2 3] 1)))
;; RT.intCast(RT.nth(const__5, RT.intCast(1L)));
(decompile (long (nth [1 2 3] 1)))
;; Numbers.num(RT.longCast(RT.nth(const__5, RT.intCast(1L))));

记录日志:https://clojure.atlassian.net/browse/CLJ-2551

1 答案

0

已记录在jira

...