NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: standards/46223: reserved identifier violation



The following reply was made to PR standards/46223; it has been noted by GNATS.

From: Robert Elz <kre%munnari.OZ.AU@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: standards/46223: reserved identifier violation
Date: Sat, 14 Apr 2012 02:31:21 +0700

     Date:        Fri, 13 Apr 2012 16:35:03 +0000 (UTC)
     From:        Markus Elfring <Markus.Elfring%web.de@localhost>
     Message-ID:  <20120413163503.5306963B9FE%www.NetBSD.org@localhost>
 
   |  I dare to point out open issues in the standard-compliant application
   |  of C/C++ naming conventions.
 
 Someone please close this PR - there cannot be a violation of this
 particular standards requirement in NetBSD - by definition.
 
 These "us vs them" rules that the standards guys like to impose
 upon the world are almost always disasters.   The problem is that
 there isn't just "us" & "them", or perhaps more accurately, there
 are a whole huge class of objects that can be either us or them,
 whichever one of those is not me.
 
 From a language standardiser's viewpoint, a rule like this seems to
 make sense, and "us" are the language standardisation committee, and
 "them" is everyone else (sometimes they're kind of gracious and admit
 implementors of the language as a part of the us group, but not always).
 
 This makes things simple, for this particular issue, it means that the
 language can always define new reserved magic words, and know that no
 user will ever be inconvenienced by that - or not unless the user has
 violated the rules.
 
 At the other extreme, the canonical example of "them" is the author of
 a "hello world" application - clearly such a person is not supposed to
 use _X identifiers, and if they do they are liable for whatever problems
 that causes them.  Of course, in 99% of cases, no-one is going to
 care what the author of such a program chooses to name their identifiers,
 as it never bothers anyone else in any way at all.  As long as it
 works, it is OK, whether it breaks  the rules or not.  The author is
 taking a (small) risk that if they move their application to another
 platform it may not build (or just perhaps, operate) correctly - that's
 a portability bug in the application, but as an application author,
 while that one is worth some consideration, there are far more insidious
 and harder to detect and deal with potential portability problems that
 I'd worry about much more than my choice of identifier names.
 
 In between we have everything else - the language compiler implementation
 (and any extensions it makes to the standard language), the language
 runtime environment, the basic library functions that make the language
 useful in practice, the operating system interface, add on sub-systems,
 and extra third party sub-systems and libraries.
 
 From the language standardiser's viewpoint, none of those, with the possible
 exception of the language implementation, and maybe its runtime, are part
 of "us", and none of the rest of it should be touching the reserved
 identifier space.
 
 From the point of view of the author of application programs, all of that
 stuff is part of the implementation (that is, everything that's on the
 system already when the application is about to be compiled) - the
 important point being that the application author is supposed to be able
 to use any identifiers he chooses, other than the reserved ones (which
 include the _X identifiers, and the various reserved words documented as
 part of the language, or as part of the documented interface of some other
 sub-system the application uses.)   But all those intermediate pieces also
 need to define hidden identifiers (like the names for the character classes
 in the libc ctype macros, ...) that are not part of the documented
 interface, yet still must not conflict with the application's identifier space.
 
 The only place all those system pieces (sys/*.h header files, libc
 header files, X11 header files, libcurses (etc) header files, linpng
 header files (etc)) can find to define identifiers that cannot bother
 a conforming application is the _X namespace.
 
 That's OK, as from the application viewpoint, which is the only one that
 really matters, all of that stuff is a part of the implementation.
 
 What that means is that it is entitled to use _X identifiers - and the "it"
 here is everything that's distributed with NetBSD (including pkgsrc), and
 thus it is never proper to complain about a violation of this particular
 rule anywhere in NetBSD.   So this PR should be closed and ignored.
 
 I suppose it could be argued that parts of NetBSD that can't be used by
 other applications (like the source code for cat, or ls or whatever)
 could be excluded from that, and if any of those things define _X type
 identifiers, that could be considered a bug.   But why would anyone care?
 As long as it works, it works, while making those programs portable to
 other systems would be nice, it isn't really a requirement, and within
 NetBSD, any such identifier (I doubt any exist, but they might I suppose)
 is clearly not causing a problem.   If it ever does due to changes elsewhere,
 it would get fixed pretty quickly.
 
 Of course, it is incumbent upon the implementation (that being NetBSD here)
 to make sure its use (throughout all parts of the implementation) of any
 of the identifiers from the implementation reserved space is all consistent,
 and safe - and if any of the sub-=parts of the implementation add new
 identifiers from this space, other parts may need to be updated to restore
 consistency, but that's OK, that's just a part of the system maintenance.
 
 kre
 


Home | Main Index | Thread Index | Old Index