DIP 1020--Named Parameters--Community Review Round 2

Andre Pany andre at s-e-a-p.de
Thu Sep 12 19:58:12 UTC 2019


On Wednesday, 11 September 2019 at 23:01:32 UTC, Walter Bright 
wrote:
> On 9/11/2019 12:18 AM, rikki cattermole wrote:
>> But I need to confirm with you before I do this, is this for 
>> the replacement of in place struct initialization syntax?
>> 
>> If so I want to solve that, but I need to ask you how you 
>> would want it done. Since it touches upon .init, it makes me a 
>> little concerned because of dragons.
>
> I'm planning to replace:
>
>   struct S { int a, b; }
>
>   S s = { 1, 2 };
>
> with:
>
>   S s = S(1, 2);
>
> D is almost there already, but is missing the named parameter 
> feature to go all the way.
>
> I'm looking at other ways as well to unify and thereby simplify 
> D.

While this solves some issues, I see one major drawback. This 
example looks currently very dense. With the new syntax it 
becomes more verbose because you have to name the structures:

struct PutItemRequest
{
     string tableName;
     AttributeValue[string] item;
}

struct AttributeValue
{
     bool BOOL;
     string S;
     AttributeValue[string] M;
     string[] SS;
}

void main()
{
     PutItemRequest request = {
	    tableName: "table1",
		item: [
		    "field1": {S: "LALA"},
			"field2": {SS: ["A", "B", "C"]},
			"field3": {
			    M: ["fieldA": {S: "234"}]
			}
		]
	};
}

This example is from the Amazon Web Services library I am using. 
It is rather small. Other calls uses more deep structures.

Also please note, it doesn't compile today because you can use 
struct initialization today only for arrays but not for 
associative arrays.

Kind regards
Andre



More information about the Digitalmars-d mailing list