Why is 'scope' so weak?

Lutger Blijdestijn lutger.blijdestijn at gmail.com
Tue Nov 23 04:46:19 PST 2010


Lars T. Kyllingstad wrote:

> If I've understood things correctly, by marking a delegate parameter with
> 'scope' you tell the compiler not to create a true closure for the
> delegate.  Effectively you're saying "I promise not to escape this
> delegate, so you don't need to copy its context to the heap".
> 
> In brief, my question is:  Why doesn't the compiler enforce this
> promise?  In particular, why is 'scope' not a type constructor?
> 
> (Note that this is mostly a question out of curiosity, and not really a
> proposal for a new feature.  I imagine it has been discussed in the past
> and rejected for some reason.)
> 
> Considering that the compiler enforces proper use of pure, nothrow,
> const, and all those other things, it doesn't seem much harder to do the
> same with scope.
> 
> As an example, I really can't see a reason why obviously wrong code like
> this should be allowed:
> 
>     void delegate() globalDg;
> 
>     void foo(scope void delegate() dg)
>     {
>         globalDg = dg;
>     }

Most likely it is not yet implemented? It's hard to find something on this 
topic, I couldn't find anything in the spec or tdpl. I did found this one 
post by Andrei about your question:

http://permalink.gmane.org/gmane.comp.lang.d.concurrency/617
 
> Here's a slightly less obvious example, which also compiles successfully:
> 
>     void foo(void delegate() dg);  // Who knows what this does?
> 
>     void bar(scope void delegate() dg)
>     {
>         foo(dg);
>     }
> 
> -Lars





More information about the Digitalmars-d-learn mailing list