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