<font size="2">Hmm, I don&#39;t see anything at <a href="http://bugs.dojotoolkit.org/browser/dojox/trunk/charting/DataChart.js#L99" target="_blank">http://bugs.dojotoolkit.org/browser/dojox/trunk/charting/DataChart.js#L99</a> but if our own code breaks somehow then we definitely shouldn&#39;t change the behavior of those array functions.</font><div>

<font size="2"><br></font></div><div><font size="2">I tried your test case, I see that:</font></div><div><font size="2"><br></font></div><div><font size="2"><div>
<span>&gt;&gt;&gt; new Array(10).map(function(x) { return 999; })</span></div><div><span><span>[</span><span>undefined</span><span>, </span><span>undefined</span><span>, </span><span>undefined</span><span>, </span><span>undefined</span><span>, </span><span>undefined</span><span>, </span><span>undefined</span><span>, </span><span>undefined</span><span>, </span><span>undefined</span><span>, </span><span>undefined</span><span>, </span><span>undefined</span><span></span><span>]</span></span></div>

<div><span><span><br></span></span></div><div><span><span>whereas:</span></span></div>
<div><span><span><br></span></span></div><div><span><span><div>
<span>&gt;&gt;&gt; dojo.map(new Array(10), function(x) { return 999; })</span></div><div><span><span>[</span><span>999</span><span>, </span><span>999</span><span>, </span><span>999</span><span>, </span><span>999</span><span>, </span><span>999</span><span>, </span><span>999</span><span>, </span><span>999</span><span>, </span><span>999</span><span>, </span><span>999</span><span>, </span><span>999</span><span></span><span>]</span></span></div>

</span></span></div></font><br><div class="gmail_quote">On Thu, Mar 17, 2011 at 12:25 PM, Stephen Chung <span dir="ltr">&lt;<a href="mailto:Stephen.Chung@intexact.com" target="_blank">Stephen.Chung@intexact.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">
<div dir="ltr">
<div style="font-family:&#39;Droid Sans&#39;;color:#080000;font-size:14pt">
<div><font size="4">But the dojo.* ones do iterate over sparse arrays, and at 
least certain modules depend on this fact (such as dojox.charting when creating 
bar charts) – dojox/charting/DataChart.js line 99.  This means that a user 
whose site runs perfectly would break once he makes a build with webkitMobile, 
and it will also take him ages to figure out why; may not even be possible 
unless he traces into the source code.</font></div>
<div><font size="4"></font> </div>
<div><font size="4">- Stephen</font></div>
<div style="font-style:normal;display:inline;font-family:&#39;Calibri&#39;;color:#000000;font-size:small;font-weight:normal;text-decoration:none">
<div style="font:10pt tahoma">
<div><font color="#080000" size="4" face="Droid Sans"></font> </div>
<div style="background:#f5f5f5">
<div><b>From:</b> <a title="bill@dojotoolkit.org" href="mailto:bill@dojotoolkit.org" target="_blank">Bill Keese</a> </div>
<div><b>Sent:</b> Thursday, 17 March, 2011 10:42 AM</div>
<div><b>To:</b> <a title="dojo-contributors@mail.dojotoolkit.org" href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo dev.</a> </div>
<div><b>Cc:</b> <a title="Stephen.Chung@intexact.com" href="mailto:Stephen.Chung@intexact.com" target="_blank">Stephen Chung</a> </div><div><div></div><div>
<div><b>Subject:</b> Re: [dojo-contributors] Dojo 1.7 Goals: has() and granular 
dependency lists</div></div></div></div></div>
<div><font color="#080000" size="4" face="Droid Sans"></font> </div></div>
<div style="font-style:normal;display:inline;font-family:&#39;Calibri&#39;;color:#000000;font-size:small;font-weight:normal;text-decoration:none"><div><div></div><div><font size="2">I think that&#39;s operating according to spec, no?<br>

