Integer semantic in D, what are the tradeoff ? Do we have numbers ?

deadalnix deadalnix at gmail.com
Sun Dec 16 16:39:03 PST 2012


On Monday, 17 December 2012 at 00:27:42 UTC, Timon Gehr wrote:
> On 12/16/2012 11:52 PM, deadalnix wrote:
>> Following the thread on integer semantic, i wanted to know if 
>> some data
>> are available on the tradeoff we are doing. Let me first 
>> explain what
>> they are.
>>
>> In D, integer are guaranteed to loop, ie uint.max + 1 == 0 . 
>> In C, the
>> compiler is allowed to consider that operation do not 
>> overflow, which
>> allow some optimization. See 2 examples bellow :
>>
>> if(a < a + 1) { ... }
>>
>> On that case, a compiler can decide that the condition is 
>> alway true in
>> C. This may seems like a stupid piece of code, but in fact 
>> this is
>> something that the compiler can do on a regular basis. You 
>> have to keep
>> in mind that the example usually not appears in a way that is 
>> as obvious
>> as this, but after several code transformation (function 
>> inlining,
>> constant propagation, etc . . .).
>>
>> Another example is (x + 1) * 2; The compiler may decide to 
>> rewrite it as
>> 2 * x + 2 as this is done in one operation on many CPU, when 
>> (x + 1) * 2
>> is not always possible. Both are equivalent, expect if the 
>> integer
>> overflow.
>>
>
> Even if they do. I claim that 2 * x + 2 = (x + 1) * 2 holds for 
> every int x. The only difference is that one of the two might 
> set the CPU flags whereas the other wont. But flags are not 
> exposed to D code anyway.
>

Use x * 4 / 2 => x * 2

> It is not a very strong case, but the code may accidentally 
> still work. Also, it is much easier to hunt down a bug when it 
> does not disappear when unrelated code changes and is not 
> dependent on optimization or debug flags.
>

Maybe the compiler should generate a trap in debug mode and go 
full speed in release mode ? Code that accidentally work is not 
really a desirable result (even if i understand that this is 
arguably better).


More information about the Digitalmars-d mailing list