<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Le 15/01/2013 17:16, Kevin Smith a
      écrit :<br>
    </div>
    <blockquote
cite="mid:CABikueB2HitddMR9vRVBYRyUUruGYE4GUS9axAgKyw+C49DY-Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF">
                <div class="im"><br>
                </div>
                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.<br>
              </div>
            </blockquote>
            <div><br>
            </div>
            <div style="">Again, that's arguable.  Certainly it would be
              better expressed with a symbol.  But private?  Are most
              node authors attempting to write "secure" code?  Of course
              not!</div>
          </div>
        </div>
      </div>
    </blockquote>
    People writing Java code do use the private keyword. I think if
    encapsulation wasn't that hard to achieve, people would do it. I'm
    looking forward to see people use classes and modules without
    putting more effort that they do currently and yet write more secure
    code by default.<br>
    <br>
    <blockquote
cite="mid:CABikueB2HitddMR9vRVBYRyUUruGYE4GUS9axAgKyw+C49DY-Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div style=""> Node (by itself) does not provide a secure
              environment for untrusted code.</div>
          </div>
        </div>
      </div>
    </blockquote>
    What I know of Node makes me think it's not that much worse than any
    other platform and from experience, at least much better than
    anything I've played wit in PHP.<br>
    <br>
    <blockquote
cite="mid:CABikueB2HitddMR9vRVBYRyUUruGYE4GUS9axAgKyw+C49DY-Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div style=""><br>
            </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF"> One of the goal was
                that no one had access to the "s" part of the state. You
                need private symbols for that.</div>
            </blockquote>
            <div><br>
            </div>
            <div style="">But why?  Where is this strict runtime privacy
              requirement coming from?  What I'm not understanding is
              the larger context in which mutually untrusting code
              supposedly shares raw (non-proxied) objects.</div>
          </div>
        </div>
      </div>
    </blockquote>
    The reason you can't write code in any blog comment these days is
    that people have given up on securing untrusted code. Likewise for
    emails. HTML is used for emails, but scripts aren't executed,
    because email client (web-based or not) have given up on the idea of
    securing email code.<br>
    <br>
    <blockquote
cite="mid:CABikueB2HitddMR9vRVBYRyUUruGYE4GUS9axAgKyw+C49DY-Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div style="">Where is the real world code doing this?</div>
          </div>
        </div>
      </div>
    </blockquote>
    I think iGoogle does this. Otherwise, close to nowhere because
    people have given up.<br>
    My guess is that they have given up because the language does not
    make easy to sandbox untrusted code. As soon as you have naturally
    written your code in JavaScript, it's unsafe and it takes a lot of
    work making it safe. People give up. Private symbols are one tool to
    lower the barrier to writing code secure by default.<br>
    <br>
    <blockquote
cite="mid:CABikueB2HitddMR9vRVBYRyUUruGYE4GUS9axAgKyw+C49DY-Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div style="">For what applications?  Really, I want to
              know! : )</div>
          </div>
        </div>
      </div>
    </blockquote>
    They do not exist unfortunately. That's a chicken and egg problem.
    As soon as it'll be easier, people will probably restart thinking of
    what they want to do with the new tool they have in hand.<br>
    That's what happened when JS engines got faster. Developers didn't
    stay still happy that their websites just got faster. Websites just
    started to get more and more JS.<br>
    <br>
    <blockquote
cite="mid:CABikueB2HitddMR9vRVBYRyUUruGYE4GUS9axAgKyw+C49DY-Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div style="">In "Crockfordian" design, "name encapsulation"
              and "security encapsulation" are indistinguishable.  But
              unique symbols address "name encapsulation".  Is there
              really a need to address "security encapsulation" at the
              *object property level*?</div>
          </div>
        </div>
      </div>
    </blockquote>
    It seems that it lowers the barrier to writing secure code by
    default. If that's the only thing to gain, I'll take it.<br>
    <br>
    <blockquote
cite="mid:CABikueB2HitddMR9vRVBYRyUUruGYE4GUS9axAgKyw+C49DY-Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div style=""><br>
            </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF"> 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).</div>
            </blockquote>
            <div><br>
            </div>
            <div style="">Sure - and approaches like this (or simpler -
              people are clever!) can be factored away into a neat
              library, without having to mess with the underlying object
              model.</div>
            <div style=""><br>
            </div>
            <div style="">ES6 provides WeakMaps and Proxies.  Why not
              see what people do with those before introducing private
              slots?<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    I wouldn't be opposed to that, but that's just my opinion. Still,
    private symbols allow property-like syntax. I haven't followed the
    latest developments of how classes and private symbols interact, but
    I'm not too worried it goes well. Assuming it does, it makes it easy
    for people to use actually private properties in their code,
    lowering the barrier to writing well-encapsulated code.<br>
    <br>
    David<br>
  </body>
</html>