On Thu, Dec 16, 2010 at 4:27 PM, Brendan Eich <bren...@mozilla.com> wrote:

> On Dec 16, 2010, at 3:57 PM, Mark S. Miller wrote:
>
> On Thu, Dec 16, 2010 at 3:51 PM, David Herman <dher...@mozilla.com> wrote:
>
>> Without new syntax, isn't soft fields just a library on top of weak maps?
>>
>
> Semantically, yes. However, as a library, they cannot benefit from the
> extraordinary efforts of all JavaScript engines to optimize inherited
> property lookup. Nor from the GC benefits that follow from the transposed
> representation explained at <
> http://wiki.ecmascript.org/doku.php?id=strawman:inherited_explicit_soft_fields#a_transposed_representation>.
> OTOH, if soft fields are built in and implemented in this transposed manner,
> both benefits easily follow.
>
>
> Have you talked to any JS engine implementors about any of this? If so,
> more details would be great.
>
> Private name property name lookup is not transposed into a get along the
> prototype chain followed by a method call, and calling a method is
> inherently costlier than getting a property, in all the JS engines I've
> studied. Private names use exactly the same optimized lookup paths today's
> engines sport, just with a different type of identifier.
>
> In
> http://wiki.ecmascript.org/doku.php?id=strawman:inherited_explicit_soft_fields#a_transposed_representationyou
>  write:
>
> "This representation parallels the implementation techniques and resulting
> performance benefits expected for 
> names<http://wiki.ecmascript.org/doku.php?id=strawman:names>but without the 
> semantic problems (leaking via proxy traps and inability to
> associate soft state with frozen objects)."
>
> but the first point in the parenthetical aside was addressed by Allen's
> writeup at
>
> http://wiki.ecmascript.org/doku.php?id=strawman:private_names
>
> (note: not http://wiki.ecmascript.org/doku.php?id=strawman:names) as
> follows:
>
> [http://wiki.ecmascript.org/doku.php?id=strawman:private_names#proxies]
>
> "The Proxy object could be replaced with an alternative implementation that
> added an additional handler layer that would wrapper all private name values
> passed through its traps. The wrappers would be opaque encapsulations of
> each private name value and provide a method that could be used to test
> whether the encapsulated private name was === to an argument value. This
> would permit handlers to process known private name values but would prevent
> exposing arbitrary private name values to the handlers.
>
> If there is sufficient concern about proxies exposing private name values
> in this manner, such wrapping of private names could be built into the
> primitive trap invocation mechanism."
> Please update your page accordingly.
>
> The other parenthetical point, the inability to associate soft state with
> frozen objects, is a feature of private names, not a bug. If it's an
> important use case then we can certainly use soft fields (given weak maps)
> to solve it.
>
> This does *not* mean soft fields and private names are mutually exclusive
> and locked in some "there can be only one!" Highlander contest.
>

I'll address this last point first, since this seems to be the core issue.
The question I am raising is: given soft fields, why do we need private
names? I translated your examples to show why I see no need for the latter.
If we don't need them, we shouldn't add them.




>
> Really, it's starting to feel like "Survivor" or "American Idol" around
> here. The apples to oranges death-matching has to stop.
>

> /be
>



-- 
    Cheers,
    --MarkM
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to