Release D 2.094.0

Steven Schveighoffer schveiguy at gmail.com
Thu Oct 1 17:03:10 UTC 2020


On 10/1/20 12:47 PM, Meta wrote:
> On Thursday, 1 October 2020 at 16:19:48 UTC, Steven Schveighoffer wrote:
>>
>> There is a difference. `in` is choosing it based on the type, not 
>> whether it's an rvalue or lvalue. auto ref doesn't care whether it's 
>> an int or a 1k-sized struct, if it's an lvalue, it's ref, and if it's 
>> an rvalue, it's non-ref.
> 
> This seems ridiculous to me. We now have ANOTHER way of asking the 
> compiler to choose for us whether to pass by ref or by value, completely 
> mutually exclusive of auto ref. Where was the DIP (apologies if I just 
> didn't see it)? Did Walter approve this? How do we explain the 
> difference between in and auto ref with (as Andrei would say) a straight 
> face?

Whether a *const* piece of data is passed by reference or value is an 
implementation detail -- you can't change it anyway. I don't want the 
compiler to pass const integers by reference -- that's wasteful.

auto ref is a different problem -- the data might be mutable, which 
makes an actual difference in semantics.

But this brings up a problem which I don't know if it was discussed -- 
aliasing.

What if you pass in the same value in 2 parameters, one ref and one in. 
And you change the value via the ref. What happens to the in parameter?

-Steve


More information about the Digitalmars-d-announce mailing list