Declaring Ref Variables Inside Function Calls

Bill Baxter wbaxter at gmail.com
Tue Mar 31 14:24:45 PDT 2009


On Wed, Apr 1, 2009 at 6:16 AM, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> 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.


Thanks for that insightful analysis and commentary.  :)

--bb



More information about the Digitalmars-d mailing list