DIP74 updated with new protocol for function calls

Zach the Mystic via Digitalmars-d digitalmars-d at puremagic.com
Sat Feb 28 23:04:07 PST 2015


On Saturday, 28 February 2015 at 21:12:54 UTC, Andrei 
Alexandrescu wrote:
> Defines a significantly better function call protocol:
>
> http://wiki.dlang.org/DIP74
>
> Andrei

This is obviously much better, Andrei.

I think an alternative solution (I know -- another idea -- 
against my own first idea!) is to keep track of this from the 
caller's side. The compiler, in this case, when copying a 
ref-counted type (or derivative) into a parameter, would actually 
check to see if it's splitting the variable in two. Look at this:

class RcType {...}

void fun(RcType1 c, RcType1 d);

auto x = new RcType;

fun(x, x);

If the compiler were smart, it would realize that by splitting 
parameters this way, it's actually adding an additional reference 
to x. The function should get one x for free, and then force an 
opAdd/opRelease, for every additional x (or x derivative) it 
detects in the same call.

This might be even better than the improved current proposal. The 
real key is realizing that duplicating an lvalue into the same 
function call is subtly adding a new reference to it.

Eh??


More information about the Digitalmars-d mailing list