Michal Minich:

>Why on the earth should array indexes and lengths be signed !!!

I have explained why lengthy elsewhere. Short answer: signed fixnum integers 
are a bad approximation of natural numbers, because they are limited in range, 
they don't even tell you when you try to step out of their limits, and their 
limits aren't even symmetrical (so you can't perform abs(int.min)). But 
unsigned numbers are an even worse approximation, C signed-unsigned conversion 
rules turn signed values into unsigned in silly situations, and lot of 
programmers are bad in using them (this means they sometimes write buggy code 
when they use unsigned values. Yet the language forces such any kind of 
programmers to use unsigned integers often in even normal simple programs, 
because indexes and array lengths are everywhere). Unsigned values are unsafe, 
they are good if you need an array of bits to implement a bit set, or if you 
want to perform bitwise operations, otherwise I think they are often the wrong 
choice in D (I don't want to remove them as in Java because in some situat!
 ions they are very useful, especially in a near-system-language as D).


> I voted for the bug, but IMO it should be fixed by other means

One other partial solution is to introduce optional runtime integral overflows 
in D (probably two independent switches are needed, one for signed and one for 
unsigned integral overflows).


> and would probably affect lot of code.

Yes, but often for the better ;-)

Bye,
bearophile

Reply via email to