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