Comma expression as tuple operator [was Tuples, C#, Java, language

Don nospam at nospam.com
Tue Dec 29 22:29:22 PST 2009


justme wrote:
> grauzone Wrote:
> 
>> BCS wrote:
>>> Hello justme,
>>>
>>>> bearophile Wrote:
>>>>
>>>>> C# will probably not follow the route of stagnation of Java for some
>>>>> more time, thanks to Mono too. I don't like that string interpolation
>>>>> syntax because it looks unsafe, and that design of tuples can be
>>>>> improved, but they are listening to programmes (even if they risk
>>>>> creating a mudball language):
>>>>>
>>>>> http://www.infoq.com/news/2009/12/Mono-CSharp-Ex
>>>>>
>>>>> More on those tuples:
>>>>> http://tirania.org/blog/archive/2009/Dec-23.html
>>>>> Eventually it will be quite useful to have some very well designed
>>>>> multi-return support in D (like those tuples, but better).
>>>>>
>>>> Doesn't D2 already have tuples in Phobos. D has the comma operator
>>>> which C# doesn't so such syntax is not possible in D, me thinks.
>>>>
>>> A though on the comma operator: if the comma operator were defined to 
>>> give a tuple type and be implicitly castable to any suffix of it's self, 
>>> then you could get both the comma expression usage that Walter wants as 
>>> well as all the fun things that tuple expressions give.
>>>
>>> int i = 1, j = 2;
>>>
>>> (i, j) = (j, i); // swap
>>>
>>> i = (j+= i, i*2 + j); // first expression gets evaluated and dropped.
>>>
>>> Thoughts?
>> Why not make the programmer write tuple[$-1] instead?
>>
>> i = (j += i, i*2 + j)[$-1];
>>
>> There's no reason to keep the current comma operator.
> 
> It's his language, after all. I'm sure there is a good reason why the old C style comma expression is still there. Maybe it's good for generating parsers with some software tools?

I doubt it. The thing is, in Walter's world (which I've been living in 
for the fast six months), comma is really important. It's used 
everywhere inside the compiler. Interestingly, however, the compiler's 
comma operator is not the same as the one in D! In the compiler internal 
comma, you can have declarations:

int x = (int y=foo(); y*y);

And also, the compiler can generate unique variable names, which makes 
it much more useful: it's basically a way to generate a simple function 
which is guaranteed to be inlined.
So I think, that Walter's opinion is based on strong personal 
experience; but I don't think that experience is actually relevant.



More information about the Digitalmars-d mailing list