On 09/23/2012 10:40 PM, Andrei Alexandrescu wrote:
I discussed this with Walter, and we concluded that we could deprecate
the comma operator if it helps tuples. So I started with this:

http://www.prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP19

Unfortunately, I started much cockier than I ended.  The analysis in
there fails to construct a case even half strong that deprecating the
comma operator could significantly help tuples.

That is because it does not base the discussion on the right
limitations of built-in tuples:

auto (a,b) = (1,"3");
(auto a, string b) = (1, "3");

BTW: the following works

Tuple!(int, string) t2 = t1[0 .. 2];

because of this:

=> (alias this)

Tuple!(int, string) t2; t2._fields = t1[0 .. 2];

=> (tuple assignment)

Tuple!(int, string) t2; t2._fields[0]=t1[0]; t2._fields[1]=t1[1];

Well it essentially
concludes that tuples are mostly fine as they are, and attempts to
embellish them syntactically are marred with unexpected problems.
Nevertheless, I sure have missed aspects all over, so contributions are
appreciated.


- We already use the name 'tuple'. I'd suggest renaming that to
  'sequence' or similar. template Seq(T...){ alias T Seq; }

- The empty tuple can well be (), just like 'Seq!()' works without
  issues (it is an expression that is also a type). What is wrong with
  it?

- How do we expand a sequence into a tuple?
  => (Seq!(1,2,3),)

- What is the calling convention used for passing built-in tuples to
  and from functions?

- As tuples are built-in, expansion can be shorter than '.expand'.
  foo(1, tup..., 3); ?

- Template tuple parameters? This would work, but...
  template Tuple((T...,)){ alias (T,) Tuple; }

  void bar(T,(U...,),V...)(T delegate(U) dg, V args){ ... }
  void foo(T,(U...,),(V...,))(T delegate(U) dg, V args){
     bar!(T,Tuple!U,V)(dg, args);
  } // U and V can be passed separately

- Named tuple fields?

  (int x, int y) tuple = (1,2);

  swap(tuple.x, tuple.y);

Reply via email to