Discussion Thread: DIP 1030--Named Arguments--Final Review

Petar Petar
Thu May 14 11:56:41 UTC 2020


On Thursday, 14 May 2020 at 05:19:21 UTC, Walter Bright wrote:
> On 5/13/2020 12:31 PM, Steven Schveighoffer wrote:
>> On 5/13/20 3:30 PM, Walter Bright wrote:
>>> In D, we do:
>>>     void copy(string, string destination);
>> And how does the implementation of copy use that first 
>> parameter?
>
> ----- test.di -----
> void copy(string, string destination);
>
> ----- test.d ------
> void copy(string src, string destination)
> {
>     ...
> }


Since .di files quite rare in D, compared to C and C++, can we 
also support the following:

----- test.d ------

// originally written as `void copy(string src, string dst)`:
void copy(string source, string destination)
{
     ...
}

// `copy` function author decided to improve the function 
signature,
// by not using abbreviated names. To prevent breaking changes 
they
// add a deprecated declaration:
deprecated("Parameters renamed: `src` -> `source` | `dst` -> 
`destination`")
void copy(string src, string dst);

// However the author made a mistake and actually wrote:
// void copy(string source, string distinasion)
// Being extra careful about their users, the author adds another
// deprecated declaration:
deprecate("`distinasion` was renamed to `destination` to correct 
typo")
void copy(string source, string distinasion);

----- old_time_user.d ------
void main()
{
     // keeps working, though emits a deprecation message:
     // Parameters renamed: `src` -> `source` | `dst` -> 
`destination`
     copy(src: "/some/path", dst: "/another/path");
}

----- new_user.d ------
void main()
{
     // works with no deprecation messages
     copy(source: "/some/path", destination: "/another/path");
}

----- conservative_user.d ------
void main()
{
     // works without ambiguity error
     copy("/some/path", "/another/path");
}


Since parameter names are not going to be part of the name 
managing, I propose that the compiler merges function 
declarations that produce the same mangled name in order to not 
emit ambiguity errors.


More information about the Digitalmars-d mailing list