<div dir="ltr"><div style="font-size:12.8000001907349px">The problem is that those inline modules might import other modules, e.g.:</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px"><script type="module"></div><div style="font-size:12.8000001907349px">   import foo from "./foo.js";</div><div style="font-size:12.8000001907349px">   window.sequence = 10;</div><div style="font-size:12.8000001907349px">   console.log(window.sequence);</div><div style="font-size:12.8000001907349px"></script></div><div style="font-size:12.8000001907349px"><script type="module"></div><div style="font-size:12.8000001907349px">   console.log(" should be 11: " + ++window.sequence);</div><div style="font-size:12.8000001907349px"></script></div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">IMO they should be async (implicit and not configurable) and if the order should be preserved then we can explore the `defer` attribute, saying:</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px"><div style="font-size:12.8000001907349px"><script type="module" defer></div><div style="font-size:12.8000001907349px">   import foo from "./foo.js";</div><div style="font-size:12.8000001907349px">   window.sequence = 10;</div><div style="font-size:12.8000001907349px">   console.log(window.sequence);</div><div style="font-size:12.8000001907349px"></script></div><div style="font-size:12.8000001907349px"><script type="module" defer></div><div style="font-size:12.8000001907349px">   console.log(" should be 11: " + ++window.sequence);</div><div style="font-size:12.8000001907349px"></script></div><div><br></div><div>Although, I consider this an edge case, and in the majority of cases we will simply use modules that <span style="font-size:12.8000001907349px">does not rely on any other online module in the page that defines global values, and if they have to share functionality, they can simply rely on a module, saying:</span></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><div style="font-size:12.8000001907349px"><script type="module"></div><div style="font-size:12.8000001907349px">   import {<span style="font-size:12.8000001907349px">sequence}</span> from "./mod.js";</div><div style="font-size:12.8000001907349px">   <span style="font-size:12.8000001907349px">console.log(sequence);</span></div><div style="font-size:12.8000001907349px"></script></div><div style="font-size:12.8000001907349px"><script type="module"></div><div style="font-size:12.8000001907349px">   <span style="font-size:12.8000001907349px">import {</span><span style="font-size:12.8000001907349px">sequence, increment}</span><span style="font-size:12.8000001907349px"> from "./mod.js";</span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">   increment();</span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">   console.log(" should be 11: " + sequence);</span><br></div><div style="font-size:12.8000001907349px"></script></div></div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">According to the current a<span style="font-size:12.8000001907349px">lgorism in the specs, this should work just fine with the right sequence of execution.</span></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8000001907349px">/caridy</span></div><div><span style="font-size:12.8000001907349px"><br></span></div>







</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Dec 20, 2014 at 6:59 PM, Allen Wirfs-Brock <span dir="ltr"><<a href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><span class=""><div>On Dec 20, 2014, at 2:02 PM, Caridy Patino wrote:</div><br><blockquote type="cite"><div dir="auto"><div>John, think of <script defer src="mod.js"></script>.</div><div><br></div><div>For <script type=module>, async is implicit.</div></div></blockquote><div><br></div></span><div>What if you have a series of modules that need to be evaluated in sequential order?  (Remember, that a module with no imports is the module worlds  equivalent to a simple  sequential script.).  eg:</div><div><br></div><div><script type="module"></div><div>   window.sequence = 10;</div><div>   console.log(window.sequence);</div><div>/script></div><div>script type="module"></div><div>   console.log(" should be 11: " + ++window.sequence);</div><div></script></div><div><script type="module"></div><div>   console.log(" shoud be 12: " + ++window.sequence);</div><div></script></div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Allen</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><br></font></span><blockquote type="cite"><div><div class="h5"><div dir="auto"><div><br>Sent from my iPhone</div><div><br>On Dec 20, 2014, at 3:01 PM, John Barton <<a href="mailto:johnjbarton@google.com" target="_blank">johnjbarton@google.com</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr"><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Dec 20, 2014 at 10:54 AM, Matthew Robb <span dir="ltr"><<a href="mailto:matthewwrobb@gmail.com" target="_blank">matthewwrobb@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><span><br><div class="gmail_quote">On Sat, Dec 20, 2014 at 1:50 PM, Caridy Patino <span dir="ltr"><<a href="mailto:caridy@gmail.com" target="_blank">caridy@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">what make you think this proposal implies blocking?</blockquote></div><br></span><div style="font-family:'trebuchet ms',sans-serif;color:rgb(68,68,68)">​I think he was reading your examples using "require()" and thinking you were suggesting that the semantics would match.​</div></div></div></blockquote><div><br></div>Indeed that is what I was thinking.  <div><br></div><div>A non-blocking <module> tag is a poor match to HTML, a declarative language where order of tags means order of parsing and rendering. Giving up this fundamental characteristic of HTML, in the long-shot effort to improve the apparent load time for some amateur Web sites, has become dogmatic so I suppose there is no value in discussing it. </div><div><br></div><div>A non-blocking <module> tag would also prevent experienced developers from controlling rendering through JS action. That means they will need to use <script> tags which we'd like to deprecate or we'd have to have a blocking form of <module>.  We'll probably end up with the latter choice.</div><div><br></div><div>On the node side, require() is curiously synchronous given node's heavy emphasis on asynchronous IO. As with the browser <script> tag, the synchronous require() is the best choice for simplicity.  But the synchronous semantics prevents optimizations on both platforms. An asynchronous root-module loading API in a next generation system opens new opportunities.  I hope and expect we'll end up with an async option on node.</div><div><br></div><div>On balance I think a non-blocking <module> tag with optional blocking is reasonable.   </div><div><br></div><div>However, the description of the browser loading as "require()" within a asynchronous <module> tag is really a complete departure from all the previous discussions.  A system based on require() is not statically analyzable. I could go on, but really a shift to this extreme seems so unlikely that there must be some misunderstanding.  Rather I assume that the content of the <module> tag will be ES6 code as we know it now and that we will have an additional dynamic loading API that will be asynchronous much like we had earlier this year.  Exactly the same solution would work in node. </div><div><br></div><div>In other words, <script> and require() would not be used in future code, an async API would be available for root loading, and most developers most of the time would write synchronous code manipulating modules contents.  If we are not heading in this direction I hope there will be more discussions in public.</div><div><br></div><div>jjb</div></div></div></div>
</div></blockquote></div></div></div>_______________________________________________<span class=""><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" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br></span></blockquote></div><br></div></blockquote></div><br></div>