On Thursday, 21 January 2021 at 14:00:28 UTC, cerjones wrote:
I'm a bit unsure if this is reasonable or not.
Thoughts?
Signed indexes are fine, if there is a principled reason to use
them. Just make sure that you are consistent by making `length`,
`opDollar`, etc. use signed types, as well.
Otherwise, you're laying a trap for users of the API who may
accidentally write code with mixed signed-unsigned integer
operations. That's a big problem, because mixed signed-unsigned
integer operations are done incorrectly by default, often with no
warnings, in D and some other C-like languages.
Consistently using signed types for lengths and indexes will make
the API incompatible with some Phobos (D's `std`) range code, but
you should get a compile-time error message. Mixing signed and
unsigned, on the other hand, is likely to result in subtly wrong
code that compiles without error, but sometimes does the wrong
thing.