On 3/4/15 2:03 AM, deadalnix wrote:
A free list does not work as the data can be live. You cannot reuse it
to maintain the free list.

Actually you can, which is a bit surprising. Consider:

RCArray!int arr;
arr.length = 10;
arr[5] = 42;
fun(arr, arr[5]);
...
void fun(ref RCArray!int a, ref int b) {
    assert(b == 42);
    a = a.init; // array goes to freelist
    a.length = 10; // array may reuse the previous one!
    assert(b == 42);
}

Now the interesting here thing is, the last assert should be allowed to fail. The code is still safe because there is no change of type, and the use of b after the array is gone is a bug in the application anyway because the parent structure is out of existence.

This makes code potentially tighter on memory usage but potentially more difficult to debug.


Andrei

Reply via email to