dmd 1.046 and 2.031 releases
Charles Hixson
charleshixsn at earthlink.net
Wed Jul 8 20:24:17 PDT 2009
Andrei Alexandrescu wrote:
> Robert Jacques wrote:
>> On Tue, 07 Jul 2009 03:33:24 -0400, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>> Robert Jacques wrote:
>>>> That's really cool. But I don't think that's actually happening (Or
>>>> are these the bugs you're talking about?):
>>>> byte x,y;
>>>> short z;
>>>> z = x+y; // Error: cannot implicitly convert expression
>>>> (cast(int)x + cast(int)y) of type int to short
>>>> // Repeat for ubyte, bool, char, wchar and *, -, /
>>>
>>> http://d.puremagic.com/issues/show_bug.cgi?id=3147 You may want to
>>> add to it.
>>
>> Added. In summary, + * - / % >> >>> don't work for types 8-bits and
>> under. << is inconsistent (x<<1 errors, but x<<y compiles). All the op
>> assigns (+= *= -= /= %= >>= <<= >>>=) and pre/post increments (++ --)
>> compile which is maddeningly inconsistent, particularly when the spec
>> defines ++x as sugar for x = x + 1, which doesn't compile.
>>
>>>> And by that logic shouldn't the following happen?
>>>> int x,y;
>>>> int z;
>>>> z = x+y; // Error: cannot implicitly convert expression
>>>> (cast(long)x + cast(long)y) of type long to int
>>>
>>> No. Int remains "special", i.e. arithmetic operations on it don't
>>> automatically grow to become long.
>>>
>>>> i.e. why the massive inconsistency between byte/short and int/long?
>>>> (This is particularly a pain for generic i.e. templated code)
>>>
>>> I don't find it a pain. It's a practical decision.
>>
>> 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.
>
>>>> 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
You could add modular arithmetic types. They are frequently
useful...though I admit that of the common 2^n basis bytes are the most
useful, I've often needed base three or other. (Probably not worth the
effort, but modular arithmetic on 2^n for n from 1 to, say 64 would be
reasonably easy.
More information about the Digitalmars-d-announce
mailing list