<div dir="ltr">I don't know that an `await.all { ... }` block would be premature, especially since it's straightforward, so I can't see it clashing with anything in the future e.g. on the "observables" front, if that were to become a thing. If the semantics of `await` were to be extended somehow, then identically and naturally would the semantics of `await.all { ... }`.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 27 Nov 2019 at 01:43, Isiah Meadows <<a href="mailto:contact@isiahmeadows.com">contact@isiahmeadows.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto">Just wanted to drop in and remind people of this by me earlier in the thread: <div><a href="https://esdiscuss.org/topic/proposal-await-all-for-parallelism#content-10" target="_blank">https://esdiscuss.org/topic/proposal-await-all-for-parallelism#content-10</a></div><div dir="auto"><br></div><div dir="auto">The way things are shaping up, it's starting to look like an ad-hoc version of this proposal of mine: <div><a href="https://github.com/isiahmeadows/non-linear-proposal" target="_blank">https://github.com/isiahmeadows/non-linear-proposal</a></div><div dir="auto"><br></div><div dir="auto">As I stated earlier, I feel it's premature, especially before we figure out how observables fit into it all.</div></div></div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 26, 2019 at 09:48 Naveen Chawla <<a href="mailto:naveen.chwl@gmail.com" target="_blank">naveen.chwl@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">If I have, as per your examples,<div><br></div><div>x1 = await||actionAsync1()</div><div>x2 = await||actionAsync2(x1) //x1 is undefined here, only resolved on the next "non-parallel-await"</div><div><br></div><div>vs adding a line between the two calls:</div><div><br></div><div><div>x1 = await||actionAsync1()</div><div>let c;</div><div>x2 = await||actionAsync2(x1)</div></div><div><br></div><div>...does the `let c` automatically break the parallel grouping since it's a non-parallel operation (thereby making x1 defined)?</div><div><br></div><div>It seems to me like you are doing block logic without blocks, which I think increases the chances of bugs. Also you're not leveraging the existing parallel execution pattern for async functions (which is just to omit the `await`), so it would seem you would be increasing learning overhead. And, you're not really allowing for submitting more sophisticated mixtures of serial async, parallel async and synchronous code for "parallel completion" guarantee, by requiring that parallel calls be "grouped" together in terms of lines of code, almost allowing for nothing beyond the current "Promise.all" pattern, logically. I don't think this is satisfying the original motivation.</div><div><br></div><div>For a `awail.all { ... }` block, maybe allowing a "return"/"yield" value could neaten up the block scope separation, but maybe that could be left to the "do" expression if that were adopted. But I don't think it's a big sacrifice if neither exist.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 26 Nov 2019 at 14:14, manuelbarzi <<a href="mailto:manuelbarzi@gmail.com" target="_blank">manuelbarzi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><br></div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">OK I'm even more confused now. x1 is surely not a resolved value until all the next "non parallel await" so is it "undefined" until then?<div></div></div></blockquote><div dir="auto"><br></div><div dir="auto">as a `const` x1 does not exist until those parallel awaits `await||` (for p1 and p3) are resolved (same for x3). then p2 is resolved after that.</div><div dir="auto"><br></div><div dir="auto">what it tries to bring is a simplification of syntax.</div><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Could you give an example of what you mean by the `await.all { ... }` block syntax bringing "<span style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif">complexity on returning values assignment, specially when" "about constants (`const`)", as I'm unclear what you are referring to</span></div></div></blockquote><div dir="auto"><br></div><div dir="auto">`const` and `let` are block-scoped, so this is referring to avoid that block notation, and then keep coherent with the possibility to directly infer in current scope references without extra segments / blocks.</div><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><span style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif"></span></div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 26 Nov 2019 at 13:35, manuelbarzi <<a href="mailto:manuelbarzi@gmail.com" target="_blank">manuelbarzi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Why not just maximally preserve current JavaScript for parallel execution, just by omitting `await` in multiple async calls, simply wrapping it in an `await.all` block to ensure completion before code continues past the block. This surely is the more straightforward way to satisfy the same goals?</div></div></blockquote><div><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)">because wrapping it an `await.all` on the one hand explicitly groups promises, but brings complexity on returning values assignment, specially when is about constants (`const`). so, if you avoid blocks, just marking parallel awaits with, for example, a suffix `await||`, or whatever other more convenient way, you can just write the code in series as normally, and avoid that complexity. the transpiler would just require to group the consecutive marked parallel awaits (`await||`) into a Promise.all() and that's it. following i reproduce the demo before:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0)"><div style="font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;line-height:18px;white-space:pre-wrap"><div><span style="color:rgb(0,128,0)">// NOTE p? = function call that returns a promise (? = just and index)</span></div><div><span style="color:rgb(0,128,0)">// NOTE s? = function call that runs synchronously and returns a value (? = just and index)</span></div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x0</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p0</span>()</div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x11</span> = <span style="color:rgb(121,94,38)">s11</span>() <span style="color:rgb(0,128,0)">// sync code in-the-middle</span></div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x1</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p1</span>(<span style="color:rgb(0,16,128)">x0</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x3</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p3</span>(<span style="color:rgb(0,16,128)">x11</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x2</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p2</span>(<span style="color:rgb(0,16,128)">x1</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x10</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p10</span>(<span style="color:rgb(0,16,128)">x2</span>, <span style="color:rgb(0,16,128)">x3</span>)</div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x12</span> = <span style="color:rgb(121,94,38)">s12</span>() <span style="color:rgb(0,128,0)">// sync code in-the-middle</span></div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x4</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p4</span>(<span style="color:rgb(0,16,128)">x1</span>, <span style="color:rgb(0,16,128)">x2</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x5</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p5</span>(<span style="color:rgb(0,16,128)">x2</span>, <span style="color:rgb(0,16,128)">x3</span>, <span style="color:rgb(0,16,128)">x12</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x6</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p6</span>(<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x5</span>, <span style="color:rgb(0,16,128)">x10</span>)</div><br><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x7</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p7</span>(<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x6</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x9</span> = <span style="color:rgb(175,0,219)">await</span> || <span style="color:rgb(121,94,38)">p9</span>(<span style="color:rgb(0,16,128)">x5</span>, <span style="color:rgb(0,16,128)">x6</span>)</div><div><span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x8</span> = <span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p8</span>(<span style="color:rgb(0,16,128)">x6</span>, <span style="color:rgb(0,16,128)">x7</span>)</div><br><div><span style="color:rgb(175,0,219)">await</span> <span style="color:rgb(121,94,38)">p11</span>(<span style="color:rgb(0,16,128)">x8</span>, <span style="color:rgb(0,16,128)">x9</span>)</div><br><div><span style="color:rgb(0,128,0)">// it would resolve a tree of parallel and series like following with traditional promises</span></div><br><div><span style="color:rgb(0,16,128)">p0</span></div><div>    .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x0</span> <span style="color:rgb(0,0,255)">=></span> {</div><div>        <span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x11</span> = <span style="color:rgb(121,94,38)">f11</span>()</div><br><div>        <span style="color:rgb(175,0,219)">return</span> <span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">all</span>([<span style="color:rgb(121,94,38)">p1</span>(<span style="color:rgb(0,16,128)">x0</span>), <span style="color:rgb(121,94,38)">p3</span>(<span style="color:rgb(0,16,128)">x11</span>)])</div><div>            .<span style="color:rgb(121,94,38)">then</span>((<span style="color:rgb(0,16,128)">x1</span>, <span style="color:rgb(0,16,128)">x3</span>) <span style="color:rgb(0,0,255)">=></span></div><div>                <span style="color:rgb(121,94,38)">p2</span>(<span style="color:rgb(0,16,128)">x1</span>)</div><div>                    .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x2</span> <span style="color:rgb(0,0,255)">=></span></div><div>                        <span style="color:rgb(121,94,38)">p10</span>(<span style="color:rgb(0,16,128)">x2</span>, <span style="color:rgb(0,16,128)">x3</span>)</div><div>                            .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x10</span> <span style="color:rgb(0,0,255)">=></span> {</div><div>                                <span style="color:rgb(0,0,255)">const</span> <span style="color:rgb(0,16,128)">x12</span> = <span style="color:rgb(121,94,38)">s12</span>()</div><br><div>                                <span style="color:rgb(175,0,219)">return</span> <span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">all</span>([<span style="color:rgb(121,94,38)">p4</span>(<span style="color:rgb(0,16,128)">x1</span>, <span style="color:rgb(0,16,128)">x2</span>), <span style="color:rgb(121,94,38)">p5</span>(<span style="color:rgb(0,16,128)">x2</span>, <span style="color:rgb(0,16,128)">x3</span>, <span style="color:rgb(0,16,128)">x12</span>)])</div><div>                                    .<span style="color:rgb(121,94,38)">then</span>((<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x5</span>) <span style="color:rgb(0,0,255)">=></span></div><div>                                        <span style="color:rgb(121,94,38)">p6</span>(<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x5</span>, <span style="color:rgb(0,16,128)">x10</span>)</div><div>                                            .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x6</span> <span style="color:rgb(0,0,255)">=></span> <span style="color:rgb(38,127,153)">Promise</span>.<span style="color:rgb(121,94,38)">all</span>([<span style="color:rgb(121,94,38)">p7</span>(<span style="color:rgb(0,16,128)">x4</span>, <span style="color:rgb(0,16,128)">x6</span>), <span style="color:rgb(121,94,38)">p9</span>(<span style="color:rgb(0,16,128)">x5</span>, <span style="color:rgb(0,16,128)">x6</span>)])</div><div>                                                .<span style="color:rgb(121,94,38)">then</span>((<span style="color:rgb(0,16,128)">x7</span>, <span style="color:rgb(0,16,128)">x9</span>) <span style="color:rgb(0,0,255)">=></span> <span style="color:rgb(121,94,38)">p8</span>(<span style="color:rgb(0,16,128)">x6</span>, <span style="color:rgb(0,16,128)">x7</span>)</div><div>                                                    .<span style="color:rgb(121,94,38)">then</span>(<span style="color:rgb(0,16,128)">x8</span> <span style="color:rgb(0,0,255)">=></span> <span style="color:rgb(121,94,38)">p11</span>(<span style="color:rgb(0,16,128)">x8</span>, <span style="color:rgb(0,16,128)">x9</span>))</div><div>                                                )</div><div>                                            )</div><div>                                    )</div><div>                            })</div><div>                    )</div><div>            )</div><div>    })</div><div>```</div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div></div>
</blockquote></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div></div>-- <br><div dir="ltr">-----<br><br>Isiah Meadows<br><a href="mailto:contact@isiahmeadows.com" target="_blank">contact@isiahmeadows.com</a><br><a href="http://www.isiahmeadows.com" target="_blank">www.isiahmeadows.com</a></div>
</blockquote></div>