I'm quite curious about what the compiled code looks like. (On a mobile now, I'll have a look when I can.)
I'm quite curious about what the compiled code looks like. (On a mobile now, I'll have a look when I can.)
But core.async does some amazing stuff to actually analyze the code inside a "go" block and recompile it as a state machine so that a single thread can be "parked" and resumed. This allows core.async to work without multiple threads. It does this all at macro expansion time. This is the sort of thing that really demonstrates the power of Lisp. There's no way to do this without modifying the compiler in a language without a macro system.
So the output of a core.async program is going to be startlingly different than a normal ClojureScript program, because of the way it takes your "go" blocks apart and rewrites them when the macro is expanded.
Here's an example.
I wonder if most of that is the runtime and libraries or the resulting JavaScript code is just that big.