Escape analysis
Sean Kelly
sean at invisibleduck.org
Tue Oct 28 12:52:39 PDT 2008
Walter Bright wrote:
> Steven Schveighoffer wrote:
>> "Walter Bright" wrote
>>> The reason the scope/noscope needs to be part of the function
>>> signature is because:
>>>
>>> 1. that makes it self-documenting
>>
>> But the documentation is not enough. You cannot express the
>> intricacies of what variables are scope escapes so that the compiler
>> can make intelligent enough decisions. What this will result in is
>> slightly less unnecessary closures, but not enough to make a
>> difference. Or else you won't be able to declare things the way you
>> want, so you will be forced to declare something that *could* result
>> in an escape, but usually doesn't.
>
> I think it is conceptually straightforward whether a reference escapes
> or not, though it is difficult for the compiler to detect it reliably.
>
>>> 2. function bodies may be external, i.e. not present
>>> 3. virtual functions
>>
>> Yes, so you are now implying a scope escape contract on all derived
>> classes. But not a very expressive one.
There's another weird issue that I'm not sure if anyone has touched on:
struct S
{
int x;
int getX() { return x; }
}
void main()
{
auto s = new S;
fn( s );
}
void fnA( S* s )
{
fnB( &s.getX );
}
void fnB( noscope int delegate() dg ) {}
How does the compiler handle this? It can't tell by inspecting the type
whether the data for S is dynamic... in fact, the same could be said of
a "scope" instance of a class. I guess it would have to assume that
object variables without a "noscope" label must be scoped?
Sean
More information about the Digitalmars-d
mailing list