`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