Brendan Eich wrote:
> Nathan Wall wrote:
> > In the case of (2), the implementation using a private symbol will fail on 
> > a call to `setTime` when the object is frozen (I think).
>
> Nope, we agreed that frozen objects support setting pre-existing (added
> before the object was made non-extensible) properties named by private
> symbols.


I wasn't aware, but that significantly improves the case for symbols. I'm glad 
to hear it!  However, it also begs the question of why symbols should behave 
differently from WeakMaps/closures in the presence of Proxies (via 
unknownPrivateSymbol trap).


David Bruant wrote:
> > In the case of (1), the implementation using a private symbol will have 
> > internal accesses to the `timestamp` symbol exposed through the 
> > unknownPrivateSymbol trap.
> The trap does not expose the symbol. That would be a bad leak.
> The third "whitelist" argument in the proxy constructor is here to
> communicate whether the proxy knows the privatesymbol or not.
> When [[Get]] or [[Set]] (or other property operations) happens with a
> whitelisted private symbol, the get or set (or other) trap is called
> with the symbol itself (since it's known). If the name isn't in the
> whitelist, the unknownPrivateSymbol trap is called with target as the
> *only* trap argument (the private name is not exposed and that's on
> purpose!)

I'm sorry, I was unclear. I understand that the symbol itself is not exposed, 
but the fact that some symbol was accessed is. It wold allow a proxy to throw 
to prevent access to internal state (right?). This is different from what would 
occur in the WeakMap implementation, and if I'm trying to hide internal state, 
then I don't want proxies to be able to mess with attempts to access it, so 
I'll choose to use WeakMaps anytime I want to write defensive code.

Of course, if I'm just writing something quick and dirty, I'll use Symbols 
because I would much prefer to use the simpler syntax Symbols provide.  But 
again, as a library author, allowing Proxies to interfere here seems like a 
weaker position for a generic object than using a WeakMap to hide this.

Nathan                                    
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to