On Wed, Apr 1, 2009 at 6:16 AM, Andrei Alexandrescu <seewebsiteforem...@erdani.org> wrote: > Bill Baxter wrote: >> >> On Wed, Apr 1, 2009 at 5:03 AM, Sergey Gromov <snake.sc...@gmail.com> >> wrote: >>> >>> Tue, 31 Mar 2009 12:18:21 -0700, Andrei Alexandrescu wrote: >>> >>>> Jarrett Billingsley wrote: >>>>> >>>>> On Tue, Mar 31, 2009 at 1:32 PM, Andrei Alexandrescu >>>>> <seewebsiteforem...@erdani.org> wrote: >>>>>> >>>>>> Jarrett Billingsley wrote: >>>>>>> >>>>>>> 2009/3/30 dsimcha <dsim...@yahoo.com>: >>>>>>>> >>>>>>>> // How it works now: >>>>>>>> uint foo; >>>>>>>> string bar; >>>>>>>> unpack(foo, bar) = someFunction(); >>>>>>>> >>>>>>>> // vs. how I want it to work: >>>>>>>> unpack(auto foo, auto bar) = someFunction(); >>>>>>> >>>>>>> Cute, but uh, I'd much rather see tuples just be returnable. >>>>>> >>>>>> They are. >>>>> >>>>> template Tuple(T...) >>>>> { >>>>> alias T Tuple; >>>>> } >>>>> >>>>> Tuple!(int, float) foo() >>>>> { >>>>> return Tuple!(3, 4.5); >>>>> } >>>>> >>>>> foo.d(10): Error: functions cannot return a tuple >>>>> >>>>> Unless you're using some prerelease compiler, they are not. >>>> >>>> import std.typecons; >>>> >>>> Tuple!(int, float) foo() >>>> { >>>> return tuple(2, 4.5); >>>> } >>>> >>>> The addition of the alias this feature and of constructor templates >>>> makes std.typecons.Tuple even better. >>>> >>>> Andrei >>> >>> Unfair---std.typecons.Tuple is actually a struct! >>> >>> Well, basically struct is a run-time tuple, anyway. >>> >>> I think that all the buzz around "actual tuple support" boils down to >>> requests for syntax sugar for construction and decomposition of >>> anonymous structs. While typecons.Tuple is sorta OK for construction, >>> things are still pretty ugly on the "decomposition" end. >> >> Right. In my ideal world I could use tuples like this: >> >> (int,float) a; > > That sucks. Is int(int, float) a function type or a juxtaposition of two > types?
I should say that by "in my ideal world" what I meant was "forgetting about all the baggage that D already has for a moment and starting from a more or less clean slate". Things like the useless comma operator. But isn't a juxtaposition of two types a syntax error? So the above would be a function type, not a juxtaposition of two types. > Is (A, B) an expression or a type? And so on. How does that differ from asking "Is A an expression or a type?" If A and B are types, then (A,B) is a type. >> (int,float) z = returns_tuple(); > > Blech. Blech to that, but you like Tuple!(int,float) z = returns_tuple(); correct? >> (int x, float y) = returns_tuple(); > > I'd like that too, but what we should have is make any definition an > expression. > >> auto tup = (2, 3.4); > > Belch (sic). Belch to that, but again, you're saying this is great auto tup = Tuple!(2, 3.4); correct? --bb