On 04/06/2018 10:39 PM, Yuxuan Shui wrote:
I've dwelt on this for a couple of months now, and keeping thinking on
it myself is not going to help. That's why I'm asking for feedback.
Hum
Changes possible usage syntax, given that the only attribute that does
this currently is @property which people want to remove (as it mostly
does nothing), a pragma might be a better option.
```D
pragma(namedParameters, true):
```
By making it a pragma, it also makes it an override for a future
possible extension (e.g. my DIP with better syntax). So that it becomes
a compiler extension not a language feature.
If no future DIP to extend it happens, a dedicated attribute can be
added instead (like you have).
Changes summarized:
1. Overload resolution does not change
2. Arguments (named names gets erased as far as overload resolution is
concerned)
3. When multiple definitions of a function prototype are found with
types of parameters matching and is not templated then the names will go
into a single definition in the AST for a given scope. These alternative
names can be used for verification with named arguments, but all
arguments names must match a single set of parameter names and cannot be
mixed.
Thought: Couldn't we have alternative names in the parameter instead?
E.g.
```D
void foo(int x/x0/width, int y/y0/height){}
```
This simplifies having to keep whole prototypes around (which can be a
real pain especially with templates that it would otherwise not work for).
4. New calling syntax ``Identifier : ConditionalExpression``
FIXME: fix your DIP to that FYI, ``foo(width:x=7)`` probably isn't what
you want to have supported.
I'll copy this into the PR comments if I haven't misunderstood something
big.