On Thursday, 20 November 2014 at 20:17:15 UTC, deadalnix wrote:
On Thursday, 20 November 2014 at 15:55:21 UTC, H. S. Teoh via
Digitalmars-d wrote:
Using unsigned types for array length doesn't necessarily lead to subtle bugs, if the language was stricter about mixing signed and unsigned
values.


Yes, I think that this is the real issue.

Thirded.

Array lengths are always non-negative integers. This is axiomatic. But the subtraction thing keeps coming up in this thread; what to do?

There's probably something fundamentally wrong with this and I'll probably be called an idiot by both "sides", but my gut feeling is that if expressions with subtraction simply returned a signed type by default, much of the problem would disappear. It doesn't catch everything and stuff like:

uint x = 2;
uint y = 4;
uint z = x - y;

...is still going to overflow, but maybe you know what you're doing? More importantly, changing it to auto z = x - y; actually works as expected for the majority of cases. (I'm actually on the fence re: pass/warn/error on mixing, but I _will_ note C's promotion rules have bitten me in the ass a few times and I have no particular love for them.)

-Wyatt

PS: I can't even believe how this thread has blown up, considering how it started.

Reply via email to