<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">guest271314</strong> <span dir="ltr"><<a href="mailto:guest271314@gmail.com">guest271314@gmail.com</a>></span><br>Date: Thu, Mar 28, 2019 at 12:19 AM<br>Subject: Re: Proposal: Static Typing<br>To: Claude Pache <<a href="mailto:claude.pache@gmail.com">claude.pache@gmail.com</a>><br></div><br><br><div dir="ltr"><br>> `a = object[Math.random() < 0.5 ? "method_returning_number" : "method_returning_string"]()`<br><br>Interesting case. See also <br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><a href="https://stackoverflow.com/q/43416214" target="_blank">How do I check if a JavaScript function returns a Promise?</a> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Say I have two functions:<br>```function f1() {<br>    return new Promise<any>((resolve, reject) => {<br>        resolve(true);<br>    });<br>}<br>function f2() {<br>}```<br>How do I know if f1 will return Promise and f2 will not?</blockquote><div><br></div><a href="https://stackoverflow.com/q/43417236" target="_blank">Can a regular expression be crafted which determines the return type of a function? </a><div><br></div><a href="https://security.stackexchange.com/q/201992" target="_blank">Has it been mathematically proven that antivirus can't detect all viruses?</a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 27, 2019 at 6:10 PM Claude Pache <<a href="mailto:claude.pache@gmail.com" target="_blank">claude.pache@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><br><blockquote type="cite"><div>Le 27 mars 2019 à 18:26, Michael Theriot <<a href="mailto:michael.lee.theriot@gmail.com" target="_blank">michael.lee.theriot@gmail.com</a>> a écrit :</div><br class="m_-241369966309090520gmail-m_5619927025123633714Apple-interchange-newline"><div><div style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Would an error at runtime or compiletime occur here?</div><br class="m_-241369966309090520gmail-m_5619927025123633714Apple-interchange-newline"></div></blockquote></div><br><div>The check cannot be reliably done at compile time in general; it must be a runtime check. (Tools may provide partial static analysis, but that’s an extra.)</div><div><br></div><div>The simplest reason is that statically typed code must run together with non-statically typed code.</div><div><br></div><div>And even ignoring legacy code, it is not desirable to have static types everywhere; for instance, `Array.prototype.sort()` must continue to work with both arrays of strings and arrays of numbers, and even with arrays of mixed types.</div><div><br></div><div>And even if everything everywhere was statically typed, you still cannot statically analyse situations like: `a = object[Math.random() < 0.5 ? "method_returning_number" : "method_returning_string"]()`.</div><div><br></div><div><div></div></div><blockquote type="cite"><div><div>If it is a runtime error, is it optimal for the engine to keep track of typed variables vs regular for the same value?</div></div></blockquote><div><br></div><div>Today’s JS engines typically do already clever speculative optimisations based on expected types. For example: <a href="https://stackoverflow.com/a/46144917" target="_blank">https://stackoverflow.com/a/46144917</a>. So, I guess, it depends...</div><div><br></div><div>—Claude</div><div><br></div></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></div>