On 3/13/2014 6:23 AM, Daniel Murphy wrote:
This is one of the few areas where D is idealistic instead of pragmatic.
Nope. It's a very pragmatic decision.
This reminds me of banning goto and multiple returns because 'structured
programming' prevents goto spaghetti madness. As always, it simply forces the
programmer to jump through more hoops to get what they want.
I've seen some of those hoops programmers have done to get that behavior in D,
and it resulted in just what I predicted - confusing bugs due to wacky
dependencies between modules.
Bluntly, if your code requires more than version(Feature) you are doing it
wrong.
I haven't yet seen an example of boolean version expressions that made the code
clearer, simpler, or more maintainable than version(Feature).
I've seen endless examples of boolean version expressions that are a rat's nest
of unmaintainable, buggy, confusing garbage. I've made a major effort to remove
all that garbage from dmd's source code, for example, and am very pleased with
the results. There's still some in druntime that I wish to get refactored out.
And yes, I'm pretty opinionated about this :-)