RFC: scope and borrowing
via Digitalmars-d
digitalmars-d at puremagic.com
Mon Sep 22 05:14:52 PDT 2014
On Monday, 22 September 2014 at 11:45:39 UTC, Manu via
Digitalmars-d wrote:
> Application to scope will be identical to ref. A function that
> returns or
> receives scope that is inserted into generic code must have
> that property
> cascaded outwards appropriately. If typeof() or alias loses
> 'scope', then
> it will all go tits-up.
For receiving it's not necessary, because whether or not the
argument is scoped, the function can always borrow it. The
lifetime of its parameter is narrower than what it gets passed.
For return values, the situation is a bit different: They can of
course not be assigned to non-scoped variables. But the solution
for this simple: the generic code needs to use scope, too. A
function that returns scope does so for a reason after all. This
will work even if the return value of the called function turns
out not to be scoped for this particular instantiation. And all
this is an implementation of the generic code, it won't bleed
outside, unless the generic code wants to return the scoped
value. In this case, simply apply the same technique, just one
lever higher.
I don't see this as a problem for (new) code written with scope
in mind. For existing code, of course some adjustments are
necessary, but the same is true if you change existing code to be
const correct, for example, or to be compatible with `shared`.
More information about the Digitalmars-d
mailing list