Treating the abusive unsigned syndrome

Sergey Gromov snake.scaly at gmail.com
Wed Nov 26 12:16:35 PST 2008


Wed, 26 Nov 2008 09:12:12 -0600, Andrei Alexandrescu wrote:

> Don wrote:
>> My suspicion is, that if you allowed all signed-unsigned operations when 
>> at least one was a literal, and made everything else illegal, you'd fix 
>> most of the problems. In particular, there'd be a big reduction in 
>> people abusing 'uint' as a primitive range-limited int.
> 
> Well, part of my attempt is to transform that abuse into legit use. In 
> other words, I do want to allow people to consider uint a reasonable 
> model of natural numbers. It can't be perfect, but I believe we can make 
> it reasonable.
> 
> Notice that the fact that one operand is a literal does not solve all of 
> the problems I mentioned. There is for example no progress in typing u1 
> - u2 appropriately.
> 
>> Although it would be nice to have a type which was range-limited, 'uint' 
>> doesn't do it. Instead, it guarantees the number is between 0 and 
>> int.max*2+1 inclusive. Allowing mixed operations encourages programmers 
>> to focus the benefit of 'the lower bound is zero!' while forgetting that 
>> there is an enormous downside ('I'm saying that this could be larger 
>> than int.max!')
> 
> I'm not sure I understand this part. To me, the larger problem is 
> underflow, e.g. when subtracting two small uints results in a large uint.

I'm totally with Don here.  In math, natural numbers are a subset if
integers.  But uint is not a subset of int.  If it were, most of the
problems would vanish.  So it's probably feasible to ban uint from
SafeD, implement natural numbers by some other means, and leave uint for
low-level wizardry.



More information about the Digitalmars-d mailing list