"IndexType" for ranges
Jonathan M Davis
jmdavisProg at gmx.com
Tue Oct 2 10:13:42 PDT 2012
On Tuesday, October 02, 2012 15:17:58 monarch_dodra wrote:
> You might think "just use typeof(length)" BUT:
> *you aren't even guaranteed that "typeof(length)" will be
> correct! Certain ranges, such as iota, will return a length
> usually of type uint, but be indexed with ulong... :/
> *Infinite ranges don't have length...
I'd argue that that's a bug in iota. iota's length even specifically returns
It makes no sense for length, opIndex, or opSlice to vary in type at all. They
should all use the same type (ideally size_t). The fact that it's not outright
required to be size_t is bad enough (though IIRC iota had some good reasons
for using ulong).
> These are not big changes I'm proposing, but they *may* break
> some existing ranges. Those ranges are arguably retarded, and
> these changes would enforce correctness, but they'd break none
> the less. I'd like some feedback if you think this trait is worth
Requiring that length, opIndex, and opSlice all use the same index type would
be very much the right way to go IMHO. If that's done however, I don't know if
we'll really need IndexType (though it may still be a good idea to add it).
In addition, I'd argue that they should require that they all be at least as
large as size_t (ideally, they'd even have to be either size_t or ulong and
that's it - no signed types allowed), but that may be too strict at this point
given that it could break existing code that did stupid stuff like use int
(which _way_ too many people seem inclined to do).
- Jonathan M Davis
More information about the Digitalmars-d