"Walter Bright" <[email protected]> wrote in message news:[email protected]... > Nick Sabalausky wrote: >> The point is, the current semantics for D's version() are *plenty* >> susceptible to most of same versioning mess as C's #if/#ifdef, and in >> some cases (such as ||), even worse. With either style, the solution is >> exactly the same as any other chunk of messy code: Clean it up! Not only >> is gimping the version-control mechanism the wrong solution, it doesn't >> even solve the problem anyway. > > I'll argue that I've never seen anyone create such a mess in D, while I > see it regularly in C.
Agreed, but I'm certain that a significant reason for that is the fact that (and I mean no disrespect to D by this) C has had far more people working on a far larger number of projects that each span far more platforms all for a far longer time. Just look at all of the platforms supported by that GC example. Even the D language itself isn't that multi-platform yet. And then there's all of that GNU C code that's been around much longer than even D itself. If D had the ubiquity of C (as I hope someday it will), then D would have plenty of mess too. Not as much, granted (for reasons I argue below), but still a fair amount. > So something about D is discouraging developing those things. > > I think the tipping point is that it's too easy in C to slip into writing > such a mess without actually trying to, while in D you have to work harder > to do it. I agree there are things about D that discourage such messy tactics, but I don't think it's the lack of !, ||, && and expression-level usage. I think, as Steven said, that the discouragement comes more from version() being a syntactic/semantic part of the language itself instead of a blunt text-replacement engine that neither knows nor cares what it tramples over. That's why you have to work harder to make a conditional-compilation mess, not because it lacks a few features. Plus, the C preprocessor's syntax automatically invokes a mental association with "blunt text-editing tool" and I think that's a big part of why C coders slip into the mess. D's version() and static if() *look* like an ordinary if(), so that alone is going to decrease urges to use them like a C preprocessor.
