Does dmd have SSE intrinsics?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Sep 22 09:32:25 PDT 2009


Daniel Keep wrote:
> 
> Robert Jacques wrote:
>> On Tue, 22 Sep 2009 07:09:09 -0400, bearophile
>> <bearophileHUGS at lycos.com> wrote:
>>> Robert Jacques:
>> [snip]
>>>> Also, another issue for game/graphic/robotic programmers is the
>>>> ability to
>>>> return fixed length arrays from functions. Though struct wrappers
>>>> mitigates this.
>>> Why doesn't D allow to return fixed-sized arrays from functions? It's
>>> a basic feature that I can find useful in many situations, it looks
>>> more useful than most of the last features implemented in D2.
>>>
>>> Bye,
>>> bearophile
>> Well, fixed length arrays are an implicit/explicit pointer to some
>> (stack/heap) allocated memory. So returning a fixed length array usually
>> means returning a pointer to now invalid stack memory. Allowing
>> fixed-length arrays to be returned by value would be nice, but basically
>> means the compiler is wrapping the array in a struct, which is easy
>> enough to do yourself. Using wrappers also avoids the breaking the
>> logical semantics of arrays (i.e. pass by reference).
> 
> The problem is that currently you have a class of types which can be
> passed as arguments but cannot be returned.
> 
> For example, Tango's Variant has this horrible hack where the ACTUAL
> definition of Variant.get is:
> 
>     returnT!(S) get(S)();
> 
> where you have:
> 
>     template returnT(T)
>     {
>         static if( isStaticArrayType!(T) )
>             alias typeof(T.dup) returnT;
>         else
>             alias T returnT;
>     }
> 
> I can't recall the number of times this stupid hole in the language has
> bitten me.  As for safety concerns, it's really no different to allowing
> people to return delegates.  Not a very good reason, but I *REALLY* hate
> having to special-case static arrays.

Yah, same in std.variant. I think there it's called 
DecayStaticToDynamicArray!T. Has someone added the correct handling of 
static arrays to bugzilla? Walter wants to implement it, but we want to 
make sure it's not forgotten.

> P.S. And another thing while I'm at it: why can't we declare void
> variables?  This is another thing that really complicates generic code.

How would you use them?


Andrei



More information about the Digitalmars-d mailing list