DIP 1019--Named Arguments Lite--Community Review Round 2

Jonathan Marler johnnymarler at gmail.com
Thu Jun 6 19:17:38 UTC 2019


On Wednesday, 5 June 2019 at 13:03:26 UTC, Mike Parker wrote:
> This is the feedback thread for the second round of Community 
> Review for DIP 1019, "Named Arguments Lite":
>
> https://github.com/dlang/DIPs/blob/9c9cc39246de4c449fe1e6cb6b27f7e426ff1eb9/DIPs/DIP1019.md
>
> All review-related feedback on and discussion of the DIP should 
> occur in this thread. The review period will end at 11:59 PM ET 
> on June 19, or when I make a post declaring it complete.
>
> At the end of Round 2, if further review is deemed necessary, 
> the DIP will be scheduled for another round of Community 
> Review. Otherwise, it will be queued for the Final Review and 
> Formal Assessment.
>
> I have recently made minor revisions to the DIP process and 
> implemented guidelines for reviewers. Anyone intending to post 
> feedback in this thread is expected to be familiar with the 
> reviewer guidelines:
>
> https://github.com/dlang/DIPs/blob/master/docs/guidelines-reviewers.md
>
> I also recommend that everyone read my recent blog post on the 
> topic:
>
> https://dlang.org/blog/2019/06/04/revisions-to-the-dip-process/
>
> To be clear, I will be moving (copying, deleting, and pasting 
> in a new thread) posts that do not adhere to the reviewer 
> guidelines. Please direct any comments on the new documentation 
> to a new thread or to personal email. Please, let's keep the 
> review discussion on topic.
>
> Thanks in advance to all who participate.

There's a big issue with this DIP.  It immediately allows any 
function call to increase coupling with the corresponding 
function definition with no way to disable it.  I agree that 
named parameters can increase readability, however, in the 
majority of cases they actually just add extra noise, i.e.

add(int x, int y) // parameter names not helpful
square(float x)  // parameter names not helpful
write(string s) // parameter names not helpful
void opEquals(T)(ref T other) // parameter names not helpful

Of course there are many cases where named arguments are very 
helpful (the DIP provides some examples of this).

However, if you suddenly allow every caller to specify the 
argument names to any parameter on any function, you've added a 
whole new set of dependencies between every function and its 
callers.  A layer of protection/encapsulation has been completely 
removed.  It would be like if we suddenly disabled the "private" 
modifier and allowed everything to access private fields within 
structs and classes.

Languages like python that uses kwargs don't expose the names of 
all parameters.  They are able to pick and choose which 
parameters should be named.  This allows them to keep that layer 
of protection/encapsulation for the parameters where the name 
doesn't matter to the caller, just like when you have private 
fields where the name doesn't matter to an outside component.  D 
should follow this pattern as it has been successful in other 
languages and the alternative has too much disadvantage.  
Allowing a parameter to be named at the call-site should be an 
"opt-in" feature done at the function definition, so as not to 
expose the names of all the other parameters that don't make 
sense to expose to the caller.



More information about the Digitalmars-d mailing list