On Tuesday, 10 May 2016 at 11:12:58 UTC, Tomer Filiba wrote:
Hey guys,

Looking at our code base (weka), I realized it would be really useful if we had logical operators (negation, conjunction, disjunction) in the version's "condition" clause. Here's what I have in mind:

version(!extra_checks) {
    ...
}

version(dlang_ver_2069 || dlang_ver_2070) {
    ...
}

Today we have lots of ugly code like

version(unittest) {} else { ... }

and bad-old copy-paste for the logical-or case I mentioned.

Is there any reason for that versions can't take compound logical conditions? Alternatively, an isVersion(x) predicate that I could use in a static if could do the trick -- although I think ``version(x || y)`` is more readable than ``static if (isVersion(x) || isVersion(y))``

I think it could be a useful feature. Any thoughts?

-tomer

Still holding out hope Walter will change his mind here..

His rationale is based on keeping code clean and organized, but given that D has no preprocessor macros, it will never look as bad as C++ code, or even close.

Compounding versions in C++ accounts for a very small portion of the mess. When you have an #if VERS every 5 lines, however, you've got a problem...but then, you can do that with D's version just the same. The real solution is to properly encapsulate system-dependant code so that whatever version statement you need, is all in one place. Also when you have to hack 10 different macros together to invent a feature your language doesn't have, you've got a problem, but this is much less of a concern in D than C++.

When even D gurus writing D compilers have to hack solutions together with static if to get by, its time to re-evaluate the situation.

   Bit

Reply via email to