<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">I think there is an idea which hasn't
      been mentionned yet which would be to let programmers "merge" or
      "assimilate" cross-frame symbols. Basically, when receiving a
      symbol from some frame, it'd be possible to say "I assimilate this
      symbol I received from another frame to my own persistableSymble".<br>
      I haven't thought about all the cases and details, but the idea
      behind it is to let users match symbols the way they wish
      preserving unforgeability.<br>
      <br>
      I think it would provide a way to solve both cross-frame and maybe
      dependency-tree issues.<br>
      <br>
      David<br>
      <br>
      Le 03/10/2012 19:40, Kevin Smith a écrit :<br>
    </div>
    <blockquote
cite="mid:CABikueB4ky9EOB-USfh_9NhECSFEBa78as6zpeoaL67TAN=N6Q@mail.gmail.com"
      type="cite">One of the main use cases for symbols is for defining
      object "protocols" that don't suffer from property name conflicts.
       The recently discussed `iterator` and `toStringTag` method names
      fall into this category.  The idea is that we can implement the
      protocol by defining methods using symbols, and thus avoid
      namespacing considerations.<br>
      <div class="gmail_quote">
        <div>
          <br>
        </div>
        <div>Designing and maintaining a global namespace is, well, no
          fun.</div>
        <div><br>
        </div>
        <div>But consider the multiple-global case in which we have
          scripts running in more than one frame.  It seems like
          protocols should be transferrable across frames.  For built-in
          protocols like `iterator`, this has to work:</div>
        <div><br>
        </div>
        <div>    function f(iterable) {</div>
        <div>      for (x of iterable) {</div>
        <div>        // This must work regardless of which frame
          `iterable` comes from</div>
        <div>      }</div>
        <div>    }</div>
        <div><br>
        </div>
        <div>But what about user-defined protocols?  Let's say we have a
          "Persistable" protocol:</div>
        <div><br>
        </div>
        <div>    export var persistName = new Symbol; // unique, not
          "private"</div>
        <div><br>
        </div>
        <div>And a function which makes use of this protocol:</div>
        <div><br>
        </div>
        <div>    import persistName from "Persistable.js";</div>
        <div><br>
        </div>
        <div>    function usePersistable(obj) {</div>
        <div><br>
        </div>
        <div>
                if (obj[persistName])</div>
        <div>        obj[persistName]();</div>
        <div>    }</div>
        <div><br>
        </div>
        <div>It seems like `usePersistable` should be able to work as
          expected even if `obj` comes from a different frame (in which
          "Persistable.js" was separately loaded).</div>
        <div><br>
        </div>
        <div>Another expression of the same problem occurs with
          versioning.</div>
        <div><br>
        </div>
        <div>Suppose that in a fairly complex module dependency graph,
          "Persistable-0.1.js" and "Persistable-0.2.js" are
          simultaneously loaded. ("Persistable" is on github and
          therefore in perpetual version-zero purgatory.)  It seems
          reasonable to expect that objects implementing the protocol
          defined by "Persistable-0.2.js" should be able to work with
          functions consuming the "Persistable-0.1.js" protocol.  But
          that is not possible with unique symbols.</div>
        <div><br>
        </div>
        <div>In summary, I don't think that we can really avoid global
          namespacing issues using system-generated unique symbols as we
          currently conceive of them.  Built-in protocols like
          `iterator` are a special "cheating" case, but we need to have
          an equally consistent story for user-defined protocols.</div>
        <span class="HOEnZb"><font color="#888888">
            <div><br>
            </div>
            <div>Kevin</div>
            <div><br>
            </div>
          </font></span></div>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">This body part will be downloaded on demand.</pre>
    </blockquote>
    <br>
  </body>
</html>