On Sep 28, 2011, at 7:40 PM, Oliver Hunt wrote:

> class Foo {
>    var bar; // default value -> undefined
>    var wibble = 5; // initialised fields desugar to statements at the head of 
> the constructor
>    const wiffle; // read barrier on uninitialised

But note that such read barriers must be part of every property access 
including simple method invocations because the instance can escape from the 
constructor before it is initialized.

> 
>    function someMethod(..) {
>         this.bar = foo; // could have a short hand for this.property
>    }
> 
>    constructor (bar, wibble) {
>        // extra typing due to the removal of horrible punning
>        // but "public bar = bar" or whatever that syntax was is longer
>        // than this.bar
          theWiderWorld(this);  //this escapes from constructor before wibble 
is initialized

>        this.bar = bar;
>        this.wibble = wibble;
>    }
> }

   function elsewhere(obj,key) {
         var z = obj[key];    //needs read barrier, object might be an 
incomplete Foo instance and key might be 'wibble'
         ...
}

To accommodate this, each property would seem to need an additional 
[[Uninitialized]] "attribute" (it could be represented as a distinguished 
value) which would have to be checked as part of every property access. 

You could avoid this simply my not having such "const" declarations and leaving 
it to the class author to use Object.defineProperty to set the [[Writable]] 
attribute of such properties to false.

Alternatively, you could just not worry that a const property could escape into 
the wild in a writable state and the value undefined.

Presumably the job of the constructor is to establish invariants of the 
constructed instances. Some of those invariants may involve complex 
relationships among property values and between the new object and other 
objects. There are many ways that an object can escape from a constructor 
before these invariants are fully established.  Why is the "const" invariant 
any more important than other invariants that we aren't attempting to guarantee?

allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to