DIP77 - Fix unsafe RC pass by 'ref'

via Digitalmars-d digitalmars-d at puremagic.com
Sat Apr 11 02:28:45 PDT 2015


On Friday, 10 April 2015 at 23:12:55 UTC, deadalnix wrote:
> On Friday, 10 April 2015 at 10:02:01 UTC, Martin Nowak wrote:
>> On Wednesday, 8 April 2015 at 23:11:08 UTC, Walter Bright 
>> wrote:
>>> http://wiki.dlang.org/DIP77
>>
>> So someone passes an RCO via ref to avoid the inc/dec, and 
>> because that imposes safety issues we turn it into some sort 
>> of pass by value under the hood, defeating the purpose, and 
>> provide an opt-out via @system opAssign.
>>
>> Wouldn't it more straightforward to make pass-by-ref unsafe 
>> (@system) for RCOs?
>>
>> Then the only thing missing to make this equally powerful, 
>> would be an optimization opportunity for the compiler to elide 
>> copies of pass-by-value RCOs, e.g. it could avoid calling the 
>> postblit when the function retains the refcount.
>
> Only the first pass by ref create a copy. You can then pass the 
> ref down all you want without copy.
>
> That is an acceptable cost IMO.

It's not acceptable that it happens behind the user's back. 
Costly operations must be explicit.


More information about the Digitalmars-d mailing list