Re: Scope storage class

2008-12-04 Thread Sergey Gromov
Mon, 1 Dec 2008 14:10:27 -0500, Steven Schveighoffer wrote: Walter Bright wrote Steven Schveighoffer wrote: Walter Bright wrote Jarrett Billingsley wrote: So my suspicion is correct, then? That is: scope int delegate() b; b = { ... }; Will allocate on the heap? Yes. The scope for

Re: Scope storage class

2008-12-04 Thread Steven Schveighoffer
Sergey Gromov wrote Mon, 1 Dec 2008 14:10:27 -0500, Steven Schveighoffer wrote: Walter Bright wrote Steven Schveighoffer wrote: Walter Bright wrote Jarrett Billingsley wrote: So my suspicion is correct, then? That is: scope int delegate() b; b = { ... }; Will allocate on the heap?

Re: Scope storage class

2008-12-01 Thread Sergey Gromov
Mon, 01 Dec 2008 10:26:31 -0700, Russell Lewis wrote: The thing to remember is that scope is *not* transitive. Scope limits the most shallow reference, *not* not anything deeper. It is perfectly valid to have a scope pointer to a non-scope thing. The point of scope is to enforce that

Re: Scope storage class

2008-11-28 Thread Walter Bright
Brad Roberts wrote: Accepting dubious definitions like 'public private int foo' and the above make life harder than it needs to be. The code: public private int foo; produces the error message: test.d(1): redundant protection attribute

Re: Scope storage class

2008-11-27 Thread Steven Schveighoffer
Walter Bright wrote Jarrett Billingsley wrote: So my suspicion is correct, then? That is: scope int delegate() b; b = { ... }; Will allocate on the heap? Yes. The scope for delegates takes effect as a parameter storage class, not a local variable storage class. The reason is because it

Re: Scope storage class

2008-11-27 Thread Walter Bright
Steven Schveighoffer wrote: Walter Bright wrote Jarrett Billingsley wrote: So my suspicion is correct, then? That is: scope int delegate() b; b = { ... }; Will allocate on the heap? Yes. The scope for delegates takes effect as a parameter storage class, not a local variable storage class.

Re: Scope storage class

2008-11-27 Thread bearophile
Walter Bright: In order to make that work, the compiler would have to do full escape analysis, which is a lot of work to implement. But the D2 programmer may enjoy some ways to state what he/she/shi wants anyway, like in a cast, to make the compiler behave like the D1 compiler and avoid a

Re: Scope storage class

2008-11-27 Thread Brad Roberts
On Thu, 27 Nov 2008, Walter Bright wrote: Jarrett Billingsley wrote: So my suspicion is correct, then? That is: scope int delegate() b; b = { ... }; Will allocate on the heap? Yes. The scope for delegates takes effect as a parameter storage class, not a local variable storage

Re: Scope storage class

2008-11-27 Thread bearophile
Brad Roberts: Walter, this is yet more evidence that shows that accepting and ignoring these sorts of modifiers is the wrong thing to do. Accepting dubious definitions like 'public private int foo' and the above make life harder than it needs to be. I agree. What's the rationale behind

Re: Scope storage class

