Does dmd have SSE intrinsics?

Robert Jacques sandford at jhu.edu
Tue Sep 22 19:58:01 PDT 2009


On Tue, 22 Sep 2009 19:40:03 -0400, Jeremie Pelletier <jeremiep at gmail.com>  
wrote:

> Christopher Wright wrote:
>> Jeremie Pelletier wrote:
>>> Why would you declare void variables? The point of declaring typed  
>>> variables is to know what kind of storage to use, void means no  
>>> storage at all. The only time I use void in variable types is for  
>>> void* and void[] (which really is just a void* with a length).
>>>
>>> In fact, every single scope has an infinity of void variables, you  
>>> just don't need to explicitly declare them :)
>>>
>>> 'void foo;' is the same semantically as ''.
>>  It simplifies generic code a fair bit. Let's say you want to intercept  
>> a method call transparently -- maybe wrap it in a database transaction,  
>> for instance. I do similar things in dmocks.
>>  Anyway, you need to store the return value. You could write:
>>  ReturnType!(func) func(ParameterTupleOf!(func) params)
>> {
>>     auto result = innerObj.func(params);
>>     // do something interesting
>>     return result;
>> }
>>  Except then you get the error: voids have no value
>>  So instead you need to do some amount of special casing, perhaps quite  
>> a lot if you have to do something with the function result.
>
> I don't get how void could be used to simplify generic code. You can  
> already use type unions and variants for that and if you need a single  
> more generic type you can always use void* to point to the data.
>
> Besides in your above example, suppose the interesting thing its doing  
> is to modify the result data, how would the compiler know how to modify  
> void? It would just push back the error to the next statement.
>
> Why don't you just replace ReturnType!func by auto and let the compiler  
> resolve the return type to void?

Because auto returns suffer from forward referencing problems :

//Bad
auto x = bar;
auto bar() { return foo; }
auto foo() { return 1.0; }

//Okay
auto foo() { return 1.0; }
auto bar() { return foo; }
auto x = bar;




More information about the Digitalmars-d mailing list