rvalue references
Zach the Mystic
reachzach at gggggmail.com
Sun Apr 28 14:33:24 PDT 2013
On Sunday, 28 April 2013 at 16:56:26 UTC, Diggory wrote:
> It's quite clear to me that no mathematical model for ref
> safety will be able to cover every possible case without
> seriously degrading performance. Therefore the best we can do
> is come up with a model which covers as many of the common
> situations as possible and rely on "@trusted" to handle the
> (hopefully small) number of cases which cannot be handled by
> the model.
This is my thinking also.
One rather bad thing about the '@trusted' method is that it's not
the called function itself which is unsafe, but only escaping the
*returned ref*, and so '@trusted' would most accurately have to
attach to the *calling* function, which I think will become
untenable rather quickly.
ref T func(ref T a); // Safe in and of itself
@trusted ref T fun2() {
T b, c;
b = func(c); // safe
return func(c); // not safe!!
}
Since func() has no additional attributes and is invisible,
there's no way at all for the compiler to know what it returns.
Yet the actual unsafe action only occurs in fun2(), which makes
it easy to see how unwieldy the system could get, having to mark
the calling function just because it does something which *could*
be unsafe.
Looking at the above case makes it seem like at least one
additional attribute, located in the function signature, must be
accessible to the compiler in to order to reduce the number of
functions which must otherwise rather gratuitously be marked
'@trusted'. Even with a single new attribute, 'out', which
attaches to the function (and does not specify precisely to which
parameters it refers) I suspect a huge number of frustrating
cases would be taken care of. 'out', of course, simply assigns
'@noreturn' to all its parameters, even if '@noreturn' itself is
not allowed!
More information about the Digitalmars-d
mailing list