DIP 1003: remove `body` as a keyword

Basile B. via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sat Dec 10 06:43:58 PST 2016


On Saturday, 10 December 2016 at 13:49:09 UTC, Basile B. wrote:
> On Monday, 28 November 2016 at 02:17:20 UTC, Dicebot wrote:
>> On 11/24/2016 05:29 PM, WM.H wrote:
>>> On Saturday, 19 November 2016 at 21:16:15 UTC, Dicebot wrote:
>>>> DIP 1003 is merged to the queue and open for public informal 
>>>> feedback.
>>>>
>>>> PR: https://github.com/dlang/DIPs/pull/48
>>>> Initial merged document:
>>>> https://github.com/dlang/DIPs/blob/master/DIPs/DIP1003.md
>>>>
>>>> If you want the change to be approved and have ideas how to 
>>>> improve it to better match on 
>>>> https://github.com/dlang/DIPs/blob/master/GUIDELINES.md and 
>>>> existing published reviews - please submit new PR with 
>>>> editorial and ping original author.
>>> 
>>> This DIP fixes the problem for "body" but not for the other 
>>> keywords. After all the problem may exist for other keywords. 
>>> Was a new pragma considered ? For example an identifier alias.
>>> 
>>> pragma(idAlias, "body", "body_" )
>>
>> AFAIU, the point of this DIP is that "body" is standing out 
>> from other keywords being used only in one very specific 
>> context and being a very common english word at the same time. 
>> Your proposal has a completely different (and much more 
>> drastic) approach.
>
> Yes. But while it's clear that "body" is a keyword that's less 
> related to programming languages than the others (i.e more 
> usable as identifier), it's not actually that mad to imagine a 
> generic approach. For example Object Pascal has such a feature:
>
> http://wiki.freepascal.org/FPC_New_Features_2.6.0#Support_for_.26-escaping_of_keywords
>
> which is not well known, as I've myself discovered this just 3 
> minutes ago.
> In D there would be the "#" token that's not really used, which 
> could serve to escape keywords, while still considering them as 
> identifier when it's needed, e.g
>
> struct Body{}
> Body #body;
> writeln("'", #body.stringof, "'");
>
> would output: 'body'

By the way a pragma was a bad idea. Pragmas are optionally 
supported by a compiler. An escape symbol is by far better. 
Whatever is the compiler we always want the same result.

Any chance to get "Cauterite" thoughts on the option that is to 
have a token used to escape a keyword, so that the kw can be used 
as identifier ?

The initial DIP is too specialized, however it shows a real 
problem:

What if one day someone wants

     enum FlagsModifiedByAsmCmp {of, if, zf, cf} ?
     function Function;

With an escape it would always work

     enum FlagsModifiedByAsmCmp {of, #if, zf, cf}
     #function Function;

The problem of the suffix "_", as proposed in D style guide, is 
that it's also a valid identifier character, while "#" is not. 
And the best is that # role is already for special token 
sequences !
- # = token for special token sequence
- body = token
=> #body is a special token sequence.

The only thing to change is that currently a special token 
sequence takes a full line...but seriously that's a minor change 
(since there's no special token sequence in D... #line is 
obsolete and not used anymore).


More information about the Digitalmars-d-announce mailing list