Rant after trying Rust a bit

Tofu Ninja via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 23 17:55:32 PDT 2015


On Thursday, 23 July 2015 at 20:09:34 UTC, Walter Bright wrote:
> On 7/23/2015 7:49 AM, ixid wrote:
>> If we had a clean sheet wouldn't it be better to have if 
>> return a value and
>> ditch ternary?
>
> Then we'd start seeing code like:
>
>     x = 45 + if (y == 10) { while (i--) z += call(i); z; } else 
> { switch (x) { case 6: foo(); y; } + tan(z);
>
> I.e. the embedding of arbitrary statements within expressions. 
> We already have some of this with embedded anonymous lambda 
> support, and I've discovered one needs to be very careful in 
> formatting it to not wind up with an awful unreadable mess.
>
> So I'd be really reluctant to continue down that path.
>
> Now, if you want to disallow { } within the embedded if 
> statement, then the proposal becomes nothing more than:
>
>     ? => if
>     : => else
>
> which is a potayto potahto thing.
>
> I agree that trivial syntax issues actually do matter, but 
> having used ?: a lot, I have a hard time seeing embeddable 
> if-else as a real improvement, in fact I find it more than a 
> little jarring to see.

I think I agree on the if else issue, seems arbitrary as we 
already have ?:. Other statements as expressions have less 
obvious meanings. The only part is that I wish you could have 
blocks as expressions. The thing is with ufcs, it really should 
be possible.

For example the following does not compile:
int a = {return 4;};

but the following does:
int a = {return 4;}();

I know it's a really small difference, but with UFCS, I would 
expect you the be able to omit the () and have the function 
literal called automatically. Though I can see that this would 
have problems with auto and knowing if it should be a function 
pointer or to call the function.

I guess what I would expect is "auto a = {return 4;};" to type a 
to a function pointer, but if you explicitly type a to int then 
the literal should be called.

Does UFCS even apply to function pointers? I guess it is a 
problem, it does not seem to be obvious when to call and when to 
copy the pointer. I don't really know what should happen. I think 
I read a dip a little while ago that might have addressed this, 
but I don't really remember. I dont know, now that I have written 
this, it seems to have more problems than I originally thought.



More information about the Digitalmars-d mailing list