I just published async_with v0.2.0 that ditches the dependency graph and 
uses processes + messages to execute the clauses 
asynchronously. https://github.com/fertapric/async_with

I've also included a new test with the edge case you 
mentioned 
https://github.com/fertapric/async_with/blob/master/test/async_with_test.exs#L534-L554

Here is the PR with all the 
changes: https://github.com/fertapric/async_with/pull/1

I would like to mention you guys in the README for all the help. Could give 
me a list of name + handlers that I should include?

Thanks!

On Saturday, September 9, 2017 at 11:16:19 PM UTC+2, John Wahba wrote:
>
> I took a bit of a different approach: instead of spawning new processes 
> when all the conditiones match: I spawn them all as futures and they block 
> until their dependent futures return:
> https://github.com/johnwahba/async_with
>
> https://github.com/johnwahba/async_with/blob/master/test/async_with_test.exs 
> <- (has an expanded macro in the comments)
>
>
> On Friday, September 8, 2017 at 2:12:47 PM UTC-7, Fernando Tapia Rico 
> wrote:
>>
>> Thanks for the feedback Theron!
>>
>> Interesting...instead of using the dependency graph you are spawning new 
>> processes when all the conditions (the right vars) are matched. It's 
>> definitely an idea worth exploring.
>>
>> On Friday, September 8, 2017 at 9:52:00 PM UTC+2, Theron Boerner wrote:
>>>
>>> Hi Fernando,
>>>
>>> Great work on this implementation! However, there are a few edge cases 
>>> that you do not handle. E.g.
>>>
>>> async with a <- 1,
>>>   b <- :timer.sleep(1000),
>>>   c <- IO.inspect(a),
>>>   d <- {a, b} do
>>> ...
>>> end
>>>
>>> That *should* print out "1" immediately because c only has a dependency 
>>> on a and is unrelated to b, however, your implementation does not. I've 
>>> been discussing some of these edge cases with José, Luke Imhoff, et al for 
>>> a few months and slowly built up this gist. 
>>> <https://gist.github.com/hunterboerner/96bc022d1ac131c21c4ce7f12756d0c3> As 
>>> you can see, that gist is a complete mess so Luke and I began to rewrite it 
>>> in https://github.com/kronicdeth/async_with. John Wahba proposed an 
>>> alternative implementation to me at ElixirConf that eliminates the need to 
>>> compute a dependency graph so we're going to be implementing that version 
>>> sometime soon and share it here when we have a working version on GitHub.
>>>
>>> - Theron
>>>
>>> On Fri, Sep 8, 2017 at 5:07 AM Fernando Tapia Rico <[email protected]> 
>>> wrote:
>>>
>>>> I wanted to share with you guys https://github.com/fertapric/async_with, 
>>>> which is the implementation of "async with", one of the "José goes crazy" 
>>>> ideas mentioned in this proposal :) I hope you like it!
>>>>
>>>> Any feedback or help is more than welcome!
>>>>
>>>> On Thursday, November 19, 2015 at 4:54:15 PM UTC+1, José Valim wrote:
>>>>
>>>>> Please open up an issue. If we support such, we would need to support 
>>>>> it both on "comprehensions" and "with".
>>>>>
>>>>
>>>>>
>>>>>
>>>>> *José Valim*
>>>>> www.plataformatec.com.br
>>>>> Skype: jv.ptec
>>>>> Founder and Director of R&D
>>>>>
>>>>> On Thu, Nov 19, 2015 at 5:05 PM, Vincent Siliakus <[email protected]> 
>>>>> wrote:
>>>>>
>>>>>> Op zaterdag 14 november 2015 13:57:08 UTC+1 schreef José Valim:
>>>>>>>
>>>>>>> The implementation is already in master thanks to lexmag. :)
>>>>>>>
>>>>>>>
>>>>>> Works great, I love this addition!
>>>>>>
>>>>>> I was wondering though since the current implementation uses 'case' 
>>>>>> internally, if support for something like this is still planned:
>>>>>>
>>>>>> with x when x < 2 <- 4, do: :ok
>>>>>> => 4 
>>>>>>
>>>>>> with x when x > 2 <- 4, do: :ok
>>>>>> => :ok
>>>>>>
>>>>>> I think this would allow even more clunky, nested code to be 
>>>>>> rewritten much more elegantly with 'with'.
>>>>>>
>>>>>>
>>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "elixir-lang-core" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/elixir-lang-core/9a5fb079-07a7-44d4-ab3d-d6ab1ab8a9bd%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/9a5fb079-07a7-44d4-ab3d-d6ab1ab8a9bd%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/db5ad17a-3ed4-4bba-b117-264889233bb5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to