Why version() ?

Jacob Carlborg doob at me.com
Sat Feb 14 03:14:51 PST 2009


Nick Sabalausky wrote:
> "Jacob Carlborg" <doob at me.com> wrote in message 
> news:gn49b6$49b$1 at digitalmars.com...
>> Walter Bright wrote:
>>> Anders F Björklund wrote:
>>>> Walter Bright wrote:
>>>>
>>>>>> OSX is the new name for Apple's OSes: Mac OS X and iPhone OS.
>>>>>>
>>>>>> And of course DMD can use anything, but GDC uses darwin/Unix.
>>>>> Apple can't seem to make up their mind. uname does return "Darwin". gcc 
>>>>> predefines "__MACH__" and "__APPLE__", but neither darwin nor osx. The 
>>>>> documentation all says osx.
>>>> Will you set version(darwin) though, or would that be "version(osx)" ?
>>>>
>>>> The existing D code for Mac OS X all uses version(darwin) from before.
>>> version(OSX)
>>>
>>> I just don't think darwin is a good idea, as Apple doesn't even use it. 
>>> See http://developer.apple.com/unix/index.html, where "darwin" is clearly 
>>> second string. It looks like Apple is pushing aside "darwin" in favor of 
>>> "OSX".
>> I'm not going to argue about what is the best version identifier for Mac 
>> OS X, the I only thing I care about is consistency and "darwin" is already 
>> used by LDC and GDC. Don't make things harder.
>>
>>> Fortunately, (darwin) => (OSX) is a trivial global search/replace.
>> And I assume it's equally trivial to implement "darwin" as the version 
>> identifier. Again, don't make things harder by breaking existing code.
> 
> I don't have an opinion on the correct identifier to use, but not 
> implementing a change that makes something more correct *just* because it 
> breaks existing code (particularly in an easy-to-fix way) is a terrible 
> strategy. That's exactly what's turned C++ into the abysmal mess that it is 
> today, which in turn is one of the primary reasons for D's existence. I 
> don't want to end up with yet another C++. 

I guess I have to start to argue. In this case I don't see that some 
version identifier is more correct than the other, you just have to make 
a choice. Either you choose to be as close to the official name of the 
operating system as possible, in this case I guess it should be "Mac OS 
X". Or you choose the uname that I've seen some people here talk about 
or a part of the target triple or what it's called, for example 
i386-apple-darwin. Then there's the question about upper/lowercase and 
spaces in the name. Or any other suggestions.

I have know idea what the initial thought was when Walter chose the 
version identifiers and therefore I have no idea what would be the most 
correct version identifier to choose in this case.

Because of gdc and ldc already use "darwin" you have to make a special 
case for dmd. Of course they could change the version identifier but at 
least for gdc I don't see that's very likely. GDC seems quite dead but 
it's still the most reliable compiler for Mac OS X at this point. I have 
no problem using dmd when it becomes equally reliable on Mac OS X as on 
linux/windows but as far as I know it will only be for x86 and there are 
three other targets for osx (excluding iphone): x86-64, ppc and ppc64.

So what is the most correct version identifier? I don't know. But I 
think you should choose one option form the beginning and then try to be 
as consistent as possible.

I guess I have to add this to every dsss file:

version (DigitalMars)
	version (OSX)
		version = darwin


/Jacob Carlborg



More information about the Digitalmars-d mailing list