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

欢迎!请参阅关于页面以获取有关如何使用此页面的更多信息。

0
Clojure
反射不会在 JVM 调用之间返回相同的方法顺序(通过 Class::getMethods)。当将可调用和可运行(Callable 和 Runnable)的 Clojure 函数提交给执行器时,这可能是最明显的。


(ns repro)

;;(set! *warn-on-reflection* true)

(defn repro
  []
  (let [exec (java.util.concurrent.ForkJoinPool/commonPool)
        work #(do 1)]
    (deref (.submit ^Object exec work))))  ;; 故意反射

(defn -main []
   ;; dereffing a runnable returns nil, a callable can return a value, in this case an integer
  (System/exit (or (repro) 0)))



nondeterministic ➜ while true; do clojure -m repro; echo $?; done
0
0
0
1
0
0
0
1
0
0
0

5 个答案

0

评论者:gshayban

附加了一个对已见方法的排序补丁

0

评论者:gshayban

re patch:比较器的第一次遍历(检查arity)可以消失:只有相同arity的方法会被比较。这听起来对吗?

0

评论者:bronsa

是的,听起来是对的

0

评论者:gshayban

包含更最小化的比较器的补丁

0
参考:[https://clojure.atlassian.net/browse/CLJ-2413](https://clojure.atlassian.net/browse/CLJ-2413)(由gshayban报告)
...