DIP 88: Simple form of named parameters

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Sat Jan 23 08:38:13 PST 2016


On 2016-01-23 15:54, Marc Schütz wrote:

> Some comments:
>
> 1) Default values
>
> You should specify how to use both the `:` syntax and a default
> parameter value, including an example. They are often going to be used
> together, and it needs to be clear how they interact.

I can add an example.

> 2) Argument order
>
> I think your rule no. 4 is not really necessary, and actually diminishes
> the usability a lot if there are many name flags. Argument reordering
> can be done as an independent step before overload resolution (of course
> this still needs to be aware of all the candidates).

Take this for example:

void foo(int a, string b);
void foo(string b, int a);

void main()
{
     foo(3, "asd");
     foo("asd", 3);
}

The above is legal today. The same example with named arguments:

void foo(int a:, string b:);
void foo(string b:, int a:);

void main()
{
     foo(a: 3, b: "asd");
}

What should happen in the above example? Error or which function should 
be called?

> 3) Variadic parameters
>
> Is this legal: `void foo(int[] param: ...)`? Or this: `void
> bar(Args...)(Args args:)`? If yes, what would the calling syntax look like?

I haven't really though of that. My initial though would be to not allow 
that for simplicity. I want to keep it fairly simple to have a chance 
for the proposal to be accepted.

> Also, opDispatch is often used for forwarding arguments. Can parameter
> names be forwarded, too? If yes, variadic template parameters could
> capture the names, too, and apply them during expansion as appropriate.
>
> 4) Traits
>
> Are there going to be traits to inspect the parameter names of a
> function? Of a TypeTuple/AliasTuple/AliasSeq?

We already have ParameterIdentifierTuple [1]. Are you thinking of 
something else?

I'm not seeing how AliasSeq is related but this PR [2] adds template 
parameter introspection traits.

[1] http://dlang.org/phobos/std_traits.html#ParameterIdentifierTuple
[2] https://github.com/D-Programming-Language/dmd/pull/5201

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list