Scott Meyers' DConf 2014 keynote "The Last Thing D Needs"
Steven Schveighoffer via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Mon Jun 2 07:37:30 PDT 2014
On Sat, 31 May 2014 19:27:08 -0400, Walter Bright
<newshound2 at digitalmars.com> wrote:
> On 5/30/2014 5:37 AM, Steven Schveighoffer wrote:
>> On Thu, 29 May 2014 21:15:21 -0400, deadalnix <deadalnix at gmail.com>
>> wrote:
>>
>>> On Thursday, 29 May 2014 at 19:06:15 UTC, Steven Schveighoffer
>>> wrote:
>>>>> Static if is certainly NOT an attribute, it doesn't make any sense.
>>>>
>>>> Well... it sorta does. static if does not introduce a new scope, even
>>>> with
>>>> {}, and this only happens with attributes.
>>>>
>>>> -Steve
>>>
>>> in which case
>>>
>>> static if(cond) {
>>> immutable:
>>> }
>>>
>>> int x;
>>>
>>> should not create x as immutable if cond is true. The current
>>> behavior is not consistent with attribute either.
>>
>> Ugh, that is really bad. It shouldn't do that. Is that intentional?
>
> Yes. Semantic scope and lexical scope are different things. The ':'
> thing applies to the remaining statements in the lexical scope. 'static
> if' does not create a new semantic scope, even though the { } suggests
> it does.
deadalnix's suggestion, at least to me, was that currently the compiler
would attribute immutable to int x. Testing, I see it does not. Maybe I
misinterpreted the implication. The statement "current behavior is not
consistent with attribute" seems wrong then.
> There have been several suggestions to make 'static if' apply
> independently of the rest of the grammar, i.e. allow things like:
>
> int static if (cond) * else [ ] foo; // conditionally make foo a
> pointer or an array
>
> I think we can agree that looks awful, but it is the same thing as
> suggesting that the 'immutable:' above extend outside of its lexical
> scope.
I agree, I think we are arguing the same thing.
static if seems like an attribute in how it scopes things.
-Steve
More information about the Digitalmars-d-announce
mailing list