On Monday, January 16, 2012 01:14:32 Peter Alexander wrote: > On 16/01/12 12:37 AM, Jonathan M Davis wrote: > > Yes, right now. Everything that isn't Posix may be Windows, but that > > won't necessarily always be true. So, when it comes to versioning, code > > should definitely be versioned on what it _is_ rather than what it > > _isn't_. But that doesn't preclude having&& and ||. It's just an > > argument for disallowing !. And as you can see by my example, you can > > essentially _already_ do ! thanks to else. > > I don't see why having '!' versioning is bad. It's perfectly reasonable > to have things that happen in every version except one. For example, you > might not want to run some code if running unittests. For that, using > version(!unittest) would be ideal.
The problem is that when the code is then later compiled with a new version (e.g. a new OS), it's using existing code for code which is already versioned without it being checked. So, instead of the programmer checking each of the relevant version blocks and making sure that the new version uses the appropriate code (be it what's already there or new code), it just compiles with then ! version. And if new code was needed for that code to work correctly with the new version, then you have a bug, which you may or may not catch. Now, I don't deny that in some cases, being able to negate a version can be quite useful. But it _can_ be a problem. Ultimately, however, it's going to be up to the programmer to do the correct thing. I don't think that not having && or || is necessarily helping all that much in that regard. And since you can just use else, I'm not sure that disallowing ! really helps either. And it _does_ cause problems for the people who need more complex versioning. - Jonathan M Davis
