A Discussion of Tuple Syntax

Michel Fortin michel.fortin at michelf.ca
Tue Aug 20 20:25:03 PDT 2013


On 2013-08-21 00:38:30 +0000, Andrei Alexandrescu 
<SeeWebsiteForEmail at erdani.org> said:

> 1. What do we need?

I think D needs less tuples. It has two kinds (language kind and 
Phobos's kind), which is confusing. It should have just one that covers 
most use cases.

So in essence a tuple should:

1. be able to contain anything you can put as a template argument
2. be able to be packed and expanded as needed

And the above should be usable in these situations:

- using a type tuple as a variable's type
- unpacking a tuple as function/template arguments
- using a tuple as a return type
- assigning a value tuple to an alias-of-variables tuples
- using foreach with a tuple
- pass a tuple by reference to a function
- return a tuple by reference from a function
- slice a tuple
- concat tuples

I'm on the fence about taking the address of a tuple. Not being able to 
take the address has an upside: if the function call ABI pass each 
component of a tuple as one ref parameter under the hood, then you 
could pass tuple of aliases as function arguments. For instance, here 
I'd be swapping variables a, c, and e with variables b, d, and f with 
just one call to swap:

	int a, b, c, d, e, f;
	swap(...(a, c, e), ...(b, d, f));

(Note: using "..." syntax to create packed tuple literals. See my other 
post about how that'd work.)

-- 
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca



More information about the Digitalmars-d mailing list