On 2009-12-31 09:58:06 -0500, Andrei Alexandrescu <[email protected]> said:

The question of this post is the following: should output ranges be passed by value or by reference? ArrayAppender uses an extra indirection to work properly when passed by value. But if we want to model built-in arrays' operator ~=, we'd need to request that all output ranges be passed by reference.

I think modeling built-in arrays is the way to go as it makes less things to learn. In fact, it makes it easier to learn ranges because you can begin by learning arrays, then transpose this knowledge to ranges which are more abstract and harder to grasp.

Beside, an extra indirection is wasteful when you don't need it. It's easier to add a new layer of indirection when you need one than the reverse, so the primitive shouldn't require any indirection.


// pseudo-method
void put(R, E)(ref R tgt, E e) {
    tgt.front = e;
    tgt.popFront();
}

I like that because it works especially well with arrays. Here's what I'm thinking of:

        char[10] buffer;
        char[] remainingSpace = buffer[];
        while (!remainingSpace.empty)
                remainingSpace.put(getc());

        // now buffer is full
        writeln(buffer);

--
Michel Fortin
[email protected]
http://michelf.com/

Reply via email to