On Tuesday, 5 April 2016 at 11:35:35 UTC, Jacob Carlborg wrote:
On 2016-04-05 09:47, ZombineDev wrote:

D currently supports
Point3 p = { x:1, y:2, z:3 };

It just needs to be extended to work in more places.

https://issues.dlang.org/show_bug.cgi?id=15692

That's only for structs. A uniform initialization syntax needs to be ... uniform. It has to work for everything.

Yeah, that's what I had in mind. new Object{}, int(3) -> int{3}, T() -> T{} (in generic code), and {42, "tuple"} where the type can be deduced.

On the other hand, this may not be such a good idea, because of https://github.com/D-Programming-Language/dmd/pull/1356, which made T() the standard syntax for uniform construction syntax, instead of T{}. Unfortunately the (1, 2, 3) syntax is can't be used for tuples because it is ambiguous/looks bad in some places:
// this looks ok
auto tuple = (1, 3.4, "a string");
// however this looks really strange
foo((1, 3.4, "a string"))
// and this even more ambiguous for the reader.
int a=1, b=2, c=3;
auto i = (a += 2, a + b); // C-style comma operator usage, or tuple?

Even the [] array syntax is not a good idea, because it implies a homogeneous container.

I guess this leaves binary operator abuse like:
auto tuple = |a, "asd"|;
auto tuple = <"asd, 42, 'c'>;
:D

IMHO, the curly brace syntax auto t = {'a', "tuple"}; is the least bad syntax.

Reply via email to