DIP69 - Implement scope for escape proof references

Tobias Pankrath via Digitalmars-d digitalmars-d at puremagic.com
Thu Dec 4 07:06:31 PST 2014


>
> "There can be at most one owner for any piece of data."
>
> This doesn't seem right. For GC data, the GC owns the data, 
> that is true. But for Ref-counted data, there is more than one 
> owner, and only when all the owners disown the data can it be 
> destroyed.
>
> I think there is a disconnect here, you can't say *nobody* owns 
> the data, and if you say one variable owns the data, which one 
> is it?
>
> Continuing to read...
>
> -Steve

It is in line with this definition

> A variable owns the data it contains if, when the lifetime of 
> the variable is ended, the data can be destroyed.

and the definiton of the lifetime of a variable

> The lifetime of variables is based purely on their lexical 
> scope and order of declaration. The following rules define a 
> hierarchy of lifetimes:

A variable's lifetime starts at the point of its declaration, and 
ends with the lexical scope it is defined in.
An (rvalue) expression's lifetime is temporary; it lives till the 
end of the statement that it appears in.
The lifetime of A is higher than that of B, if A appears in a 
higher scope than B, or if both appear in the same scope, but A 
comes lexically before B. This matches the order of destruction 
of local variables.
The lifetime of a function parameter is higher than that of that 
function's local variables, but lower than any variables in 
higher scopes.

Because the lifetimes of any two variables are different by this 
definition and the definition of ownership links to variable 
lifetime, only one variable can own the data.

So if you have multiple ref-counted slices to an array, no one 
owns the array until the ref-count goes down to 1. Question 
remains, if this is a definition of ownership we want to employ.





> There can be at most one owner for any piece of data.


More information about the Digitalmars-d mailing list