On 2016-01-23 17:35, Mathias Lang via Digitalmars-d wrote:

About the rationale:
 > Supporting named parameters directly in the language prevents the
need to add workarounds with weird looking syntax like Flag

That's going the opposite way of the current trend, which is shift as
much feature to library as possible.

Yeah, I know. But I think this is worth adding and that Flag is hurting more than it's helping. Just because something is possible to do in the library doesn't mean it's a good idea.

There's been a lot of C++ related features which purely is about mangling. This could be handled in library code together with pragma(mangle). Yet these where added anyway. Yeah, I know everyone will complain that's not the same thing.

 > When interfacing with Objective-C it might be desirable to have a
method calling syntax which resembles the syntax used in Objective-C and
Swift.

Implementing cosmetic features from a language because it appeals to its
user doesn't sound that useful to me.

This was not part of my initial idea. It was added as a bonus. I can remove it from the rational if it's preferred.

The `createReq` example is a bit artificial, as you would usually
replace it with a struct.

Yes.

About the design:
As mentioned earlier, forcing users to say which arguments can be named
and which cannot seems like an unnecessary limit. We'll just end up with
everyone using ':' after parameter names (which is very weird looking
IMO) in order to be able to use that syntax at the call site, if
necessary. Also, bear in mind that a lot of code one will use is not
under one's direct control. So if we want to use named parameter with a
framework which doesn't define this syntax, you cannot.
Since changing the order of parameter is not allowed, it sounds better
to just allow this syntax at the call site.

I think the DIP clearly states why this is the case. There have been several proposals for named parameters before, they have all been shot down because of this (and the ordering of the parameters). I'm not out to create the most ideal and perfect proposal. I'm trying to provide a proposal that has a chance of being accepted.

Also, one point which was not covered, should the compiler enforce that
the name used matches ? E.g. if I use `heigh` instead of `height`,
should the compiler tell me "change name `heigh` to `height`" ?

Hmm. That's kind of interesting. My idea was that the compiler should enforce that. But if the names don't need to match the only thing that is necessary is a syntax for adding names at the call site. The syntax for declaring the named parameters would not be required.

Overall, I'm not found of it. It looks like a lot of complication for
little to no benefit.

How is it complicated? I think it's very simple. The feature could be summarized with this example:

Rect createRect(int x:, int y:, int width:, int height:);
createRect(x: 0, y: 0, width: 200, height: 200);

Just because I described how the feature work in detail doesn't mean it's complicated.

--
/Jacob Carlborg

Reply via email to