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