core-async

ghadi 2019-06-11T12:24:19.086600Z

https://clojure.atlassian.net/browse/ASYNC-227

1🐛
ghadi 2019-06-11T16:21:19.087100Z

A new release of Clojure core.async is available: Release 0.4.500 on 2019.06.11 * https://clojure.atlassian.net/browse/ASYNC-227 cljs alts! isn't non-deterministic * https://clojure.atlassian.net/browse/ASYNC-224 Fix bad putter unwrapping in channel abort * https://clojure.atlassian.net/browse/ASYNC-226 Fix bad cljs test code {org.clojure/core.async {:mvn/version "0.4.500"}}

ghadi 2019-06-11T16:21:24.087300Z

@pmooser ^

2019-06-11T18:25:15.087700Z

@ghadi Woohoo! Thank you for getting that out quickly.

2019-06-11T18:25:37.088100Z

I wish I understood core.async internals better. I should dedicate more time.

2019-06-11T18:27:12.088800Z

@ghadi As long as I am bugging you about core.async issues, are you guys aware that "case" is unsafe to use in core.async in certain circumstances (which I can't precisely describe) ?

2019-06-11T18:27:33.089100Z

If you are unaware of it, I can try to find some sort of breaking example later today.

2019-06-11T19:46:06.089600Z

@hiredman Thank you !

2019-06-11T21:46:02.092900Z

I’m trying to run the client code from https://github.com/fullcontact/full.http from the repl and I keep getting

Exception in thread "async-dispatch-1" java.lang.IllegalStateException: Attempting to call unbound fn: #'clojure.core.async.impl.ioc-macros/process-exception
	at clojure.lang.Var$Unbound.throwArity(Var.java:45)
	at clojure.lang.AFn.invoke(AFn.java:32)
	at full.http.client$process_response$fn__253$state_machine__4512__auto____254$fn__256.invoke(client.clj:72)
	at full.http.client$process_response$fn__253$state_machine__4512__auto____254.invoke(client.clj:72)
	at clojure.core.async.impl.ioc_macros$run_state_machine.invokeStatic(ioc_macros.clj:973)
	at clojure.core.async.impl.ioc_macros$run_state_machine.invoke(ioc_macros.clj:972)
	at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invokeStatic(ioc_macros.clj:977)
	at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invoke(ioc_macros.clj:975)
	at full.http.client$process_response$fn__253.invoke(client.clj:72)
	at clojure.lang.AFn.run(AFn.java:22)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

2019-06-11T21:46:26.093600Z

any ideas on what I may be doing wrong?

2019-06-11T21:47:27.094600Z

check your dependency manager for version conflicts - sounds like something is trying to use functions from a different version of core.async than the one you have pulled in

2019-06-11T21:47:37.094900Z

with leiningen you can check this with lein deps :tree

2019-06-11T21:48:12.095200Z

thanks!

2019-06-11T21:51:09.095600Z

it looks like something was aot compiled against a different version of core.async

2019-06-11T21:52:28.096200Z

yeah, this is a bug in full.async https://github.com/fullcontact/full.http/blob/master/project.clj#L18

2019-06-11T21:52:48.097100Z

to have that many deps as a lib, then aot, is pathological

2019-06-11T21:54:44.099400Z

the process-exception function is part of the old broken the go macro processed exceptions, so macros expanded against the old version (aot compiled) reference it, but newer versions of core.async's go macro have a new exception handling mechanism (and also broken but maybe slightly less so, and I have patches in jira but they never get merged) and process-exception doesn't exist

alexmiller 2019-06-11T21:59:18.100200Z

sorry about the never merging part btw. it's not for lack of desire, only for lack of time and focus.

1
alexmiller 2019-06-11T21:59:48.100800Z

some day I will get around to those...

alexmiller 2019-06-11T22:01:41.104300Z

I did look at some of them today but I found it a little difficult to assess which ones were ready to go, which were speculative, which definitely were not ready, etc. I don't know what I need exactly, other than maybe a prioritized list of what to look at.

2019-06-11T22:05:29.107900Z

a complication at this point is someone opened a bug for an issue (async-198) which has a patch to fix, and then someone found another issue (async-220) which the patch for async-198 didn't fix, so the async-220 patch depends on the async-198 patch, and then someone else ran in to the async-220 issue and commented on the async-198 issue that the patch there doesn't fix it (I haven't actually verified that the async-220 fixes the issue in the comments on async-198)

2019-06-11T22:07:17.109300Z

oh, and then the cljs side of things is a whole other thing because the original fix to exception handling there hasn't been merged yet, so that ticket/patch got updated to include the async-198 fixes, but hasn't been updated in light of async-220 (I also lack time and focus)

2019-06-11T22:15:12.110400Z

Thanks y’all. Didn’t mean to cause a ruckus. :)

alexmiller 2019-06-11T22:32:21.110900Z

so, yes - exactly this kind of stuff is why I never get far enough into it to feel comfortable merging anything

alexmiller 2019-06-11T22:33:30.111100Z

and not feeling like there is enough test coverage in general to ensure that the changes don't break something

alexmiller 2019-06-11T22:33:48.111300Z

not saying either of these is your fault!

alexmiller 2019-06-11T22:34:27.111600Z

it just is what it is

alexmiller 2019-06-11T22:34:35.111900Z

no worries :)