Worst ideas/features in programming languages?

Paul Backus snarwin at gmail.com
Thu Jan 6 16:23:38 UTC 2022


On Thursday, 6 January 2022 at 13:18:56 UTC, Timon Gehr wrote:
> BTW, it should work like this:
>
> ```d
> void foo(string x){}       // <- a string, not a tuple
>
> void foo(string x,){}      // <- unary tuple
> void foo((string,) t){}    // <- unary tuple
>
> void foo(string x,int y){} // <- 2-tuple
> void foo((string,int) t){} // <- 2-tuple
> ```
>
> So perhaps your example would not even work that way; unary 
> tuples shouldn't decay into the underlying type. The concept 
> will need some fleshing out. Maybe it's indeed too hard to 
> actually retrofit this into the language...

Actually I think you were on the right track in [your earlier 
post][1], with this example:

```d
void foo(int a, string b){} // pattern (int a,string b)
foo(1,"2"); // match tuple (1,"2")
```

i.e., the argument list itself should be treated like a tuple, 
and one could also write

```d
auto tup = (1, "2");
foo(tup);
```

In fact, this is how tuples already work in D, just with nicer 
syntax--`(1, "2")` instead of `tuple(1, "2").expand`.

What the current language *can't* do, without using wrapper 
structs like `std.typecons.Tuple`, is nest tuples. In other 
words, the question we need to answer is perhaps better framed as 
"when *aren't* tuples expanded?"

[1]: https://forum.dlang.org/post/sr5b4a$ogr$1@digitalmars.com


More information about the Digitalmars-d mailing list