If _<lowerCaseLetter> violates a standard, please say which one. It does not violate the C++11 standard: •Reserved in any scope, including for use as implementation macros: •identifiers beginning with an underscore followed immediately by an uppercase letter •identifiers containing adjacent underscores (or "double underscore") •Reserved in the global namespace: •identifiers beginning with an underscore •Also, everything in the std namespace is reserved. (You are allowed to add template specializations, though.) -----Original Message----- From: Tim Northover [mailto:t.p.northover at gmail.com] Sent: Monday, February 4, 2019 2:17 PM To: JD Jones <jjones at prc-hsv.com> Cc: Robinson, Paul <paul.robinson at sony.com>; clattner at nondot.org; Michael Platings <Michael.Platings at arm.com>; llvm-dev <llvm-dev at lists.llvm.org>; nd <nd at arm.com> Subject: Re: [llvm-dev] Variable names rule On Mon, 4 Feb 2019 at 20:03, JD Jones <jjones at prc-hsv.com> wrote:> Sorry, I'm not sure I follow.In conventional English usage, acronyms always use upper-case. All other coding conventions deal with that situation gracefully (or at least not terribly). If someone strictly follows the coding convention you might end up with a weird identifier (m_tlaThatDoesSomething, m_tLAThatDoesSomething, ...); if they favour English over coding you get (m_TLAThatDoesSomething). The leading underscore is unique in turning that last case into something that violates the language standard, and for me that's enough to eliminate it from contention. I strongly discourage its use in any C or C++ project. Tim. -- This message is intended for the addressee only and may contain Paragon Research Corporation (PRC) confidential or privileged information. Use or distribution of such confidential information is strictly prohibited without the prior written permission of PRC. If you have received this message in error, please contact the sender immediately and delete the message and attachments from your computer.
On Mon, 4 Feb 2019 at 20:21, JD Jones <jjones at prc-hsv.com> wrote:> If _<lowerCaseLetter> violates a standard, please say which one. It does not violate the C++11 standard:If strictly adhered to, it doesn't, and I've never claimed any different. But coding standards are never strictly adhered to. Particularly not in a codebase like LLVM which already has a good handful in play for historical reasons. We can't expect reviewers to be perfect either, and violations of a leading underscore rule have a ridiculously high probability of producing malformed C++. It's simply not worth the aggro when there are plenty of other possibilities available that don't open us up for that failure mode. Tim.
On 2/4/2019 2:29 PM, Tim Northover via llvm-dev wrote:> On Mon, 4 Feb 2019 at 20:21, JD Jones <jjones at prc-hsv.com> wrote: >> If _<lowerCaseLetter> violates a standard, please say which one. It does not violate the C++11 standard: > > If strictly adhered to, it doesn't, and I've never claimed any > different. But coding standards are never strictly adhered to. > Particularly not in a codebase like LLVM which already has a good > handful in play for historical reasons. We can't expect reviewers to > be perfect either, and violations of a leading underscore rule have a > ridiculously high probability of producing malformed C++. > > It's simply not worth the aggro when there are plenty of other > possibilities available that don't open us up for that failure mode.IMO, any convention that contains leading or trailing underscores should be rejected outright. The primary purpose of a convention is to allow a person to differentiate between different kinds of elements with a quick glance. It should strive to make these elements appear different without sacrificing the readability. Prepending or appending a lone underscore is really making the identifier as similar to another one as possible, while still making it different from the language standard point of view, i.e. the opposite to what a useful convention should do. -Krzysztof