On Thu, 08 Nov 2012 21:24:49 -0800 Jonathan M Davis <[email protected]> wrote:
> On Thursday, November 08, 2012 21:10:55 Walter Bright wrote: > > Many algorithms (at least the ones in Phobos do) already do a check > > to ensure the inputs are the correct kind of range. I don't think > > you'll get very far trying to use a range that isn't a range. > > > > Of course, you can always still have bugs in your range > > implementation. > > Given that a range requires a very specific set of functions, I find > it highly unlikely that anything which isn't a range will qualify as > one. It's far more likely that you screw up and a range isn't the > right kind of range because one of the functions wasn't quite right. > > There is some danger in a type being incorrectly used with a function > when that function requires and tests for only one function, or maybe > when it requires two functions. But I would expect that as more is > required by a template constraint, it very quickly becomes the case > that there's no way that any type would ever pass it with similarly > named functions that didn't do the same thing as what they were > expected to do. It's just too unlikely that the exact same set of > function names would be used for different things, especially as that > list grows. And given that ranges are a core part of D's standard > library, I don't think that there's much excuse for having a type > that has the range functions but isn't supposed to be a range. So, I > really don't see this as a problem. > Looking at one set of interfaces in isolation, sure the chances might be low. (Just like the chances of name collisions when hygeine is lacking, and yet we thankfully have a real module system, instead of C's clumsy "Well, it should usually work ok!" garbage.) But it's a terrible precedent. Scale things up, use ducks as common practice, and all of a sudden you're right back into the same old land of "no-hygeine". Bad, sloppy, lazy precedent. AND the presumed benefit of the duckness is minimal at best. Just not a good design, it makes all the wrong tradeoffs.
