www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Reserved Identifiers (just making sure)

reply naptime <naptimeentertainment gmail.com> writes:
Hello,


I already know the answer to my question, but I would like 
someone to reassure me that I'm not mistaken before I rename 
literally hundreds of identifiers in my code (and refactor at 
least two large templates).

TL;DR:  Am I understanding correctly that "_Foo" is NOT reserved 
as an identifier in the sense that "__foo" IS reserved, since 
they both are reserved in C?


I have been using D for about two years.  Before that, I wrote 
everything in strict ANSI C.  In C, not only are identifies 
beginning with two underscores reserved (e.g. __foo), but 
identifiers beginning with a single underscore followed by a 
capital letter are also reserved (e.g. _Foo)†.  I would like to 
verify that this is not the case in D.  To be absolutely clear, I 
already know that such identifiers compile; I want to know if 
they are reserved for future use by the D language.


The following quote is from:
https://dlang.org/spec/lex.html#Identifier

Quote:
"Identifiers start with a letter, _, or universal alpha, and are 
followed by any number of letters, _, digits, or universal 
alphas. Universal alphas are as defined in ISO/IEC 9899:1999(E) 
Appendix D. (This is the C99 Standard.) Identifiers can be 
arbitrarily long, and are case sensitive. Identifiers starting 
with __ (two underscores) are reserved."


The above quote makes it perfectly clear that identifiers 
beginning with an underscore followed by an uppercase letter are 
not reserved, but I could not find an example of such in 
object.d, DRuntime, nor in Phobos2 source (my usual method of 
verification).  Could someone who knows for sure please verify 
that "_Foo" is not reserved in D?


Thank you for your patience, and in advance for any assistance!


†(, as well as some other obscure restrictions e.g. all-uppercase 
identifiers beginning with 'E' are reserved in C.)
Jan 12
parent reply Meta <jared771 gmail.com> writes:
On Tuesday, 12 January 2016 at 16:20:10 UTC, naptime wrote:
 Hello,


 I already know the answer to my question, but I would like 
 someone to reassure me that I'm not mistaken before I rename 
 literally hundreds of identifiers in my code (and refactor at 
 least two large templates).

 TL;DR:  Am I understanding correctly that "_Foo" is NOT 
 reserved as an identifier in the sense that "__foo" IS 
 reserved, since they both are reserved in C?


 I have been using D for about two years.  Before that, I wrote 
 everything in strict ANSI C.  In C, not only are identifies 
 beginning with two underscores reserved (e.g. __foo), but 
 identifiers beginning with a single underscore followed by a 
 capital letter are also reserved (e.g. _Foo)†.  I would like to 
 verify that this is not the case in D.  To be absolutely clear, 
 I already know that such identifiers compile; I want to know if 
 they are reserved for future use by the D language.


 The following quote is from:
 https://dlang.org/spec/lex.html#Identifier

 Quote:
 "Identifiers start with a letter, _, or universal alpha, and 
 are followed by any number of letters, _, digits, or universal 
 alphas. Universal alphas are as defined in ISO/IEC 9899:1999(E) 
 Appendix D. (This is the C99 Standard.) Identifiers can be 
 arbitrarily long, and are case sensitive. Identifiers starting 
 with __ (two underscores) are reserved."


 The above quote makes it perfectly clear that identifiers 
 beginning with an underscore followed by an uppercase letter 
 are not reserved, but I could not find an example of such in 
 object.d, DRuntime, nor in Phobos2 source (my usual method of 
 verification).  Could someone who knows for sure please verify 
 that "_Foo" is not reserved in D?


 Thank you for your patience, and in advance for any assistance!


 †(, as well as some other obscure restrictions e.g. 
 all-uppercase identifiers beginning with 'E' are reserved in C.)
Yes, symbols in the form of `_Foo` are not reserved in D. Only symbols beginning with two underscores, such as __traits or __gshared. Technically the different `op*` names such as opCat, opBinary, etc. are reserved as well, int he sense that the compiler will recognize them and do special things, such as writing a + b as a.opBinary!"+"(b).
Jan 12
parent naptime <naptimeentertainment gmail.com> writes:
On Tuesday, 12 January 2016 at 17:50:45 UTC, Meta wrote:
 On Tuesday, 12 January 2016 at 16:20:10 UTC, naptime wrote:
 [...]
Yes, symbols in the form of `_Foo` are not reserved in D. Only symbols beginning with two underscores, such as __traits or __gshared. Technically the different `op*` names such as opCat, opBinary, etc. are reserved as well, int he sense that the compiler will recognize them and do special things, such as writing a + b as a.opBinary!"+"(b).
Oh, wonderful. Thank you so much!
Jan 12