Const ref and rvalues again...
Dmitry Olshansky
dmitry.olsh at gmail.com
Sun Nov 11 03:17:03 PST 2012
11/11/2012 2:08 PM, Jonathan M Davis пишет:
> On Sunday, November 11, 2012 13:36:05 Dmitry Olshansky wrote:
>> Nope. It's just that the stack is intact and contains: hello and goodbye
>> one after another. Without optimizations { } scope doesn't mean reuse
>> stack space.
>>
>> Now if play with stack a bit, for me the next one prints:
>> -²↑
>>
>> import std.stdio;
>>
>> void delegate() global;
>>
>> void foo(scope void delegate() del)
>> {
>> global = del;
>> }
>>
>>
>> void f()
>> {
>> {
>> char[5] bar = "hello";
>> foo((){writeln(bar);});
>> }
>> }
>>
>> void main()
>> {
>> char[7] baz = "goodbye";
>> f();
>>
>> global();
>> }
>
> It still prints "hello", even with full optimations turned on.
I tried with and without optimizations. I get garbage as expected.
So, it must be
> allocating a closure in spite of scope. So, it looks to me like scope is just
> completely ignored and does absolutely nothing at this point, unless I'm just
> completely missing something here.
Something must be screwed up. I dunno what, I use near-latest DMD from
github and Win32 binaries.
For good measure try making stack variables larger if you are on 64bit.
Drop in a couple of calls to writeln before and after calling 'f' it
should scramble the stack.
--
Dmitry Olshansky
More information about the Digitalmars-d
mailing list