2009/06/24 Daniel Fischer <daniel.is.fischer at web.de>:
> Am Mittwoch 24 Juni 2009 18:50:49 schrieb Jason Dusek:
> > 2009/06/24 Ketil Malde <ketil at malde.org>:
> > > So in effect, you have a zero-length underlying array, but
> > > the array implementation still keeps track of the real
> > > indices and tries to print some contents. (Correct?)
> >
> > I don't quite understand your reasoning here.
>> The 'length' of the array, as in 'number of elements' is
> calculated by multiplying the lengths in each dimension
>> [...]
>> I don't know if that's how it's implemented, but that's the
> reasoning leading to an array of size 0.
That seems reasonable, actually. My system is nominally 64bit
(it's MacIntel) but the kernel claims `i386` so there we are.
It's too bad that indexes are `Int` instead of `Word` under
the hood. Why is `Int` used in so many places where it is
semantically wrong? Not just here but also in list indexing...
Indices/offsets can only be positive and I can't see any good
reason to waste half the address space -- yet we encounter
this problem over and over again.
This problem probably runs pretty deep. Just having a flexible
"backing index type" is only part of the issue, since pointer
indexing operations work with `Int` as well. If you wanted to
hide all this stuff, you'd need to segment particularly large
unboxed arrays...
--
Jason Dusek