Tuple DIP

rikki cattermole rikki at cattermole.co.nz
Sat Jan 13 01:15:11 UTC 2018


On 12/01/2018 10:44 PM, Timon Gehr wrote:
> As promised [1], I have started setting up a DIP to improve tuple 
> ergonomics in D:
> 
> https://github.com/tgehr/DIPs/blob/tuple-syntax/DIPs/DIP1xxx-tg.md
> 
> 
> This DIP aims to make code like the following valid D:
> 
> ---
> auto (a, b) = (1, 2);
> (int a, int b) = (1, 2);
> ---
> 
> ---
> foreach((sum, diff); [(1, 2), (4, 3)].map!((a, b) => (a + b, a - b)))
> {
>      writeln(sum, " ", diff);
> }
> /+ prints:
> 3 -1
> 7 1
> +/
> ---
> 
> Before going ahead with it, I'd like some preliminary community input:
> 
> - I'm not yet completely satisfied with the DIP.
>    (See section "Limitations".)
>    Please let me know suggestions or further concerns you might have.
> 
> 
> - There are good example use cases missing. While I'm confident I could
>    invent a few of them given a little time, I thought maybe I can
>    expedite the process and make the point more convincingly by asking
>    for use cases you encountered in your own code. The DIP already
>    contains an example due to bearophile.
> 
> 
> [1] https://forum.dlang.org/post/or625h$2hns$1@digitalmars.com

I really dislike the syntax, it looks hard to parse.

#{int, string}

Where T... all equal types

#{1, "str"}

Where T... all equal values
Alternatively:

#(1, "str")

Since it is "arguments" to "construct" it.
Doesn't that look easier to parse and use?


It can be just a bit of syntax suger around (in object.di):

struct Tuple(T...) {
	alias Types = T;

	T args;

	// opIndex/opIndexAssign
}


More information about the Digitalmars-d mailing list