On Feb 14, 2012, at 5:48 PM, Mark S. Miller wrote:

> On Tue, Feb 14, 2012 at 11:08 AM, Allen Wirfs-Brock <[email protected]> 
> wrote:
> 
> My current intent is to respecify the Date time value slot as a private named 
> property rather than as an internal property.  This will enable "freezing" of 
> that property as well as enabling "subclassing" of Date.
> ...
> 
> Do you think that Date will need an additional method that makes the time 
> value immutable?
> 
> That would work. It would also work to expose this name directly, so that it 
> is in effect not private within its context. For this particular case, 
> another possibility is perhaps lighter weight. Once you explain the internal 
> property as a privately named property, you can explain that all the internal 
> property of Date.prototype is a non-configurable non-writable privately named 
> property with value NaN, as if by Object.defineProperty.
> 

Specifying the attributes works for Date.prototype, but programmer might want 
to make the private time value property of some other Date objects be 
non-writable, non-configurable. Making the private name of the property problem 
seems like an undesirable way to enable that. 

>  
> Do we need to establish a convention for objects that want to enable public 
> facing immutability requests?  Note that immutability may not necessarily be 
> the same thing as frozen or sealed.  I can imagine situations (Date.prototype 
> is a good example) where you would want to make an object "immutable" but 
> still allow additions/modifications of methods or other new properties.
> 
> I would like to see general support for immutability for many reasons. But 
> you seem to mean something different. I've been using immutable to mean 
> approximately "transitively frozen", so it would be stronger than "seal" or 
> "freeze".

I this case I actually meant sometime weaker.  I mean that the "value state" of 
the object can not be modified. For example, like the string value state of an 
String object or the number value state of a Number object. "Public" properties 
can still be added to such objects.  (Perhaps all properties "frozen" but the 
object is still extensible is a close to what I have in mind.) What exactly 
constitutes the "value state" of any particular object will vary according to 
what is being modeled by the object.  However, I suspect ES style will move in 
a direction where often such "value state" is represented using private named 
properties.

> 
> I have postponed voicing my desire for general immutability support since it 
> raises a variety of hard issues which would definitely exceed our budget for 
> ES6. Even if above you mean general support only for "freezing" privately 
> named properties, I expect many of these hard problems to arise as well. But 
> yes, we should start talking about it. 

I assume some of the difficulties relate to specific invariants you might want 
to apply to all of your immutable objects.  I'm not thinking of any such 
invariants, instead I would view the meaning of what I mean by immutability to 
be defined by each object abstraction.

Allen

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

Reply via email to