<div class="gmail_quote">On Thu, Feb 17, 2011 at 5:28 PM, Andrei Alexandrescu <span dir="ltr"><<a href="mailto:andrei@erdani.com">andrei@erdani.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I assume I'm in the minority here, but I don't see a need for such a function.<br>
<br>
Andrei<br></blockquote></div><br>The point you're missing is that arrays are a very commonly used thing and give you no choice about integer widths.  Most of the time, if you don't need the extra width (most values in any program represent quantities that can't plausibly be bigger than the maximum value of some fixed-width integer) and want to avoid either the viral effects of using wide integers or the need to insert casts all over the place, you just use a narrower integer.  For the vast majority of quantities people deal with, 32-bit ints are more than enough, so they tend to be what's used most in practice.<br>
<br>With arrays, you don't have that choice, even though the <b>vast</b> majority of the time int is plenty and you tend to know when it isn't.  Therefore, you get stuck either dealing with the viralness of array.length being a ulong on 64 or with the ugliness of manually inserting casts everywhere.  You gain virtually nothing in safety in exchange because arrays are almost never (and when I say almost never I mean I've never seen one in my life) over 2 billion elements long.  <br>
<br>The point is that by adding this function you lose epsilon in safety, where epsilon is some tiny but nonzero value, and gain a whole bunch in usability.  Realistically, using size_t everywhere is not a good idea (though it admittedly is a good idea in a large portion of cases) for <b>at least</b> two reasons, i.e. two that I've encountered already:<br>
<br>1.  Storing arrays of indices into other arrays with size_t's is incredibly wasteful unless there's a realistic chance that one of the arrays you're indexing could be billions of elements long.<br><br>2.  Some libraries written in other languages that interface with D (GTK, BLAS and LAPACK come to mind) always assume, even on 64, that int is enough for the length of an array.  The ugliness and tediousness of putting casts everywhere to accommodate this is slowly breeding insanity in me.<br>
<br>--Dave<br>