Robert Jacques wrote:
Just as a point of reference (in D1)
scope Object a = new Object(); // Stack Allocated
scope Object b;
b = new Object(); // Heap Allocated

So there may be some merit to scope int b() { .. } vs scope int b(); b = {...}

I can't find any spec on exactly how scope works, but this makes 100% sense to me. Let me explain the way that I think scope does/might/should work:

The thing to remember is that "scope" is *not* transitive. Scope limits the most shallow reference, *not* not anything deeper. It is perfectly valid to have a scope pointer to a non-scope thing. The point of scope is to enforce that the pointer cannot escape; it does not say anything about whether the pointed-to object escapes or not.

The point then, is that you can create a non-scope object, and assign it to a scope pointer. When you do something like:

BEGIN CODE
        scope <type> a;
        a = <allocate thing>;
END CODE

...you are doing exactly that.

(At least, that's how I think it ought to work.)

Reply via email to