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