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