Memory management design

Dicebot public at dicebot.lv
Wed Jul 10 00:59:40 PDT 2013


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.


More information about the Digitalmars-d mailing list