Ali Çehreli:

> why someone would want to use 'out' instead of 'ref'

There is an idiom in C where a function first sets its "out parameter" to null (or another initial value) and then does some more work to fill that to actual result of the function:

int make_something(Something ** p)
{
    int err = 0;

    assert(p);
    *p = NULL;    // first, initialize

    // fill in p later on

    return err;
}

To me, 'out' of D does that initialization automatically.

Another advantage of "out" is that it clearly documents that argument as another result of the function.

In practice in not-performance critical functions I sometimes prefer to return multiple values in a tuple, despite D doesn't yet have a tuple unpack syntax.

One disadvantage of "out" arguments in D is that D (unlike Ada, I think) doesn't forbid you to set a out argument to some value before the function call. Such assignment is always useless, and sometimes it risks being a programmer mistake. A tuple result doesn't have such bug risk.

Bye,
bearophile

Reply via email to