`in` parameters made useful
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Fri Aug 21 19:21:37 UTC 2020
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 is interesting on a general level as well and true for several
>>> programming languages. Let the compiler optimize the parameter
>>> passing unless the programmer explicitly ask for a certain way (copy
>>> object, pointer/reference etc.).
>>
>> 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.
More information about the Digitalmars-d
mailing list