Multiple return values...

Mantis mail.mantis.88 at gmail.com
Sun Mar 11 19:49:52 PDT 2012


12.03.2012 4:00, Robert Jacques пишет:
> On Sun, 11 Mar 2012 18:15:31 -0500, Timon Gehr <timon.gehr at gmx.ch> wrote:
>
>> On 03/11/2012 11:58 PM, Robert Jacques wrote:
>>> Manu was arguing that MRV were somehow special and had mystical
>>> optimization potential. That's simply not true.
>>
>> Not exactly mystical, but it is certainly there.
>>
>> void main(){
>> auto a = foo(); // MRV/struct return
>> bar(&a.x); // defined in a different compilation unit
>> }
>>
>> struct return has to write out the whole struct on the stack because of
>> layout guarantees, probably making the optimized struct return calling
>> convention somewhat slower for this case. The same does not hold for 
>> MRV.
>
> The layout of the struct only has to exist _when_ the address is 
> taken. Before that, the compiler/language/optimizer is free to (and 
> does) do whatever it want. Besides, in your example only the address 
> of a field is taken, the compiler will optimize away all the other 
> pieces a (dead variable elimination).

That's the point of discussion. Fields of structure may not be optimized 
away, because they are not independent variables. In D you have 
unchecked pointer-to-pointer casts, and results of these casts should 
depend on target architecture, not on optimizer implementation. At 
particular, if such optimizations are allowed, some C API will no longer 
be accessible from D.


More information about the Digitalmars-d mailing list