<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Le 02/04/2012 17:59, Irakli Gozalishvili a écrit :
    <blockquote cite="mid:958FEAB7D1774AF38B63A303484C58F3@gmail.com"
      type="cite">
      <div> <span style="font-size: 12px;">Hi David,</span> </div>
      <div><span style="font-size: 12px;"><br>
        </span></div>
      <div><span style="font-size: 12px;">Your protected work reminds me
          a lot of what we did with `namespcase` module in jetpack:</span></div>
      <div><span style="font-size: 12px;"><a
            class="moz-txt-link-freetext"
href="https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/api-utils/namespace.html">https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/api-utils/namespace.html</a></span></div>
      <div><span style="font-size: 12px;">Which I also blogged about
          some time ago: <a class="moz-txt-link-freetext"
            href="http://jeditoolkit.com/2012/03/15/namespaces.html#post">http://jeditoolkit.com/2012/03/15/namespaces.html#post</a></span></div>
    </blockquote>
    As soon as I first wrote "Protected(this)", I thought of Jetpack
    namespaces :-)<br>
    <br>
    I remember that one of your complaints about namespaces was that
    inheritance was not supported. Do you think there is a workable
    middleground between namespaces and what I've showed here that would
    have the benefits of namespaces and inheritance?<br>
    <br>
    <blockquote cite="mid:958FEAB7D1774AF38B63A303484C58F3@gmail.com"
      type="cite">
      <div>
        <div>
          <blockquote type="cite" style="border-left-style: solid;
            border-left-color: rgb(0, 33, 98); color: rgb(0, 33, 98);
            border-top-width: 1px; border-right-width: 1px;
            border-bottom-width: 1px; border-left-width: 1px;
            margin-left: 0px; padding-left: 10px; padding-right: 0px;
            margin-right: 0px; "><span>
              <div>
                <div>
                  <div>I have made obvious by juxtaposing both examples
                    that JavaScript</div>
                  <div>requires from the programmer to choose between
                    encapsulation and</div>
                  <div>inheritance. Indeed, as demonstarted above,
                    encapsulation requires a</div>
                  <div>shared scope.</div>
                </div>
              </div>
            </span></blockquote>
          <div><br>
          </div>
          <div><span style="font-size: 12px;">I totally agree that with
              this pain point, but hopefully private names will help
              this.</span></div>
        </div>
      </div>
    </blockquote>
    What drove me to reimplement something like Java's protected is that
    I fear private names won't be enough.<br>
    <br>
    Basically, if an object o is an A and all As are Bs, if you only
    have private names, then, o's methods inherited from B can access
    private names related to B. o's methods inherited from A can access
    private names related to A.<br>
    However, A methods can access private names related to B only if B
    shares them (like the "secret" and "age" of my example). B can share
    them "globally" (in the sense of "to anyone", not necessarily as
    properties of the global object), which effectively makes the
    private names no longer private, but only unique, or A and B need to
    share a common scope which, in my opinion, does not scale (it forces
    A and B to be in the same file which is not always an option if you
    want to use code written in a library)<br>
    <br>
    <br>
    <blockquote cite="mid:958FEAB7D1774AF38B63A303484C58F3@gmail.com"
      type="cite">
      <div>
        <div>
          <div><span style="font-size: 12px;">Still I think that there
              are other expression problems with classes that could be
              elegantly solved using clojure like protocols that I have
              posted other day:</span></div>
          <div><span style="font-size: 12px;"><br>
            </span></div>
          <div><span style="font-size: 12px;"><a
                class="moz-txt-link-freetext"
href="http://jeditoolkit.com/2012/03/21/protocol-based-polymorphism.html#post">http://jeditoolkit.com/2012/03/21/protocol-based-polymorphism.html#post</a></span></div>
        </div>
        <div><span style="font-size: 12px;"><a
              class="moz-txt-link-freetext"
href="https://mail.mozilla.org/pipermail/es-discuss/2012-March/021603.html">https://mail.mozilla.org/pipermail/es-discuss/2012-March/021603.html</a></span></div>
      </div>
    </blockquote>
    I had completely missed that.<br>
    <br>
    <blockquote cite="mid:958FEAB7D1774AF38B63A303484C58F3@gmail.com"
      type="cite">
      <div>
        <div><span style="font-size: 12px;">Unfortunately I did not got
            much of a feedback ;)</span></div>
      </div>
    </blockquote>
    I'll need to watch the video and read more, but that's an
    interesting idea.<br>
    <br>
    "Note: That even though both Event and Installable protocols define
    functions on and off. Also Object implements both still protocols,
    but there no conflicts arise and functions defined by both protocols
    can be used without any issues!"<br>
    => This part is rather intriguing. I'm afraid this may lead to
    confusion. When I write .on, am I installing? adding a listener?
    Doing both?<br>
    Also, how are name conflits resolved? Regardless of the exact
    choice, it seems to be implicit and thus certainly confusing. On
    that aspect, I would tend to prefer traits or a traits-like
    solution.<br>
    <br>
    David<br>
  </body>
</html>