On 16 January 2012 14:27, Manu <[email protected]> wrote: > On 16 January 2012 15:30, Don Clugston <[email protected]> wrote: >> >> On 16/01/12 01:08, Jonathan M Davis wrote: >>> >>> On Monday, January 16, 2012 01:44:56 Manu wrote: >>>> >>>> Surely basic logical expressions within a version seem not only logical, >>>> but also very necessary? >>>> There must be a reason this is impossible, or else I can't believe it's >>>> not >>>> already like that... >>> >>> >>> People have requested it. Walter is against it. I don't remember his >>> exact >>> arguments, but he believes that it leads to worse code if you allow it. >>> >>> As for >>> >>> version(linux || OSX) >>> >>> you can use >>> >>> version(Posix) >>> >>> It'll include FreeBSD as well, but then again, if something is common to >>> both >>> linux and OSX, then it's almost certainly in FreeBSD as well. >>> >>> - Jonathan M Davis >> >> >> I think both approaches are wrong. I think the idea approach is to treat >> versions as booleans, and have a one-definition rule. >> >> version VersionIdentifier = VersionExpression; >> >> extern version VersionIdentifier; >> // means this version is set from command line, or is a compiler built-in >> >> VersionExpression: >> VersionExpression && VersionExpression >> VersionExpression || VersionExpression >> !VersionExpression >> ( VersionExpression ) >> VersionIdentifier >> true >> false >> >> version(A) >> { >> version = AorNotB; >> } >> version(B) >> { >> } >> else { >> version = AorNotB; >> } >> >> becomes: >> version AorNotB = A || !B; >> >> Make it illegal to reference a version identifier which hasn't been >> declared. Disallow version declarations inside version blocks, and all the >> spaghetti is gone. > > > Will that work? I don't think it's reasonable to expect all versions to be > declared in all cases/platforms. There are SSE version identifiers for > instance, why would they be defined on a PPC platform? Likewise any platform > specific features... > Otherwise I generally agree. Though again, too much water under the bridge > to change this decision in the language. >
Are there SSE version identifiers? > The only realistic thing I can see that could be done without breaking > anything is to allow basic logical expressions of version keys which would > otherwise still follow the existing idiom. > Alternatively, allow static-if to access the version list/map. If the > version list was known to static-if, it could take care of the same job, > though it would probably be considerably more ugly. No, static ifs have nothing to do with version. -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';
