Very educational. Thank you. Re Apples and Oranges. I had a sense of that l, 
but it does not mean that many people are not using core.async in the way Shaun 
documented in the gist. On many occasions, i have seen recommended by others 
the use of core.async for everything async including scenarios where it is not 
ideal. I think calling it core.csp would make it more clear as far as what its 
purpose is. I am not entirely sure about error handling with core.async but  
I've seen examples of async try/catch in that context. I see async/await, which 
is syntax sugar in es7 on top of Promise, as a more universal tool, which can 
be used to provide CSP functionality (see async-csp on github) or Promise like 
functionality (but much nicer to use than Promise) 

Sent from my iPhone

> On Sep 16, 2015, at 1:42 PM, Andrey Antukh <[email protected]> wrote:
> 
> Hi!
> 
> I think you are comparing apples with oranges. CSP and async/await can't be 
> compared directly. Async/await works with a promise (one value) abstraction 
> and csp works with channel abstraction (sequence).
> 
> It seems is an anti-pattern use channels as promises because them does not 
> has the notion of error. I remember that Timothy Baldridge have said 
> something similar about this:
> 
> "A sort of anti-pattern I see a lot is creating a lot of one-shot channels 
> and go blocks inside every function. The problem, as you see is that this 
> creates a lot of garbage. A much more efficient plan is to stop using 
> core.async as a RPC-like system, and start using it more like a dataflow 
> language: Identity data sources and sinks, and then transform and flow the 
> data between them via core.async. 
> 
> It's interesting to note that core.async started as something that looked a 
> lot like C#'s Async/Await, but that was dropped in favor of CSP pretty 
> quickly. So there's reasons why the language isn't optimized for this sort of 
> programming style. "
> 
> Source: https://groups.google.com/d/msg/clojure/57ig0si3gUM/vRr-T1IaebUJ
> 
> Without the intention to make spam, the funcool/cats 
> (https://github.com/funcool/cats) `mlet`  macro does something similar in 
> semantics that async/await does. It there some examples using the ES6/7 
> compatible promise library: 
> http://funcool.github.io/promesa/latest/#sugar-syntax
> 
> The advantage about this solution is that is generic and can be extended to 
> other async related abstractions as:
> - JDK8 CompletableFuture's 
> (https://github.com/funcool/promissum/blob/master/doc/content.adoc#26-promise-chaining)
>  
> - manifold deferred 
> (https://github.com/funcool/cats/blob/master/doc/content.adoc#82-manifold-deferred)
> - core.async channels 
> (https://github.com/funcool/cats/blob/master/doc/content.adoc#81-channel)
> 
> Personally, I use core.async to compose different processes, but when I 
> interacting with async apis I almost always use promise abstraction with cats 
> sugar syntax. The promise abstraction semantics fits more properly in async 
> rpc calls that channels because it represents a "eventually available value" 
> and has the notion of error (unlikely core.async channels). 
> 
> Regards.
> Andrey
> 
>> On Wed, Sep 16, 2015 at 10:30 PM, Marc Fawzi <[email protected]> wrote:
>> Thanks for that!
>> async function baz() { await* [foo(), bar()]; }
>> (defn baz [] (go (doseq [c [(foo) (bar)]] (<! c))))
>> With the core.async case you have to define the channel c, right? 
>> It looks cryptic compared to the es7 version. Like "go" what does go mean, 
>> seriously? I mean in terms of its English language context. Go does not 
>> convey async. And what the heck is <! Are we using bash or something? Some 
>> kind of inverted redirection? 
>> I guess you can have macros that would make it look just as comprehensible 
>> as the es7 async version so people coming into CLJS won't be turned off by 
>> the crazy looking syntax and the exposed low level semantics. Maybe a bunch 
>> of core.async macros that expose common use cases in a way that anyone can 
>> understand without even having to understand CSP basics. 
>> In my team, everyone gets the es7 version of things but despite having been 
>> CLJS users for 6 months now, no one understands how to use core.async. I've 
>> had to play with it in different languages before I realized how powerful it 
>> is to have in your toolset to manage complex (potentially dynamic) 
>> coordination patterns between async processes but our use cases in the UI 
>> have yet to beyond the very simple use cases your gist shows which are 
>> (without use of macros) much easier to understand using es7 async functions.
>> If macros can solve the "comprehensibility" problem for the common use cases 
>> then maybe something that would provide es7 async like library for cljs that 
>> gives you defnasync and await 
>> Syntax and semantics can then be so simple while the underlying system 
>> remains so powerful and in that case you could have core.async be bundled 
>> with those macros thus allowing easy access to common async patterns without 
>> the Go syntax obfuscating things and making it seem complicated as well as 
>> too noisy syntax wise for the most common tasks 
>> 
>> 
>> Sent from my iPhone
>> 
>>> On Sep 15, 2015, at 9:38 PM, Shaun LeBron <[email protected]> wrote:
>>> 
>>> ES7 vs core.async (gist):
>>> https://gist.github.com/shaunlebron/d231431b4d6a82d83628
>>> 
>>>> On Tuesday, September 15, 2015 at 3:51:06 PM UTC-5, marc fawzi wrote:
>>>> Well the title gives that impression and I regret having chose to do that 
>>>> :) 
>>>> 
>>>> But if you read the content i am asking the question if Async functions in 
>>>> es7 can be used to build a performant and faithful version of CSP (github: 
>>>> aysnc-csp) and also be useful for common tasks like the simple server 
>>>> request scenario I mentioned then why wouldnt we want to think of CSP as 
>>>> just one pattern not the One True Pattern for async. Right now core.async 
>>>> is being used and or recommended for everything async and I am asking if 
>>>> that is ideal and if CLJS can allow itself to grow beyond this one 
>>>> particular pattern when it comes to async. The first thing would be 
>>>> renaming core.async to core.csp and promoting choice when it comes to 
>>>> async patterns. As it is right now, every time someone has an async design 
>>>> problem core.async is recommended as a solution regardless of whether or 
>>>> not it's the best fit solution. If you have a hammer...
>>>> 
>>>> That's the scope. Not es7 vs core.async and I'm sorry for the stupid title.
>>>> 
>>>> Sent from my iPhone
>>>> 
>>>>> On Sep 15, 2015, at 8:32 AM, Johann Bestowrous 
>>>>> <[email protected]> wrote:
>>>>> 
>>>>> At a high level, I think it's pretty important to note that you are 
>>>>> comparing a language spec to a library.
>>>>> 
>>>>> -- 
>>>>> Note that posts from new members are moderated - please be patient with 
>>>>> your first post.
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google Groups 
>>>>> "ClojureScript" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>>> email to [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at http://groups.google.com/group/clojurescript.
>>> 
>>> -- 
>>> Note that posts from new members are moderated - please be patient with 
>>> your first post.
>>> --- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "ClojureScript" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/clojurescript.
>> 
>> -- 
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "ClojureScript" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/clojurescript.
> 
> 
> 
> -- 
> Andrey Antukh - Андрей Антух - <[email protected]>
> http://www.niwi.nz
> https://github.com/niwinz
> -- 
> Note that posts from new members are moderated - please be patient with your 
> first post.
> --- 
> You received this message because you are subscribed to the Google Groups 
> "ClojureScript" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/clojurescript.

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to