On Tue, 23 Nov 2010 13:46:19 +0100, Lutger Blijdestijn wrote: > 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
Thanks. He only says that "...too many qualifiers make the language quite baroque." Hopefully there is a better reason than that. ;) -Lars