dmd 1.046 and 2.031 releases
Robert Jacques
sandford at jhu.edu
Tue Jul 7 11:05:33 PDT 2009
On Tue, 07 Jul 2009 11:36:26 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> Robert Jacques wrote:
>> Andrei, I have a short vector template (think vec!(byte,3), etc) where
>> I've had to wrap the majority lines of code in cast(T)( ... ), because
>> I support bytes and shorts. I find that both a kludge and a pain.
>
> Well suggestions for improving things are welcome. But I don't think it
> will fly to make int+int yield a long.
Suggestion 1:
Loft the right hand of the expression (when lofting is valid) to the size
of the left hand. i.e.
byte a,b,c;
c = a + b; => c = a + b;
short d;
d = a + b; => d = cast(short) a + cast(short) b;
int e, f;
e = a + b; => e = cast(short) a + cast(short) b;
e = a + b + d; => e = cast(int)(cast(short) a + cast(short) b) + cast(int)
d; Or e = cast(int) a + (cast(int) b + cast(int)d);
long g;
g = e + f; => d = cast(long) e + cast(long) f;
When choosing operator overloads or auto, prefer the ideal lofted
interpretation (as per the new rules, but without the exception for
int/long), over truncated variants. i.e.
auto h = a + b; => short h = cast(short) a + cast(short) b;
This would also properly handled some of the corner/inconsistent cases
with the current rules:
ubyte i;
ushort j;
j = -i; => j = -cast(short)i; (This currently evaluates to j =
cast(short)(-i);
And
a += a;
is equivalent to
a = a + a;
and is logically consistent with
byte[] k,l,m;
m[] = k[] + l[];
Essentially, instead of trying to prevent overflows, except for those from
int and long, this scheme attempts to minimize the risk of overflows,
including those from int (and long, once cent exists. Maybe
long+long=>bigInt?)
Suggestion 2:
Enable the full rules as part of SafeD and allow non-promotion in un-safe
D. Note this could be synergistically combined with Suggestion 1.
>>>> BTW: this means byte and short are not closed under arithmetic
>>>> operations, which drastically limit their usefulness.
>>>
>>> I think they shouldn't be closed because they overflow for relatively
>>> small values.
>> Andrei, consider anyone who want to do image manipulation (or computer
>> vision, video, etc). Since images are one of the few areas that use
>> bytes extensively, and have to map back into themselves, they are
>> basically sorry out of luck.
>
> I understand, but also keep in mind that making small integers closed is
> the less safe option. So we'd be hurting everyone for the sake of the
> image manipulation folks.
>
> Andrei
Well, how often does everyone else use bytes?
More information about the Digitalmars-d-announce
mailing list