</font><br>
<div class="gmail_quote">2011/3/17 Stephen Chung <span dir="ltr">&lt;<a href="mailto:Stephen.Chung@intexact.com" target="_blank">Stephen.Chung@intexact.com</a>&gt;</span><br>
<blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex" class="gmail_quote">
  <div dir="ltr" text="#000000" bgcolor="#ffffff">
  <div dir="ltr">
  <div style="font-family:&#39;Droid Sans&#39;;color:#080000;font-size:14pt">
  <div><font size="4">Strange.  I was bitten by a bug that took me ages to 
  figure out.  I was running Chrome 10 and it seems that V8’s native 
  implementation of array prototype functions don’t iterate over sparse 
  arrays.  Try “Array.prototype.map.call(new Array(10), function(x) { 
  return 999; })” which still returns a sparse array.</font></div>
  <div><font size="4"></font> </div>
  <div><font size="4">Neither does Safari 5, nor FireFox 4.</font></div>
  <div><font size="4"></font> </div>
  <div><font size="4">Currently, the dojo.* array functions are mapped to native 
  implementations only for the webkitMobile flag.  We’ve got to be careful 
  about this because, if the user turns on webkitMobile, obviously he/she 
  intends to build for WebKit on a mobile device, which most likely will be 
  running Nitro or V8...</font></div>
  <div><font size="4"></font> </div>
  <div><font size="4">- Stephen</font></div>
  <div><font size="4"></font> </div>
  <div style="font-style:normal;display:inline;font-family:&#39;Calibri&#39;;color:#000000;font-size:small;font-weight:normal;text-decoration:none">
  <div style="font:10pt tahoma">
  <div><font color="#080000" size="4" face="Droid Sans"></font> </div>
  <div style="background:#f5f5f5">
  <div><b>From:</b> <a title="dante@dojotoolkit.org" href="mailto:dante@dojotoolkit.org" target="_blank">Peter Higgins</a> </div>
  <div><b>Sent:</b> Wednesday, 16 March, 2011 8:51 PM</div>
  <div><b>To:</b> <a title="dojo-contributors@mail.dojotoolkit.org" href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo 
  dev.</a> </div>
  <div><b>Subject:</b> Re: [dojo-contributors] Dojo 1.7 Goals: has() and 
  granular dependency lists</div></div></div>
  <div><font color="#080000" size="4" face="Droid Sans"></font> </div></div>
  <div style="font-style:normal;display:inline;font-family:&#39;Calibri&#39;;color:#000000;font-size:small;font-weight:normal;text-decoration:none">
  <div>
  <div></div>
  <div>On 3/15/11 11:18 PM, Bill Keese wrote: 
  <blockquote type="cite"><font size="2">I&#39;d suggest just leaving array.js as 
    is.</font> 
    <div><font size="2"><br></font></div>
    <div><font size="2">Although you could have a &quot; config-use-native-array&quot; flag, 
    it&#39;s probably not worth the confusion for users, especially since you need 
    to explain how dojo.forEach() etc. would behave differently depending on the 
    browser.</font></div>
    <div><font size="2"><br></font></div>
    <div><font size="2">About the webkitMobile build flag, I&#39;m not even sure that 
    anyone is using it, so don&#39;t take those code paths too 
    seriously.<br></font><br></div></blockquote>While it is very likely few people 
  are using it, the reality of it is that we&#39;ve sent natives there for [however 
  long] and no one seems have been bitten by the fact they are able to walk over 
  sparse arrays. All the major libraries (afaik) don&#39;t do sparse arrays unless 
  deferring to native, and it seems like either a) no one [as in more than just 
  the no ones that use webkitmobile] uses sparse arrays in real life or b) see 
  a. <br><br>~phiggins<br><br><br>
  <blockquote type="cite">
    <div>
    <div class="gmail_quote">2011/3/16 Kris Zyp <span dir="ltr">&lt;<a href="mailto:kzyp@dojotoolkit.org" target="_blank">kzyp@dojotoolkit.org</a>&gt;</span><br>
    <blockquote style="border-left:rgb(204,204,204) 1px solid;margin:0pt 0pt 0pt 0.8ex;padding-left:1ex" class="gmail_quote">
      <div text="#000000" bgcolor="#FFFFFF">Interesting. Should we do 
      this?<br>if(has(&quot;array-foreach&quot;) &amp;&amp; 
      has(&quot;config-use-native-array&quot;)){<br>  /* native array methods 
      */<br><br>(where config-use-native-array defaults to 
      false)<br>Thanks,<br><font color="#888888">Kris</font> 
      <div>
      <div><br><br>On 3/15/2011 9:09 AM, Eugene Lazutkin wrote:<br>
      <blockquote type="cite">If memory serves me correctly, this decision 
        (use our implementation in<br>all browsers) was done because of two 
        factors: in almost all browsers<br>native implementations were *slower* 
        than trivial JavaScript once, and<br>because of space considerations --- 
        why ship two implemntations + a<br>switch between them, if there are no 
        other benefits?<br><br>Just ran a test in Chrome 11 on Linux --- native 
        versions 2-3 times<br>slower on this benchmark: <a href="http://www.perfjs.com/#638003" target="_blank">http://www.perfjs.com/#638003</a><br><br>I tried it on 
        FF3.6 --- forEach is twice slower, yet reduce* is almost<br>the 
        same.<br><br>It appears that the current generation of browsers do not 
        give us clear<br>incentive to switch, other than for possible build 
        reduction purposes.<br><br>Cheers,<br><br>Eugene Lazutkin<br><a href="http://lazutkin.com/" target="_blank">http://lazutkin.com/</a><br><br>On 03/15/2011 08:32 AM, 
        Peter Higgins wrote:<br>&gt; All the array utilities do this in the 
        webkit mobile build (use natives,<br>&gt; weird weird pragma at the 
        bottom), but we were never serving native<br>&gt; iterators as our own 
        even in browsers that support it.<br><br>&gt; On 3/15/11 9:13 AM, Kris 
        Zyp wrote:<br>&gt;&gt; On 3/14/2011 10:24 PM, Bill Keese 
        wrote:<br>&gt;&gt;&gt; Doesn&#39;t your patch break 
        backwards-compatibility?     Note 
        the<br>&gt;&gt;&gt; comment in all the methods in the current 
        code:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; //This method corresponds to the 
        JavaScript 1.6 Array.indexOf method,<br>&gt;&gt;&gt; with one 
        difference: when<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; //run over sparse 
        arrays, the Dojo function invokes the callback for<br>&gt;&gt;&gt; every 
        index whereas JavaScript<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; //1.6&#39;s indexOf 
        skips the holes in the sparse 
        array.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; I didn&#39;t 
        write any new code, I just switched from the old build 
        pragma<br>&gt;&gt; to has() branching. If it is not 
        backwards-compatible, it hasn&#39;t been<br>&gt;&gt; backwards-compatible 
        for sometime... So it is backwards-compatible<br>&gt;&gt; with the old 
        backwards-incompatibility ;).<br>&gt;&gt;<br>&gt;&gt; 
        Kris<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; 
        _______________________________________________<br>&gt;&gt; 
        dojo-contributors mailing list<br>&gt;&gt; <a href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo-contributors@mail.dojotoolkit.org</a><br>&gt;&gt; <a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors" target="_blank">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</a><br>

