Ranges

Steve Teale steve.teale at britseyeview.com
Thu Jun 18 12:15:35 PDT 2009


I shall start this again from scratch. Please excuse me for being thick about it. I have tried before in more direct questions to Andrei, but in the end all I got was a snotty email telling me not to be a nuisance and RTFD. Unfortunately, the relevant documentation seems to have disappeared.

In range.d, in the context of isInputRange, it says:

"Returns $(D true) if $(D R) is an input range. An input range must
define the primitives $(D empty), $(D popFront), and $(D front). The
following code should compile for any input range ..."

template isInputRange(R)
{
    enum bool isInputRange = is(typeof(
    {
        R r;             // can define a range object
        if (r.empty) {}  // can test for empty
        r.popFront;          // can invoke next
        auto h = r.front; // can get the front of the range
    }()));
}

I can not possibly be the only D enthusiast who finds this completely incomprehensible. What is a range? Is it a template interface, or is it just a trick of template syntax that supports the old assertion that "nobody really understands templates".

If ranges are to be a feature of the D language, then they should probably be supported at language level rather than by some trick that has been discovered by experimenting with how far you can push templates.

Also, it would be very useful to have some indication of what you might use them for. I occasionally had to resort to STL iterators because I wanted to use 'map'. I agree that the syntax sucked, but nobody is telling me how ranges help.

I realize that some people with an IQ of 580 will find my questions naive and misguided - not to mention impertinent, but it seems to me that one of the responsibilities of being a leader is to explain to less gifted followers what the fuck is going on. Or maybe I've got it wrong - if you're that bright (sorry Walter - not you) then perhaps it's just a big ego trip.




More information about the Digitalmars-d mailing list