DIP74 updated with new protocol for function calls
Zach the Mystic via Digitalmars-d
digitalmars-d at puremagic.com
Sun Mar 1 08:17:41 PST 2015
On Sunday, 1 March 2015 at 07:04:09 UTC, Zach the Mystic wrote:
> 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.
One more tidbit:
class RcType {
RcType r;
...
}
void fun(RcType x, RcType y);
auto z = new RcType;
z.r = new RcType;
fun(z, z.r);
From within fun(), z can alias z.r, but z.r can't possibly alias
z. Thus, only z.r needs to be preserved. The algorithm should go
"For each parameter, add one ref/release cycle for every other
parameter which could possibly generate an alias to it".
We're approaching optimal here. This is feeling good to me.
More information about the Digitalmars-d
mailing list