On Tuesday, 9 July 2013 at 23:32:13 UTC, BLM768 wrote:
1. "scope": refers to stack-allocated memory (which seems to be
the original design behind "scope"). "scope" references may not
be stashed anywhere where they might become invalid. Since this
is the "safest" type of reference, any object may be passed by
"scope ref".
2. "owned": refers to an object that is heap-allocated but
manually managed by another object or by a stack frame. "owned"
references may only be stashed in other "owned" references. Any
non-scope object may be passed by "owned ref". This storage
class might not be usable in @safe code without further
restrictions.
I think merging "scope" and "owned" can be usable enough to be
interesting without introducing any new concepts. Simply make it
that "scope" in a variable declaration means it is a
stack-allocated entity with unique ownership and "scope" as a
function parameter attribute is required to accept scope data,
verifying no references to it are taken / stored. Expecting
mandatory deadalnix comment about lifetime definition ;)
Only thing I have no idea about is if "scope" attribute should be
shallow or transitive. Former is dangerous, latter severely harms
usability.