DIP 1030-- Named Arguments--Formal Assessment

Mike Parker aldacron at gmail.com
Thu Sep 17 12:58:06 UTC 2020

DIP 1030, "Named Arguments", has been accepted.

During the assessment, Walter and Atila had a discussion 
regarding this particular criticism:


"Named arguments breaks this very important pattern:

auto wrapper(alias origFun)(Parameters!origFun args)
   // special sauce
   return origFun(args);

They say that, though it's true that `Parameters!func` will not 
work in a wrapper, it "doesn't really work now"---default 
arguments and storage classes must be accounted for. This can be 
done with string mixins, or using a technique referred to by 
Jean-Louis Leroy as "refraction", both of which are clumsy.

So they decided that a new `std.traits` template and a 
corresponding `__traits` option are needed which expand into the 
exact function signature of another function.

They also acknowledge that when an API's parameter names change, 
code depending on the old parameter names will break. Struct 
literals have the same problem and no one complains (the same is 
true for C99). And in any case, when such a change occurs, it's a 
hard failure as any code using named arguments with the old 
parameter names will fail to compile, making it easy to see how 
to resolve the issue. Given this, they find the benefits of the 
feature outweigh the potential for such breakage.

More information about the Digitalmars-d-announce mailing list