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