How would object value types such as int64 work? Should symbols be similar?
On Apr 13, 2013, at 0:35 , Allen Wirfs-Brock <[email protected]> wrote: > > On Apr 12, 2013, at 3:12 PM, Brandon Benvie wrote: > >> Based on recent discussions, it seems that there's some confusion about what >> exactly Symbols are. So far I've seen three different alternatives: >> >> 1.) Exotic objects that conform to the most recent ES6 spec, but with a >> special typeof .That is, they have special operations for all the internal >> methods. These internal methods make them act as stateless, immutable, >> prototypeless objects such that they can be treated like primitives. The >> problem here is introducing new typeof semantics, where something that >> otherwise acts like an object is not typeof === "object". >> >> 2.) A new type of primitive that have no object wrapper version, thus >> `ToObject(symbol)` throws. This means either they have to be falsey or a new >> situation arises where `if (val != null) val.prop` throws (ignoring >> accessors and proxies). >> >> 3.) A new type of primitive along with a new type of wrapper. In this case >> we use the String/Number/Boolean precedent where `Symbol()` and `new >> Symbol()` produce different kinds of results. The problem here is the >> confusion that comes with ToString/ToPropertyKey when called on a Symbol >> wrapper. What does `obj[new Symbol] = 5` do, for example? It allows footguns >> like `obj[key + '_ext']` to silently do the wrong thing. >> >> >> A relevant gist here demonstrates test cases for option #1. I'll see if I >> can add comparable sets of tests for the other two options. [1] >> >> https://gist.github.com/Benvie/5375078 > > > there were lots of additional subtle points brought up on the twitter threads > > Regarding #1 > This is how it was spec. until the last TC39 meeting. > > Some implementers think this will be easiest to implement. > > Important point was that we probably don't want a new kind of "object" whose > typeof value is not "object". typeof is already confusing enough for objects > because of its handling of functions and null. We shouldn't make it worse > with typeof Symbol() == "symbol" yet symbols behave as objects. > > Regarding #2 > My comments in https://gist.github.com/Benvie/5375078#comment-815195 all > directly derive from the "normal" handling in the spec. of primitive values > or situations involving primitive values that don't have wrappers. > > Regarding #3 > > The biggest footgun is if > new Symbol() > creates a Symbol wrapper. However, > new Symbol() > returning a primitive values would be unlike anything we currently have in > the language > > I favor reverting to solution 1. > > Allen > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss -- Dr. Axel Rauschmayer [email protected] home: rauschma.de twitter: twitter.com/rauschma blog: 2ality.com
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

