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