DIP69 - Implement scope for escape proof references

deadalnix via Digitalmars-d digitalmars-d at puremagic.com
Thu Dec 4 15:04:28 PST 2014


On Thursday, 4 December 2014 at 09:25:11 UTC, Walter Bright wrote:
> http://wiki.dlang.org/DIP69
>
> Despite its length, this is a fairly simple proposal. It adds 
> the missing semantics for the 'scope' storage class in order to 
> make it possible to pass a reference to a function without it 
> being possible for it to escape.
>
> This, among other things, makes a ref counting type practical. 
> It also makes it more practical to use other storage allocation 
> schemes than garbage collection.
>
> It does not make scope into a type constructor, nor a general 
> type-annotation system.
>
> It does not provide an ownership system, though it would 
> complement one.

So as mentioned, there are various problem with this DIP :
  - rvalue are defined as having a scope that goes to the end of 
the statement. That mean they can never be assigned to anything 
as per spec.
  - It add more special casing with & (as if it wasn't enough of a 
mess with @property, optional () and the fact the function aren't 
first class). For instance *e has infinite lifetime when &(*e) is 
lifetime(e).

Also, considering *e has infinite lifetime, (but not e[i] ???) 
what is the point of scope at all ? If all indirection goes to 
infinite lifetime (ie GC) then lifetime only apply to local 
variable and it should not be able to escape these, scope or not.

During discussion, I proposed to differentiate lifetime 
calculation between lvalues and rvalues (which are inherently 
different beasts with different lifetime) and carry (or not) the 
scope flag with each expression.


More information about the Digitalmars-d mailing list