Collections question

Marc Schütz via Digitalmars-d digitalmars-d at puremagic.com
Wed Dec 2 13:18:59 PST 2015


On Wednesday, 2 December 2015 at 15:58:19 UTC, Andrei 
Alexandrescu wrote:
> On 12/02/2015 01:45 AM, deadalnix wrote:
>> On Tuesday, 1 December 2015 at 17:27:20 UTC, Andrei 
>> Alexandrescu wrote:
>>> Ah, the good old assignment to reference. We need to prevent 
>>> that from
>>> happening in safe code. Got any fresh ideas? -- Andrei
>>
>> Disable owner when borrowing 'mutably', and not when borrowing 
>> 'constly'.
>
> What does "disable owner" mean? Thx! -- Andrei

(He probably means: The owner is the object to which the 
reference points. Disabling means disallowing any access to it, 
at compile time.)

But your question gave me another idea: Instead of making the 
owner const, the compiler can insert calls to `owner.opFreeze()` 
and `owner.opThaw()` at the beginning/end of each borrowing, and 
leave the owner mutable. It's then up to the implementer to 
handle things in a way they like. For example, opFreeze() could 
just set a flag and assert that the underlying memory isn't freed 
during borrowing, or it could increment/decrement a reference 
count, or it could queue up any releases of the underlying 
storage to happen after the last borrow has expired (the idea you 
proposed as a solution for RCArray).

It's helpful in this case if the operators have the following 
signatures:

     T opFreeze();
     void opThaw(T cookie);

For the refcounting solution, opFreeze() can increment the 
refcount and return a pointer to it, and opThaw() can decrement 
it again. The methods need to be called each time a borrow 
starts/ends.


More information about the Digitalmars-d mailing list