Declaring Ref Variables Inside Function Calls
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Tue Mar 31 14:16:03 PDT 2009
Bill Baxter wrote:
> On Wed, Apr 1, 2009 at 5:03 AM, Sergey Gromov <snake.scaly at 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
>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>> Jarrett Billingsley wrote:
>>>>>> 2009/3/30 dsimcha <dsimcha at 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? Is (A, B) an expression or a type? And so on.
> a = returns_tuple();
>
> a[0] = 2;
> a[1] = 3.4;
That works in my tree already due to alias this.
> (int,float) z = returns_tuple();
Blech.
> (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).
> takes_int_and_float(unpack!(tup));
Meh.
> I think experience with tuples in Python and ML (and probably
> elsewhere -- heck even D) shows that tuples are incredibly useful. So
> useful that they deserve better syntax than Tuple!(...).
Ehm.
Andrei
More information about the Digitalmars-d
mailing list