2008-11-26 Thread bearophile
Jarrett Billingsley: Can you try declaring b as a nested function instead of as a delegate literal and see if that helps? I think that may lead to nonworking code. (why are you declaring it the way you are, anyway? Here you can find explanations: http://en.wikipedia.org/wiki/Man_or_boy_test

Re: Scope storage class

2008-11-26 Thread Jarrett Billingsley
On Wed, Nov 26, 2008 at 11:07 AM, bearophile [EMAIL PROTECTED] wrote: Can you try declaring b as a nested function instead of as a delegate literal and see if that helps? I think that may lead to nonworking code. Uh, why? You are declaring the delegate as 'scope', yes? Meaning you don't

Re: Scope storage class [Was: DMD 1.037 and 2.020 releases]

2008-11-26 Thread Robert Fraser
bearophile wrote: To test the new scoping features of D 2.021 I have used a small stressing program, coming from this page, originally by Knuth: http://www.rosettacode.org/wiki/Man_or_boy_test More info: http://en.wikipedia.org/wiki/Man_or_boy_test My purpose is to see the D2 compiler being

Re: Scope storage class [Was: DMD 1.037 and 2.020 releases]

2008-11-26 Thread Jesse Phillips
On Wed, 26 Nov 2008 12:18:27 -0800, Robert Fraser wrote: bearophile wrote: To test the new scoping features of D 2.021 I have used a small stressing program, coming from this page, originally by Knuth: http://www.rosettacode.org/wiki/Man_or_boy_test More info:

Re: Scope storage class

2008-11-26 Thread Walter Bright
Jarrett Billingsley wrote: The reason I wonder is because I would expect that the compiler is still allocating the delegate on the heap if you use the first syntax. (the second is also shorter and clearer.) There's no reason to suspect. Just obj2asm the output and see. Furthermore, better

Re: Scope storage class

2008-11-26 Thread Jarrett Billingsley
On Wed, Nov 26, 2008 at 4:13 PM, Walter Bright [EMAIL PROTECTED] wrote: Jarrett Billingsley wrote: The reason I wonder is because I would expect that the compiler is still allocating the delegate on the heap if you use the first syntax. (the second is also shorter and clearer.) There's no

Re: Scope storage class

2008-11-26 Thread bearophile
Walter Bright: There's no reason to suspect. Just obj2asm the output and see. Furthermore, better results will come from: int b() { k -= 1; return a(k, b(), x1, x2, x3, x4); }; instead of using the delegate. I don't fully understand what's happening, maybe I am

Re: Scope storage class

2008-11-26 Thread Robert Jacques
On Wed, 26 Nov 2008 13:24:57 -0500, Jarrett Billingsley [EMAIL PROTECTED] wrote: scope int b() { .. } The reason I wonder is because I would expect that the compiler is still allocating the delegate on the heap if you use the first syntax. (the second is also shorter and clearer.) Just as a

Re: Scope storage class

2008-11-26 Thread Sergey Gromov
Wed, 26 Nov 2008 17:02:54 -0500, bearophile wrote: While on DMD 1.036 the following code: // code #2 import std.c.stdio: printf; int a(int k, lazy int x1, lazy int x2, lazy int x3, lazy int x4, lazy int x5) { int b() { k -= 1; return a(k, b(), x1, x2, x3, x4);

Re: Scope storage class [Was: DMD 1.037 and 2.020 releases]

2008-11-26 Thread Sergey Gromov
Wed, 26 Nov 2008 20:33:35 + (UTC), Jesse Phillips wrote: On Wed, 26 Nov 2008 12:18:27 -0800, Robert Fraser wrote: Try marking all the lazy parameters as scope (lazy creates delegates). From change log: The lazy storage class now implies scope so that lazy arguments won't trigger a

Re: Scope storage class

2008-11-26 Thread bearophile
Sergey Gromov: Remove -inline from your compiler options, and #2 compiles and runs faster in both D1 and D2 than #1. lazy seems to do something funny when -inline is in effect. You are right, I have tested it on D1. I think the codepad doesn't use -inline, that's why #2 works there. #2 also

Re: Scope storage class

2008-11-26 Thread Sergey Gromov
Wed, 26 Nov 2008 18:19:38 -0500, bearophile wrote: So compiling #2 witout -inline in D2 fulfulls my original desire of computing up to N=25 with D2 :-) I presume the -inline uncovers a small bug of DMD, that will be fixed. I think so, too. But what interests me more now is to understand

Re: Scope storage class

2008-11-26 Thread Denis Koroskin
27.11.08 в 01:12 Robert Jacques в своём письме писал(а): On Wed, 26 Nov 2008 13:24:57 -0500, Jarrett Billingsley [EMAIL PROTECTED] wrote: scope int b() { .. } The reason I wonder is because I would expect that the compiler is still allocating the delegate on the heap if you use the first