On 16 January 2012 02:35, Zachary Lund <[email protected]> wrote:
> On 01/15/2012 06:16 PM, Manu wrote: > >> On 16 January 2012 02:08, Jonathan M Davis <[email protected] >> <mailto:[email protected]>> 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. >> >> >> Insanity, I argue the exact opposite. My code is WORSE for those 9 >> completely useless lines. Any sane person would look at that and wonder >> WTF... especially someone new to the language. >> Imagine my expression was something more complex: version( A || (B && C) >> ) ... the munging code would double in size. >> >> 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. >> >> >> Fair enough, although this is just an example. >> In my current case, linux and MinGW are the same, but FreeBSD is >> different. You can't rely on predefined unions. >> > > What exactly are you wanting so I can give an example? > > I think the bigger problem is version levels. > For instance there doesn't seem to be a way to "version out" a feature. > Although there will not be any perfect way. If a feature is at level 7, it > will not be included with a version level set at 5. > > Unfortunately, there is no satisfying both sides. You can do: > > version = 5 > > void main() > { > int test; > version(3) > { > /+ Everything in here is now versioned out since version 3 > +/ > } > } > > > or you can have the opposite of which version(3) would have been true > which would allow for incremental versions but that would mean that > everything would be wrapped in version statements in the first place. Thus > I think the code example above makes more sense than what is currently in > place and everything not wrapped in a version statement is assumed to be at > the same version level as what is currently set. > I also considered this problem. You can add features, but you can't remove them with the existing system. I just didn't complain about this... yet ;)
