On Tuesday, 20 August 2013 at 21:25:11 UTC, Andrei Alexandrescu
wrote:
On 8/20/13 1:24 PM, Dicebot wrote:
That would be problematic to say the least. (There have been
a few
discussions in this group; I've come to think auto expansion
is fail.)
:O it is awesome!
"Spawn of Satan" would be a tad more appropriate.
+1
I can stand explicit expansion though, like Go's variadic
argument ellipses syntax:
http://golang.org/doc/effective_go.html#append
OT: I'm not really a fan of D's variadic function syntax. I'd
prefer it to be explicit:
int sum(int[] ar ...) {
}
int[3] foo = [4, 5, 6];
sum(foo...);
sum(3, 4, foo...); // on my wish list...
Stuff like foo(myStructInstance.tupleof) is very
powerful tool for generic interfaces.
One problem with automatic expansion is that now there's a
whole new kind - a single expression that doesn't quite have
one value and one type, but instead is an explosion of other
expressions.
snip...
Alternatively, we could do what Go does and prevent all packing
altogether (if I understand what Go does correctly). That is,
if a function returns a tuple you can't even keep that tuple
together unless you use some handcrafted solution. In that
case, before long there will be some "Pack" structure and some
pack helper function, viz. the converse of .expand.
+1
I've been itching for multiple returns in D for a long time, and
this seems like a nice way to add it in. I think I'd prefer to
use tuple syntax instead though, just so there's less magic:
(int, int) doStuff() {
return (1, 2);
}
// syntax error
auto a, b = doStuff();
// ok
auto (a, b) = doStuff();
Clearly both packing and unpacking tuples are necessary.
snip...
Andrei
OT: is the only thing stopping us from using the nice (x,y)
syntax for tuples the comma operator? If so, can we take that
mis-feature behind the woodshed and shoot it? I sincerely hope
nobody is relying on it...