On Sunday, 15 April 2012 at 16:34:12 UTC, Andrei Alexandrescu wrote:
I'm making good progress on an allocator design. If things come together as I hope, it'll kick some serious ass.

I'm currently looking at four allocation models:

* straight GC, safe (no deallocation)
* GC + the ability to free memory
* malloc/free, unsafe, buyer beware (STL-level safety)
* reference counted (based on either malloc or GC+free)
* region (scoped)

I need to kink out a few details, most important being - is safety part of the allocator or an extricable property that's a different policy? For now I have a related question about orphan ranges.

Consider this motivating example:

void main()
{
    int[] x;
    {
        auto b = new int[20];
        x = b[5 .. $ - 5];
    }
    ... use x ...
}

The range x is a 10-elements range that originates in a 20-element array. There is no safe way to access the original array again, so in a sense the other 10 elements are "lost". That's why I call x an orphan range - a range of which original container is gone.

Built-in arrays work routinely like that, and in fact the originating arrays are not distinguished by type in any way from their ranges (be they orphan or not). The question is, what should std.container do about orphan ranges in general? Should it allow them, disallow them, or leave the decision open (e.g. to be made by the allocator)? Depending on what way we go, the low-level design would be quite different.


Thanks,

Andrei

Wow, cool!

To flat out disallow Orphan ranges is imho too restrictive, especially considering we already have a safe solution, what is missing is an unsafe(no overhead) version.

If the design can handle safe/unsafe as a policy for a stack(scoped) based allocator... that would be kick ass, indeed.

Reply via email to