Le 14/01/2013 17:45, Kevin Smith a écrit :


    No boilerplate, no additional runtime costs than what's necessary.


Arguably, all of those examples could be addressed by unique symbols. Where is the need for strong runtime enforcement of encapsulation?
The variable was called "s" standing for secret. The example I gave was dummy, but examples in the wild are legion. Take your favorite node library. Anytime it defines a _property, this is where there should be a private name. One of the goal was that no one had access to the "s" part of the state. You need private symbols for that.


        I would personally like to see answers to the following questions:

        - Do private slots enable applications that would otherwise be
        impossible?

    I guess applications where you need memory for your actual content
    and not memory to compensate the lack of language expressiveness.
    I have no real idea of how much can be saved in terms of memory
    between the 3 snippets I've shared with millions of C instances.


Private symbols are not necessary for this. Unique symbols work just fine.
The implicit requirement was that only trusted parties were expected to have access to the "s" variable or equivalent in other examples. Unique symbols are enumerated, so do not do the job.


        - What are some examples of real-world applications where the
        runtime security of private slots is necessary?

    It really depends on what you mean by "necessary". As far as I'm
    concerned, it'd be all application using third-party code and a
    lot of websites embed a Google Analytics script, so that would be
    a lot of them (looking forward to the day GA is being hacked by
    the way :-) )


I want to see more along these lines. What is the security model for "loading third-party" code and in what way do private slots help?
I'm realizing now that I may be off-topic. I'm not that interested whether it's a new type of slot with the non-freezability property. I only care that it's private (non-enumerable with Object.getOwnPropertyNames)

Thinking more about the loading third-party code, I guess it's technically doable to do without private names. It comes to the cost of creating proxies doing the encapsulation for you. You provide a blacklist of properties that must not be reflected and the third party never sees them... In essence, you're listing the private properties and the proxy does the book keeping (details about non-configurability aside). It'd be more appropriate to define this private properties directly on the object if there is a commonality to what you wish keeping to your self when considering sharing the object.

I don't know whether this justifies a new type of slot. Brendan's "none of your business" argument has a point. Additionally, if you do not have access to a private symbol, why should you be provided by default the right to change related private property descriptors?

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

Reply via email to