On Wed, Sep 12, 2012 at 1:27 AM, David Bruant <span dir="ltr"><<a href="mailto:bruant.d@gmail.com" target="_blank">bruant.d@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div>[...] There are numerous examples where ES5 assumptions are questioned by
    proxies, like:</div>
    <br>
        for(var p in obj){<br>
            var desc = Object.getOwnPropertyDescriptor(obj, p)<br>
            // ...<br>
        }<br>
    <br>
    In this snippet, ES5 semantics guarantees that desc will be an
    object at every iteration. Proxies challenge this assumption
    (because of the enumerate trap, but also the combination between the
    enumerate and getOwnPropertyDescriptor trap). But as Mark said,
    there is a trade-off to be found. [...]</div></blockquote><div><br></div><div>The most important ES5 guarantee waived by proxies is when interleaving of code from accessed object can occur. Assuming Object.getOwnPropertyDescriptor is the original Object.getOwnPropertyDescriptor, in the code above, no code from p can interleave in the above actions. Proxies waive this many places, including in this example. This has been the biggest newly introduced hazard, and we've tried to make tasteful choices about where this can and cannot occur.</div>
<div><br></div><div>However, given this newly introduced interleaving hazard, your example does not demonstrate a further weakening of invariants. This is the "momentary invariant" vs "eternal invariant" issue explained at <<a href="https://mail.mozilla.org/pipermail/es-discuss/2011-May/014150.html">https://mail.mozilla.org/pipermail/es-discuss/2011-May/014150.html</a>>. It is also why Tom's message mentions "*<span style="background-color:rgb(255,255,255);color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px">non-configurable* enumerable [own] properties of the target". The fact that they are enumerated is an eternal invariant.</span></div>
<div><br></div></div>-- <br>    Cheers,<br>    --MarkM<br>