On 26.10.2010 11:41, Tom Van Cutsem wrote:


2010/10/25 Brendan Eich <[email protected] <mailto:[email protected]>>

    On Oct 25, 2010, at 12:35 PM, Tom Van Cutsem wrote:

    2010/10/20 Dmitry A. Soshnikov <[email protected]
    <mailto:[email protected]>>

        Anyway, is there an alternative how [[HasProperty]] can work
        correctly? I just though, that it's called by the "has" hook
        of a handler, which in turn can "lie" of course (i.e. return
        true when a property does not exist -- in such a case,
        noSuchMethod won't be called).


    I think Dmitry is right: calling [[HasProperty]] on a proxy
    object should trigger its "has()" trap in the normal way, which
    should work with double lifting.

    IIRC the problem is a meta level-shifter wants to implement just
    one trap, get in the absence of invoke. Would integration of
    noSuchMethod using has ("object detection") break this?


No, this would be the case if [[HasProperty]] were called directly on the handler object. However, calling [[HasProperty]] on the proxy object will still query the handler for its "has" trap using the handler's [[Get]] internal method, i.e. it won't feature-test the handler object directly.

    Anyway, the general issue before us is a least this choice:

    * Either we stick with the current more minimal design, which
    besides being smaller also serves the goal of avoiding a
    method_missing (honey-)trap that tends to break JS's
    functional-programming,
    methods-can-be-extracted-and-passed-around-as-funargs-for-later-apply-usage,
    design win.

    * Or we add noSuchMethod and satisfy the "just give me a new trap,
    I'll either use it well in method-only programs or make it work
    with has/get/etc." use-cases of Dmitry and others.

    To reiterate something lest people get angry, this is not an easy
    trade, and I don't see anyone being rigid. It's simply a design
    decision we have to make one way or another.

    Going into the process in TC39, as I noted previously, I did my
    best to argue for noSuchMethod.


Damn, where have I been at that moment? ;)

    But having now written some proxy code, I'm much less concerned
    about the overhead of making a coherent proxy that has methods you
    can extract. That leaves me thinking the case of "just give me the
    method_missing trap" use-case is not worth the added weight. And
    Tom and Mark agree, and they are the champions of this proposal.


That's a good summary.

Yep, the summary is good, but as was mentioned -- if to forget about noSuchMethod and to move it to the minor goal, then the major one -- is solving the issues related with current imitation of noSuchMethod (via get+fn). The most inconvenient issue, is that in this implementation always a function is returned (that breaks checks such as if (!foo.bar) foo.bar = {} -- and actually breaks principles of an abstraction -- a designer of the `foo` forces a user of the `foo` to have a very strange situation -- always a function is returned for every non-existing stuff; thus, the user, by principle of the abstraction shouldn't know that he deals with a proxied object). Unfortunately, this issue is unresolvable, since to have virtual functional objects (being able to pass them as funargs e.g.) it's required to return always a function for every non-existing property. Plus, inconvinience with caching/invalidationg the cache to keep the === invariant.

So, from this viewpoint, this additional noSuchMethod hook seems just a logical _consequence_ of trying to avoid these issues (but not a desire to exactly have it).

    So can we let this stand for now and see how deployed Proxies in
    Firefox 4, beat on by real users who are willing to try them as
    spec'ed without noSuchMethod, fly with developers? That is one
    pretty good (albeit slow) way to get new data and insights.


I think this is a good choice in going forward. Since noSuchMethod can be an optional trap, it could be added later without breaking existing handlers that do not define it. The only issue we can run into is that some handler code out there already defines a noSuchMethod trap and means it to do something completely different than what a future spec. has in mind.


Yes, possibly it's a good choice, it really seems just a design decision ("either with, or without it"). So a real users feedback will be possibly a better reason. Let it be. The only thing I'm also worried is that it won't become too late.

P.S.: for fairness, possibly it's needed to mention on strawman proxy page, that such provided imitation of noSuchMethod has know lacks and that users should use it carefully.

Thanks,
Dmitry.

Cheers,
Tom


    Or we could keep arguing here, but I think we've gone around the
    same block more than once!


    /be

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



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

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

Reply via email to