'int' is enough for 'length' to migrate code from x86 to x64

Don via Digitalmars-d digitalmars-d at puremagic.com
Thu Nov 20 00:18:23 PST 2014


On Wednesday, 19 November 2014 at 17:55:26 UTC, Andrei 
Alexandrescu wrote:
> On 11/19/14 6:04 AM, Don wrote:
>> Almost everybody seems to think that unsigned means positive. 
>> It does not.
>
> That's an exaggeration. With only a bit of care one can use D's 
> unsigned types for positive numbers. Please let's not reduce 
> the matter to black and white.
>
> Andrei

Even in the responses in this thread indicate that about half of 
the people here don't understand unsigned.

"unsigned" means "I want to use modulo 2^^n arithmetic". It does 
not mean, "this is an integer which cannot be negative".

Using modulo 2^^n arithmetic is *weird*. If you are using 
uint/ulong to represent a non-negative integer, you are using the 
incorrect type.

> "With only a bit of care one can use D's unsigned types for 
> positive numbers."

I do not believe that that statement to be true. I believe that 
bugs caused by unsigned calculations are subtle and require an 
extraordinary level of diligence. I showed an example at DConf, 
that I had found in production code.

It's particularly challenging in D because of the widespread use 
of 'auto':

auto x = foo();
auto y = bar();
auto z = baz();

if (x - y > z) { ... }


This might be a bug, if one of these functions returns an 
unsigned type.  Good luck finding that. Note that if all 
functions return unsigned, there isn't even any signed-unsigned 
mismatch.

I believe the correct statement, is "With only a bit of care one 
can use D's unsigned types for positive numbers and believe that 
one's code is correct, even though it contains subtle bugs."



More information about the Digitalmars-d mailing list