Version Identifiers for Platforms / Architectures not supported by DMD

Alex Rønne Petersen xtzgzorex at gmail.com
Mon Nov 7 02:57:16 PST 2011


On 07-11-2011 01:17, Walter Bright wrote:
> 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.

My only actual complaint here would be the casing of the 'l'. The 
version identifier itself seems fine to me.

>
> 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.

- Alex


More information about the Digitalmars-d mailing list