Steven Schveighoffer wrote:
That example has nothing to do with || being allowed, and nothing to do with
your exhibit B. Your simple example makes sense to split into multiple
files, but you simply waved your magic "split into multiple files" wand at
Hans' code and because of the simplicity of D's versioning system, it's more
maintainable? I find it hard to believe without proof.
I cannot prove to you in any mathematical sort of way. All I can say is
that I have a lot of experience doing things both ways, and what the
results are. I can readily believe that it isn't obvious until one has
done it both ways; programming is full of examples of such. Such as:
#define BEGIN {
#define END }
I can't prove that's a bad idea, either. But experience shows it is <g>.
Besides, your example exists *without* any new features to the versioning
system. That is, your example just shows how it's easier to maintain if you
put the version identifier at the outermost layer, instead of in the
innermost layer, and I agree with you there. I just want to try and get rid
of the cruft of:
version(A)
version = AorB;
version(B)
version = AorB;
I think I've been misunderstood here. I never intended one to actually
use the "or" string in a version, my intent was that one determine just
what the feature is that is AorB, and name the identifier that. For example:
version (linux)
version = Pthreads;
version (OSX)
version = Pthreads;
version (Pthreads)
...
else version (Windows)
...
I don't consider that cruft, but very reasonable self-documentation.
If you want to prove how much easier it is, actually split Hans' rat's nest
into multiple files how you would do it, and I'll show you that it isn't any
harder to maintain if you use ||.
I already did port it once, many years ago, it's why I know how hard it
is. Take a look at D's gc which uses personality modules. I ported that
to the mac pretty easily and never touched the main code. I can't even
figure out where the mac osx code is in the hbgc or what would need to
be changed for it. I couldn't even figure out if the hbgc supported OSX
or not.
To sum up, I've done it both ways. The personality module method
approach is head and shoulders the clear winner.