[phobos] std.array.ilength

Andrei Alexandrescu andrei at erdani.com
Thu Feb 17 15:00:39 PST 2011


I don't see a problem with using size_t throughout. The machine will be 
as good or better at operating on size_t (compared to int).

The size argument has been historically made about double and float. 
Today people use double throughout and float on occasion when they want 
to optimize storage.

@Don: Making it signed adds insult to injury. It means that we're 
inconsistent about the way we handle nonnegative entities in the 
language and its library.


Andrei

On 2/17/11 4:46 PM, David Simcha wrote:
> On Thu, Feb 17, 2011 at 5:28 PM, Andrei Alexandrescu <andrei at erdani.com
> <mailto:andrei at erdani.com>> wrote:
>
>     I assume I'm in the minority here, but I don't see a need for such a
>     function.
>
>     Andrei
>
>
> 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.
>
> With arrays, you don't have that choice, even though the *vast* 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.
>
> 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
> *at least* two reasons, i.e. two that I've encountered already:
>
> 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.
>
> 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.
>
> --Dave
>
>
>
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos


More information about the phobos mailing list