This also has similar syntax to the erlang version: https://www.erlang.org/doc/reference_manual/expressions#receive
Allen Madsen http://www.allenmadsen.com On Tue, May 7, 2024 at 7:48 AM Jon Rowe <m...@jonrowe.co.uk> wrote: > To put across an alternative viewpoint, the way it is now reads > consistently with other constructs such as with / else, and adding a second > block form would be diferrent from every other construct. The 'may or may > not' of the after condition has never bothered me as from my perspective > its obvious that you read it as a timeout to be executed after a set period. > > I conceed that adding / allowing pattern matching in the after block would > be consistent with other uses, but it also would presumedly create > problems, you have to specify the timeout after all or it would block > forever, and I don't feel allowing multiple timeouts would be helpful. > > Cheers > Jon > > On Mon, 6 May 2024, at 5:49 PM, Brandon Gillespie wrote: > > I’ve had to re-read those docs several times, and I personally find > receive/after rather confusing. It feels like an anti-pattern to the other > idioms in elixir, because: > > 1. with other uses of `after` in elixir the code therein is literally > run AFTER the other stuff is done, and usually its ALWAYS run. But with > receive, the value after `after` is an integral definition for how the > first block of code/patterns is even handled. The 'after' block may or may > not run, it's not always run. And finally, you can only specify one > function anyway, so why treat it with that -> pointer operator at all? > 2. > > It feels like I should be able to set several timeouts, based on using > the `->` operator where even right above you can specify many. But no! Only > a single expression may be used... > 3. The receive block above is a pattern matching series, but the block > under after is NOT, it’s more like cond where the value is evaluated. > Seeing both right next to each other is confusing: > > ``` > millis = 1000 > recieve do > ^millis -> blah # to demonstrate the difference > after > millis -> blah > end > > ``` > > Now to counter some of the arguments I suspect will come up :D > > - “I think it reads fine” -> great, but not helpful. So you’ve already > gotten past the mental clunk it causes. I’m interested in finding rough > edges to make the whole language more approachable to a wider audience. > - “Its how it is in erlang” -> In my opinion “status quo” is never an > argument. Moving on :D > > I had several suggestions, which included adding the timeout value at the > top, or using a new `timeout` token instead of `after`, but in the end, I > think what is probably the best middle of the road is to allow another `do` > instead of the `->` > ``` > receive do > pattern -> > pattern ->... > after 1000 do > moar code here > end > > ``` > > Just some observations/random suggestions. Take them for what you will. > > > -Brandon > > > -- > 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 elixir-lang-core+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/c0677b53-2313-41a3-919b-a29ca273f649%40cold.org > <https://groups.google.com/d/msgid/elixir-lang-core/c0677b53-2313-41a3-919b-a29ca273f649%40cold.org?utm_medium=email&utm_source=footer> > . > > > -- > 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 elixir-lang-core+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/98b5b38f-c5cb-48a9-bf60-f154ecd997b6%40app.fastmail.com > <https://groups.google.com/d/msgid/elixir-lang-core/98b5b38f-c5cb-48a9-bf60-f154ecd997b6%40app.fastmail.com?utm_medium=email&utm_source=footer> > . > -- 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 elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAK-y3CtRWuEJ_5x53rGCmOk1zXVFOeJXZ7Wrmb5z_n%3DOzq5AaQ%40mail.gmail.com.