Tuple DIP
Mark
smarksc at gmail.com
Sat Jan 13 00:20:12 UTC 2018
On Friday, 12 January 2018 at 22:44:48 UTC, 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
Could we also support function tuples? For instance:
int sum(int a, int b) { return a+b; }
int diff(int a, int b) { return a-b; }
(int, int) f = (sum, diff) // no ";" for consistency with
existing syntax
int (x,y) = f(1, 2); // x=3, y=-1
int (w,z) = (1, 2).f() // same as above, UFCS
int (u,v) = (1, 2).(sum, diff) // same as above, "lambda tuple"
In the last example, (sum, diff) is basically lowered to (x,y) =>
(sum(x,y), diff(x,y)).
More information about the Digitalmars-d
mailing list