On 18 March 2012 21:15, Tove <[email protected]> wrote: > On Sunday, 18 March 2012 at 19:08:54 UTC, Manu wrote: > >> So D is really finicky with integer casts. Basically everything that might >> produce a loss of data warning in C is an outright compile error. >> This results in a lot of explicit casting. >> >> Now I don't take issue with this, actually I think it's awesome, but I >> think there's one very important usability feature missing from the >> compiler with such strict casting rules... >> Does the compiler currently track the range of a value, if it is known? >> And >> if it is known, can the compiler stop complaining about down casts and >> perform the cast silently when it knows the range of values is safe. >> >> int x = 123456; >> x &= 0xFF; // x is now in range 0..255; now fits in a ubyte >> ubyte y = x; // assign silently, cast can safely be implicit >> >> I have about 200 lines of code that would be so much more readable if this >> were supported. >> I'm finding that in this code I'm writing, casts are taking up more space >> on many lines than the actual term being assigned. They are really getting >> in the way and obscuring the readability. >> Not only masks, comparisons are also often used of limit the range of >> values. Add D's contracts, there is good chance the compiler will have >> fairly rich information about the range of integers, and it should >> consider >> that while performing casts. >> > > Walter even wrote an article about it: > http://drdobbs.com/blogs/**tools/229300211<http://drdobbs.com/blogs/tools/229300211>
Interesting. This article claims: Can we do better? Yes, with "Value Range Propagation", a historically obscure compiler optimization that became a handy feature in the D programming language. But it doesn't seem to work. Am I just doing something wrong?
