minwin

Tomas Lindquist Olsen tomas at famolsen.dk
Tue Nov 28 21:50:57 PST 2006


Bill Baxter wrote:
> Tomas Lindquist Olsen wrote:
>> Bill Baxter wrote:
>>>
>>> Agreed.  'version' is basically just an emasculated special case of 
>>> 'static if'.  'static if' didn't exist when 'version' was created, 
>>> but now that it does, I think it would make more sense if version 
>>> became a kind of static if with access to a special version 
>>> namespace.  'Windows' should be treated like an alias for true if it 
>>> is indeed defined, otherwise false, and you should be allowed to do 
>>> boolean ops with any constant values in your program inside the 
>>> version statement.
>>>
>>> --bb
>>
>> I dont think a version statement should be able to access anything but 
>> versions. besides that I agree!
> 
> I could agree with only versions in version statements, but if so then 
> there needs to be a way to define new versions from code.
> 
> Walter's comment about defining versions for specific bugs is on target, 
> but it makes no sense to have to specify every possible bug and 
> workaround on the command line.  The common pattern used in most major 
> cross-platform toolkits that deal with these issues is to have some sort 
> of platform include that basically does things like:
> 
> #ifdef WINDOWS
> #define BROKEN_PIPE_IMPLEMENTATION
> #define BROKEN_SELECT_IMPLEMENTATION
> ...etc
> #endif
> 
> If version acted like an enhanced static if then you could do something 
> like:
> 
> version (Windows) {
>    const int BROKEN_THIS = 1;
>    const int BROKEN_THAT = 1;
>    ...
> }
> 
> version (BROKEN_THIS) {
>    // workaround code
> }
> 
> In that case I guess version(/undefined symbol/) should evaluate to false.
> 
> If you can't use const ints in version statements, then I think you 
> really need to have something like:
> 
> defversion BROKEN_THIS;
> defversion BROKEN_THAT;
> 
> And while we're talking about versions, there also needs to be a sane 
> way to check if the version of the software you're using is greater than 
> some minimum.
> 
> version(COOL_LIB_MAJOR_REV>4 || (COOL_LIB_MINOR_REV > 1)
> {
> }
> 
> or even better something special for version numbers like or
> 
> version(COOL_LIB_REV > [4, 1])
> 
> version(COOL_LIB_REV > 4.1.0)
> 
> Here's wxWidgets version macro for checking the version of wxWidgets 
> you're compiling with.  It should be possible to get the same effect in 
> D somehow:
> 
> /*  check if the current version is at least major.minor.release */
> #define wxCHECK_VERSION(major,minor,release) \
>     (wxMAJOR_VERSION > (major) || \
>     (wxMAJOR_VERSION == (major) && wxMINOR_VERSION > (minor)) || \
>     (wxMAJOR_VERSION == (major) && wxMINOR_VERSION == (minor) && 
> wxRELEASE_NUMBER >= (release)))
> 
> Here's the full header that came from:  http://tinyurl.com/tzbom
> 
> 
> Basically I think you can do all that with static if now.  If version 
> doesn't get some more smarts then I'm betting people will use static if 
> to accomplish things like the above since it's the only way.  And if 
> people start using static if for version checks, well then what was the 
> point of version, exactly?
> 
> --bb

Read http://digitalmars.com/d/version.html#version : Version Specification



More information about the Digitalmars-d-announce mailing list