D2's feature set?

Jarrett Billingsley jarrett.billingsley at gmail.com
Sat Jun 6 08:26:37 PDT 2009


On Sat, Jun 6, 2009 at 11:17 AM, Steven
Schveighoffer<schveiguy at yahoo.com> wrote:
>>
>> You need to do escape analysis and whole program analysis to determine
>> whether there are aliases to a scope member. Failing that, it's pretty easy
>> to introduce bugs that are difficult to find.
>
> Not really.  A scope member would be placed in the same memory block as the
> owner class.  So an alias to the member would be the same as an alias to the
> owner class because the same memory block would be referenced.  Both
> wouldn't be collected until neither is referenced.

Regardless of how/where it's allocated, Chris is still right, unless
'scope' becomes a type constructor instead of a storage attribute.
Consider:

class A
{
    void fork() { writeln("fork!"); }
}

class B
{
    scope A a;
    this() { a = new A(); }
}

A a;

void foo()
{
    scope b = new B();
    a = b.a; // waaait
}

void main()
{
    foo();
    a.fork(); // AGHL
}

If it were impossible to assign a "scope A" into an A, this wouldn't
be a problem.  Or, full escape analysis, either way.



More information about the Digitalmars-d mailing list