<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Nov 11, 2010, at 11:30 AM, Dmitry A. Soshnikov wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
<div text="#000000" bgcolor="#ffffff">
    OTOH, negative indices, are even not array indices. I.e.<br>
    <br>
    var a = [1,2];<br>
    a[-1] = 0;<br>
    print(a); // 1,2<br>
    print(a.length); // 2<br>
    <br>
    From this viewpoint -- for what are they? Seems again, `-n`
    notations for arrays and strings is useful as a "from the
    end"-sugar. So now I may propose it.<br></div></blockquote><div><br></div><div>They're property names, what you're suggesting would be a fairly dramatic change in behaviour and I would be concerned about it causing site breakages.</div><div><br></div><div>I can easily imagine code that did:</div><div>var someArray = ..;</div><div>var i = someArray.length;</div><div>while(v = someArray[--i]) { .. do something... }</div><div><br></div><div>Which would now be wrong.</div><div><br></div><div>Likewise bugs that lead to code doing a[-1]=foo; would change from being "safe" to modifying the content of the actual array values.</div><div><br></div><div>I'm sure I've had this discussion before, the fundamental problem is that ES does not really distinguish between dot and bracket property access, whereas afaik python does (i don't know about ruby).</div><div><br></div><div>--Oliver</div><br><blockquote type="cite"><div text="#000000" bgcolor="#ffffff">
    <br>
    On 11.11.2010 21:26, Dmitry A. Soshnikov wrote:
    <blockquote cite="mid:4CDC356C.1050304@gmail.com" type="cite">
      
      
      Actually, I'm still not sure myself whether I want this semantics
      in JS for arrays. I remember one case (some simple math task) when
      I was needed a[-1] and was glad that JS supports it -- I used `for
      (var i = -2; i &lt; 10; i++) a[i]`, and it was very elegant
      decision at that moment.<br>
      <br>
      There is also one lack (?) with decreasing counter loop (brought
      in discussion on Twitter), e.g.:<br>
      <br>
      var a = [1, 2, 3], i = a.length;<br>
      <br>
      while (v = a[--i]) {<br>
      &nbsp; print(i, v)<br>
      }<br>
      <br>
      that brings: 2,3&nbsp; 1,2&nbsp; 0,1&nbsp; -1,3&nbsp; -2,2&nbsp; -3,1<br>
      <br>
      i.e. double enumeration with this semantics. But formally, it's
      not a bug, but a feature -- both Python and Ruby have the same
      semantics in such a `while` case.<br>
      <br>
      Another reason I'm still no sure about a[-1] is that JS (in
      contrast with the same Python and Ruby) has no stratification of
      normal properties -- via dot notation, and subscription properties
      -- via square bracket notation. I mentioned this in previous
      mentioned thread. And from this viewpoint, probably it's not good
      that o[-1] means exactly "-1" and a[-1] means a[`last`]. Don't
      know.<br>
      <br>
      <span id="result_box" class="short_text" lang="en"><span style="color: rgb(0, 0, 0);" title="">Want both -- and
          (probably sometimes needed) "-1"</span></span>, and sugar for
      [`last`].<br>
      <br>
      Though, repeat, since ES5 brought special semantics for
      subscription of strings, i.e. "abc"[0] is "a", maybe it worth to
      make another sugar for arrays too? Btw, if yes, it will touch
      strings too.<br>
      <br>
      Dmitry.<br>
      <br>
      On 11.11.2010 13:24, Dmitry A. Soshnikov wrote:
      <blockquote cite="mid:4CDBC448.2060707@gmail.com" type="cite">Hello,

        <br>
        <br>
        How likely (based on backward compats) that Harmony will support
        Pythonic negative indices for arrays? Ruby supports them too.
        There was previous indirect mention, were Brendan agreed that
        Harmony needs such a semantics for arrays, however, that
        discussion wasn't formed to something concrete. <br>
        <br>
        Recently, there was the same discussion in CoffeeScript's
        tracker -- <a moz-do-not-send="true" class="moz-txt-link-freetext" href="https://github.com/jashkenas/coffee-script/issues#issue/827">https://github.com/jashkenas/coffee-script/issues#issue/827</a>
        . Since Coffee uses JavaScript as its lower level, there were
        proposals to provide an alternative syntax for this (e.g. a[* -
        1], where * means a.length, allowing this feature to be
        generic), though, I'm not sure this exact syntax is needed for
        ES. However, I mentioned there, that if Harmony itself will
        support this feature in Python's/Ruby's semantics, then Coffee
        won't need an alternative thing. <br>
        <br>
        Currently, this feature may be easily implemented using proxies:
        <a moz-do-not-send="true" class="moz-txt-link-freetext" href="https://github.com/DmitrySoshnikov/es-laboratory/blob/master/examples/array-negative-indices.js">https://github.com/DmitrySoshnikov/es-laboratory/blob/master/examples/array-negative-indices.js</a>
        (example), <a moz-do-not-send="true" class="moz-txt-link-freetext" href="https://github.com/DmitrySoshnikov/es-laboratory/blob/master/src/array-negative-indices.js">https://github.com/DmitrySoshnikov/es-laboratory/blob/master/src/array-negative-indices.js</a>
        (implementation), however possibly it's good to have this
        semantics for objects with [[Class]] "Array" as native. I think
        it's acceptable, since we already have such alternative
        semantics for String objects. <br>
        <br>
        Toughs? <br>
        <br>
        Dmitry. <br>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </div>

_______________________________________________<br>es-discuss mailing list<br><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>https://mail.mozilla.org/listinfo/es-discuss<br></blockquote></div><br></body></html>