On Mon, 28 Feb 2011 07:41:06 -0500, Michel Fortin
<michel.for...@michelf.com> wrote:
On 2011-02-28 02:03:46 -0500, Bekenn <leav...@alone.com> said:
Potential problems: The only problems I can foresee here are
variations on the situation when there are two (or more) versions of a
function with the same number, type, and names of parameters, but in
non-matching order, like this:
void func(int a, char b);
void func(char b, int a);
In such a case, the compiler should diagnose an error if named
arguments are employed.
Thoughts?
Another problem is what happens if you override a function by using
different parameter names. For instance:
class A {
void func(int foo);
}
class B : A {
void func(int bar);
}
Currently, the above is allowed. Would it now become an error?
I think it'd be much easier to support named arguments if we didn't
allow reordering. I know I'm stripping the proposal from one of its main
benefits, but I think the essence remains. This would make the rather
common pattern of adding a comment for each argument compiler-verifiable
without disrupting things too much:
draw(null, // text
null, // font
12, // size
0, // flags
);
draw(text: null,
font: null,
size: 12,
flags: 0);
It would be implemented as a check for equality of the argument names
after overload resolution. No ABI change, no interaction with
overloading, just an extra check that if an argument name is specified
it must match the one in the declaration.
There'd still be a funny interaction with overriding (see my first
example), but you can always leave your argument unnamed if the
definition keep changing the name in unpredictable ways.
All these 'what if' ambiguities are simple to resolve -- if you use
positional arguments, it works. If you use named arguments, and it
matches more than one overload, it fails.
In fact, the case you give is unambiguous -- if you have an A, you can use
foo, if you have a B, you can use bar. Note that the confusion is all to
the person, and is completely avoidable. It's like naming your arguments
xy234m5 -- nobody knows what that means, so just choose a better name.
But it's not illegal.
I would say this would be a huge improvement to D. But I would also say
from my recollection, Walter is very against this. I think it would take
a motivated developer creating a pull request to get it done...
-Steve