<br><br><br>&gt; 
        _______________________________________________<br>&gt; 
        dojo-contributors mailing list<br>&gt; <a href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo-contributors@mail.dojotoolkit.org</a><br>&gt; <a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors" target="_blank">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</a><br>

</blockquote><span style="white-space:pre-wrap">&gt;<br>_______________________________________________<br><br>&gt; 
      dojo-contributors mailing list<br><br>&gt; <a href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo-contributors@mail.dojotoolkit.org</a><br><br>&gt;<br><a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors" target="_blank">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</a></span><br>

<br><br></div></div></div><br>_______________________________________________<br>dojo-contributors 
      mailing list<br><a href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo-contributors@mail.dojotoolkit.org</a><br><a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors" target="_blank">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</a><br>

<br></blockquote></div>
    <div> </div></div><pre><fieldset></fieldset>
_______________________________________________
dojo-contributors mailing list
<a href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo-contributors@mail.dojotoolkit.org</a>
<a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors" target="_blank">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</a>
</pre></blockquote><br></div></div>
  <hr>

  <div>_______________________________________________<br>dojo-contributors 
  mailing list<br><a href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo-contributors@mail.dojotoolkit.org</a><br><a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors" target="_blank">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</a><br>

</div>
  <hr>
  <br>No virus found in this incoming message.<br>Checked by AVG - <a href="http://www.avg.com" target="_blank">www.avg.com</a> <br>Version: 9.0.894 / 
  Virus Database: 271.1.1/3509 - Release Date: 03/16/11 
  03:34:00<br></div></div></div></div><br>_______________________________________________<br>dojo-contributors 
  mailing list<br><a href="mailto:dojo-contributors@mail.dojotoolkit.org" target="_blank">dojo-contributors@mail.dojotoolkit.org</a><br><a href="http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors" target="_blank">http://mail.dojotoolkit.org/mailman/listinfo/dojo-contributors</a><br>

<br></blockquote></div><br>
</div></div><p></p><div><div></div><div>
<hr>
<br>No virus found in this incoming message.<br>Checked by AVG - <a href="http://www.avg.com" target="_blank">www.avg.com</a> 
<br></div></div>Version: 9.0.894 / Virus Database: 271.1.1/3511 - Release Date: 03/17/11 
03:34:00<br><p></p></div></div></div></div>
</blockquote></div><br></div>