is there a known issue related to unresolved calls to aset within missionary's generated code? it seems to occur when java interop and conditionals are used together. using java.io.Closeable as a convenient example:
(set! *warn-on-reflection* true)
(defn foo ^Closeable []
nil)
(defn reflection-2b []
(m/sp (if true (.close (foo)))))
error looks something like:
Reflection warning, .../missionary-lab/src/missionary_lab/reflection.clj:28:3 - call to static method aset on clojure.lang.RT can't be resolved (argument types: [Ljava.lang.Object;, int, void).
it initially popped up when i tried to use a cond-> nested within a doto, but i managed to narrow it down to just a bare if. full example here https://github.com/hokomo/missionary-lab/blob/master/src/missionary_lab/reflection.cljanother reflection issue are "performance warnings" related to amb, e.g.:
(defn select [& flows]
(m/ap
(loop [[f & fs] flows]
(if f
(m/amb= (m/?> f) (recur fs))
(m/amb)))))
this results in:
Performance warning, .../missionary-lab/src/missionary_lab/performance.clj:8:3 - case has int tests, but tested expression is not primitive.separate, but perhaps related, are ClassNotFoundException errors that i get relatively rarely when executing an sp block. i haven't managed to find the root cause or figure out how to reproduce it consistently, but wrapping the sp with a with-loading-context resolves the issue. it also seems to disappear after app restart and only pops up during heavy use of the repl. here's an example trace (app details omitted):
java.lang.ExceptionInInitializerError
at com.example.code$foo.invokeStatic(code.clj:787)
at com.example.code$foo.invoke(code.clj:784)
at com.example.code$bar2$cr84251_block_3__84253.invoke(code.clj:819)
at cloroutine.impl$coroutine$fn__33204.invoke(impl.cljc:61)
at missionary.impl.Sequential.step(Sequential.java:88)
at missionary.impl.Sequential.run(Sequential.java:125)
at missionary.core$sp_run.invokeStatic(core.cljc:187)
at missionary.core$sp_run.invoke(core.cljc:186)
at cloroutine.impl$coroutine$fn__33204.invoke(impl.cljc:66)
at clojure.core$partial$fn__5908.invoke(core.clj:2642)
at missionary.core$attempt$fn__33562.invoke(core.cljc:130)
at missionary.impl.RaceJoin.run(RaceJoin.java:89)
at missionary.core$race$fn__33559.invoke(core.cljc:121)
at missionary.core$absolve$fn__33573.invoke(core.cljc:140)
at com.example.util$executor_task$fn__82568.invoke(util.clj:139)
at missionary.impl.Sequential.suspend(Sequential.java:74)
at missionary.impl.Sequential$Process.park(Sequential.java:40)
at missionary.impl.Fiber.park(Fiber.java:85)
at missionary.core$park.invokeStatic(core.cljc:174)
at missionary.core$park.invoke(core.cljc:173)
at com.example.util$tryer$cr82325_block_1__82328.invoke(util.clj:31)
at cloroutine.impl$coroutine$fn__33204.invoke(impl.cljc:61)
at missionary.impl.Sequential.step(Sequential.java:88)
at missionary.impl.Sequential.run(Sequential.java:125)
at missionary.core$sp_run.invokeStatic(core.cljc:187)
at missionary.core$sp_run.invoke(core.cljc:186)
at cloroutine.impl$coroutine$fn__33204.invoke(impl.cljc:66)
at clojure.core$partial$fn__5908.invoke(core.clj:2642)
at missionary.impl.Ambiguous.suspend(Ambiguous.java:424)
at missionary.impl.Ambiguous$Branch.park(Ambiguous.java:50)
at missionary.impl.Fiber.park(Fiber.java:85)
at missionary.core$park.invokeStatic(core.cljc:174)
at missionary.core$park.invoke(core.cljc:173)
at com.example.util$executor$cr82553_block_1__82557.invoke(util.clj:125)
at cloroutine.impl$coroutine$fn__33204.invoke(impl.cljc:61)
at missionary.impl.Ambiguous.ready(Ambiguous.java:351)
at missionary.impl.Ambiguous$1.invoke(Ambiguous.java:93)
at cloroutine.impl$coroutine$fn__33204.invoke(impl.cljc:65)
at missionary.impl.Ambiguous.backtrack(Ambiguous.java:102)
at missionary.impl.Ambiguous.branch(Ambiguous.java:143)
at missionary.impl.Ambiguous.ready(Ambiguous.java:399)
at missionary.impl.Ambiguous$2.invoke(Ambiguous.java:430)
at missionary.impl.Ambiguous$2.invoke(Ambiguous.java:442)
at missionary.impl.Mailbox.post(Mailbox.java:42)
at missionary.impl.Mailbox$Port.invoke(Mailbox.java:21)
at com.example.util$executor_exec.invokeStatic(util.clj:145)
at com.example.util$executor_exec.doInvoke(util.clj:143)
at clojure.lang.RestFn.invoke(RestFn.java:494)
at clojure.core$partial$fn__5910.invoke(core.clj:2650)
at com.example.code$baz$init__84283.invoke(code.clj:838)
at com.example.code$idle_until$idle__84172.invoke(code.clj:781)
at com.example.util$machine_main$fn__82587.invoke(util.clj:151)
at missionary.core$reductions$fn__33694.invoke(core.cljc:618)
at missionary.impl.Reductions.transfer(Reductions.java:40)
at missionary.impl.Reductions$Process.deref(Reductions.java:30)
at missionary.impl.Reduce.transfer(Reduce.java:33)
at missionary.impl.Reduce.ready(Reduce.java:55)
at missionary.impl.Reduce$1.invoke(Reduce.java:69)
at missionary.impl.Reductions$1.invoke(Reductions.java:89)
at missionary.impl.Ambiguous$2.invoke(Ambiguous.java:432)
at missionary.impl.Ambiguous$2.invoke(Ambiguous.java:442)
at missionary.impl.Rendezvous.give(Rendezvous.java:117)
at missionary.impl.Rendezvous$Give.invoke(Rendezvous.java:53)
at missionary.impl.Sequential.suspend(Sequential.java:74)
at missionary.impl.Sequential$Process.park(Sequential.java:40)
at missionary.impl.Fiber.park(Fiber.java:85)
at missionary.core$park.invokeStatic(core.cljc:174)
at missionary.core$park.invoke(core.cljc:173)
at com.example.code$baz$cr84303_block_4__84315.invoke(code.clj:857)
at cloroutine.impl$coroutine$fn__33204.invoke(impl.cljc:61)
at missionary.impl.Sequential.step(Sequential.java:88)
at missionary.impl.Sequential$1.invoke(Sequential.java:112)
at missionary.impl.Thunk$Process.run(Thunk.java:71)
at com.example.code$baz$cr84303_block_4__84315.invoke(code.clj:857)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.ClassNotFoundException: clojure.lang.PersistentArrayMap
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:536)
at java.base/java.lang.Class.forName(Class.java:515)
at clojure.lang.RT.classForName(RT.java:2209)
at clojure.lang.RT.classForName(RT.java:2218)
at com.example.code$foo$cr84180_block_4__84188.(code.clj:787)
... 83 common frames omitted