version()
Iain Buclaw
ibuclaw at ubuntu.com
Mon Jan 16 07:38:58 PST 2012
On 16 January 2012 14:27, Manu <turkeyman at gmail.com> wrote:
> On 16 January 2012 15:30, Don Clugston <dac at nospam.com> 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';
More information about the Digitalmars-d
mailing list