Throwing errors on mutating immutable bindings

Allen Wirfs-Brock allen at wirfs-brock.com
Wed Oct 1 09:15:02 PDT 2014


On Oct 1, 2014, at 9:05 AM, Mark S. Miller wrote:

> Good point. If we can require all such assignments to be rejected statically, why is a runtime assignment to a const variable even possible? Can't we just assert that this cannot occur?

The runtime cases I meant are the ones you mentioned. Sloppy with or eval dynamically shadowing a sloppy a [[Set]] reference to a const binding.  Can't be a early error, should be a runtime error.

Allen




> 
> 
> On Wed, Oct 1, 2014 at 8:59 AM, Allen Wirfs-Brock <allen at wirfs-brock.com> wrote:
> 
> On Oct 1, 2014, at 8:39 AM, Mark S. Miller wrote:
> 
> ...
> 
> I was with you until you got to the following point
> 
> >
> > If there is an intervening "with" or sloppy direct eval, then there is not a statically apparent assignment to a const variable. Since this can only occur in sloppy code anyway, it seems more consistent with the rest of sloppy mode for this failed assignment to be silent, rather than dynamically throwing an error.
> >
> 
> const is a new kind of declaration unlike any declaration form that previous existed in ES, so Ii don't think its handling introduces any legacy consistency issues.  If somebody is using const, regard less of mode, they pretty clearly expect assignments to any const bindings to be illegal.  And, I don't think any body wants new silent failure errors, even in sloppy mode.  The most consistent thing is for runtime detected assignments to const bindings to always be noisy errors.  Early where possible, at runtime in the rest of the cases.
> 
> Allen
> 
> 
> 
> 
> -- 
>     Cheers,
>     --MarkM

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20141001/8cb2765a/attachment.html>


More information about the es-discuss mailing list