Open issues

Non-deterministic method selection during reflection
CLJ-2413
[spec] Nesting cat inside ? causes unform to return nested result
CLJ-2003
[spec] clojure.spec/def should support an optional doc-string
CLJ-1965
New socket server startup proactively loads too much code, slowing boot time
CLJ-1891
empty? is broken for transient collections
CLJ-1872
Make `satisfies?` as fast as a protocol method call
CLJ-1814
Avoid compile-time static initialization of classes when using inheritance
CLJ-1743
clojure.java.io/pushback-reader
CLJ-1611
Enhance multimethods metadata
CLJ-1522
Unrolled small vectors
CLJ-1517
aset-* and aget perform poorly on multi-dimensional arrays even with type hints.
CLJ-1289
make use of deprecated namespaces/vars easier to spot
CLJ-706
java method calls cannot omit varargs
CLJ-440
Add 2-arity semantic to sets
CLJ-2532
Compiler.load() reports wrong exception phase
CLJ-2529
Exceptions thrown in tests outside assertions don't report *testing-contexts*
CLJ-2525
Unpredictable behaviour with some-> and autoboxing primitives.
CLJ-2522
ClassFormatError when nesting try->loop->try
CLJ-2521
CompilerException java.lang.ClassFormatError: Duplicate field name&signature
CLJ-2518
calls to static interface methods are broken for primitive args
CLJ-2517
[spec] spec creation should allow checking validity of specs
CLJ-2515
Supporting `add-method` on multi fns to install a function instead of a function tail
CLJ-2514
Macroexpanded case statement throws `java.lang.NegativeArraySizeException`
CLJ-2511
remote-prepl blocks main-thread upon in-reader's eos
CLJ-2509
Cannot use clojure.stracktrace/print-stack-trace with GraalVM
CLJ-2502
Provide guidance on configuring error printer for handling errors
CLJ-2501
[spec] explain-data :via loses aliased keys
CLJ-2496
prepl docstring doesn't correctly doc exception :ret maps
CLJ-2495
clojure.reflect protocol meta regression
CLJ-2494
clojure.java.shell/sh hangs calling xdg-open
CLJ-2493
Uses of deprecated Class.newInstance() method
CLJ-2492
[spec] generator in keys* spec not overridable
CLJ-2483
Document that a promise can be invoked to deliver
CLJ-2480
[core.specs] Destructuring spec is overly restrictive in namespaced :keys
CLJ-2473
peek does not support transient vectors
CLJ-2464
Clojure-aware error stacktrace rendering
CLJ-2456
Doc that rseq works on colls satisfying reversible?
CLJ-2455
Add convenience parse-int, parse-float, parse-short, etc. functions
CLJ-2451
[spec] defining new multimethod for a speced multi method fails under instrumentation
CLJ-2450
[spec] Spec'ed fn doesn't throw when called lazily
CLJ-2443
The 'do symbol is skipped in some contexts where it shouldn't be
CLJ-2439
Invalid calls to clojure.set functions return an incorrect answer rather than error
CLJ-2433
clojure.java.io/resource NPEs when the context ClassLoader is null
CLJ-2431
Separate compiler exceptions into :compilation and :compile-syntax-check
CLJ-2428
satisfies? doesn't work with the new instance-based protocol polymorphism
CLJ-2426
[core.specs] defmulti and defmethod spec
CLJ-2416
[spec] When spec is simple alias for another spec, :via paths contain duplicates
CLJ-2410
[spec] `cat` and `keys*` have different semantics for `:in` path when spec fails
CLJ-2406
The doc string for vector is incorrect
CLJ-2405
Proxy generated from (bean) doesn't work with clojure.walk
CLJ-2399
issue 1 of 723

Non-deterministic method selection during reflection

Description

Reflection does not return the same order of methods across JVM invocations (via Class::getMethods). This is probably most apparent when submitting Clojure functions, which are Callable and Runnable, into an executor:

1 2 3 4 5 6 7 8 9 10 11 12 13 (ns repro) ;;(set! *warn-on-reflection* true) (defn repro [] (let [exec (java.util.concurrent.ForkJoinPool/commonPool) work #(do 1)] (deref (.submit ^Object exec work)))) ;; intentionally reflect (defn -main [] ;; dereffing a runnable returns nil, a callable can return a value, in this case an integer (System/exit (or (repro) 0)))
1 2 3 4 5 6 7 8 9 10 11 12 nondeterministic ➜ while true; do clojure -m repro; echo $?; done 0 0 0 1 0 0 0 1 0 0 0

Environment

None

Status

Assignee

Unassigned

Reporter

Ghadi Shayban

Labels

Approval

Triaged

Patch

Code

Priority

Critical