`in` parameters made useful

Araq rumpf_a at web.de
Sat Aug 22 06:07:17 UTC 2020


On Friday, 21 August 2020 at 19:21:37 UTC, Andrei Alexandrescu 
wrote:
> On 8/21/20 1:20 AM, Araq wrote:
>> On Thursday, 20 August 2020 at 22:19:16 UTC, Andrei 
>> Alexandrescu wrote:
>>> On 8/20/20 1:31 PM, IGotD- wrote:
>>>> [...]
>>>
>>> This has been discussed a few times. If mutation is allowed, 
>>> aliasing is a killer:
>>>
>>> void fun(ref S a, const compiler_chooses S b) {
>>>     ... mutate a, read b ...
>>> }
>>>
>>> S x;
>>> fun(x, x); // oops
>>>
>>> The problem now is that the semantics of fun depends on 
>>> whether the compiler chose pass by value vs. pass by 
>>> reference.
>> 
>> True but in practice it doesn't happen very often. The 
>> benefits far outweigh this minor downside.
>
> That seems quite worrisome. A bug rare and subtle that can 
> become devastating. Something the Hindenburg captain might have 
> said.
>
>> Plus there are known ways to prevent this form of aliasing at 
>> compile-time.
>
> Not if you have globals and/or separate compilation.

Wrong. You can simply compile it to 'fun(x, copy(x))' if an alias 
analysis cannot disambiguate the locations and the alias analysis 
is restricted to the callsite, separate compilation continues to 
work.


More information about the Digitalmars-d mailing list