On Wednesday, 9 March 2016 at 10:06:25 UTC, Martin Tschierschke wrote:
On Tuesday, 8 March 2016 at 18:46:02 UTC, Chris Wright wrote:
On Tue, 08 Mar 2016 13:52:09 +0000, Martin Tschierschke wrote:
What about this idea? A new word "as" or something similar. fun(ypos as y, xpos as x, radius as r); // different order!

The syntax isn't an issue.

There was one DIP about named parameters, but it was unpopular. It didn't change *anything* about overload resolution; it only had the compiler check that you provided arguments in the correct order, even if they were all of the same type.

Even if there were a DIP everyone liked, nobody is signing up to implement it. DDMD is a little scary and not reflective of good design in D (having been translated by machine from C++).

I might take a look, but I probably won't have the time to produce anything useful.

I have seen the "DIP about named parameters", and i liked the idea
of getting a easier to read code, because it gets more verbose.

My idea with the "val as x" was to avoid the need to define the functions in a different way. But as Idan Arye pointed out, it seems to be more difficult:

"As far as I understand, the main two problems with named arguments are overloading ambiguity and the fact that argument names are not part of the signature."

An other point on my wish list would be to allow string symbol notation like in ruby. Than using hashes (AA) for parameters gets more convenient:

:symbol <= just short for => "symbol"

h[:y]= 50; h[:x] = 100; // <=> h["y"] = 50; h["x"] = 100

For calling a function:
auto params = [:y : 50, :x : 100] <=> auto params = ["y" : 50 , "x" : 100]

Especially when the code is nested in a string for mixin purpose. (vibe.d templates).

But maybe this crashes, because of
the ambiguity if no space after a ":" is used in this place:
auto hash = [ 1 :variable] meaning: auto hash = [ 1 : variable ]
not auto hash = [1 "variable" ] which would make no sense either.

String symbols are Ruby's(and many Lisps', and maybe some other, less popular languages) way to do untyped enums and untyped structs. It's a dynamically typed languages thing and has no room in statically typed languages like D. D mimics dynamic typing to some extent by creating types on the fly with it's powerful templates mechanism - but a new type still needs to be created. D is geared toward reflection on types at compile time, not towards type detection at run-time...

Allowing something like `auto params = [:y : 50, :x : 100]` won't really solve anything. It works nicely in Ruby, because Ruby has dynamic typing and with some syntactic sugar you get elegant syntax for dynamic structs. But in a structured language like D, you run into the problem that `[:y : 50, :x : 100] is an associative array with a determined type for it's values, so you can't do things like `[:y : 50, :x : "hello"]` - which greatly limits the usability of this syntax.

Reply via email to