Version Identifiers for Platforms / Architectures not supported by DMD

Walter Bright newshound2 at digitalmars.com
Sun Nov 6 16:17:59 PST 2011


On 11/6/2011 6:40 AM, Michel Fortin wrote:
 > On 2011-11-06 04:04:22 +0000, Walter Bright <newshound2 at digitalmars.com> said:
 >
 >> On 11/5/2011 2:07 PM, Jonathan M Davis wrote:
 >>> dmd's version identifiers are annoyingly variable (e.g. linux is camelcased,
 >>> whereas Windows is Pascal-cased and OSX is all uppercase).
 >>
 >> What they do is follow the casing and spelling of the pre-defined macros of
 >> the local C compiler.
 >
 > I find this statement puzzling. According to
 > <http://predef.sourceforge.net/preos.html>:
 >
 > * There's no OSX macro on OS X, just __APPLE__ and __MACH__.
 > * There's no Solaris macro on Solaris, only 'sun' and '__sun'.
 > * There's no Windows/Win32/Win64 macro on Windows, there's
 > __WINDOWS__/_WIN32/_WIN64.
 > * There's no FreeBSD macro on FreeBSD, instead you have __FreeBSD__.
 >
 > Beside linux, I don't see any of the predefined version identifiers
 > corresponding to the platform's standard C macros.

Based on my research:

         _WIN32          Microsoft NT, Windows 95, Windows 98, Win32s, Windows 2000
         _WIN64          Windows for AMD64
         linux           Linux
         __APPLE__       Mac OSX
         __FreeBSD__     FreeBSD
         __OpenBSD__     OpenBSD
         __sun&&__SVR4   Solaris, OpenSolaris (yes, both macros are necessary)

Hence FreeBSD rather than freebsd or Freebsd. The underscores just looked awful 
:-) and are unnecessary for D since the version tags are in a separate namespace.

Had to come up with one for Solaris.

APPLE is hopelessly generic, considering Apple has produced many operating systems.

__WINDOWS__ is not what DMC uses. See

    http://www.digitalmars.com/ctg/predefined.html

Some people have protested that I have "trivialized" Linux by using "linux", but 
I am perplexed why that's ok for gcc but not for D.

And finally, there is no such thing as a "sane" version identifier scheme. For 
one thing, OS vendors do not pick sane names. OS/2 is not an identifier. Neither 
is OS X. Nor is GNU/Linux. Nor do the OS vendors pick any sane identifiers for 
their own systems (look at what Sun did).

Even if someone comes up with a naming scheme for D that most agree is sane, 
intuitive, and attractive, switching to it would again silently break a large 
swath of existing D code. D cannot advance by constantly breaking things.


More information about the Digitalmars-d mailing list