Feature request: extending comma operator's functionality

Tove tove at fransson.se
Sun Oct 7 03:15:08 PDT 2012


On Friday, 5 October 2012 at 13:47:00 UTC, monarch_dodra wrote:
> On Friday, 5 October 2012 at 00:22:04 UTC, Jonathan M Davis 
> wrote:
>> On Friday, October 05, 2012 02:08:14 bearophile wrote:
>>> [SNIP]
>>> Regarding definition of variables in D language constructs, 
>>> there
>>> is one situation where sometimes I find D not handy. This code
>>> can't work:
>>> 
>>> do {
>>> const x = ...;
>>> } while (predicate(x));
>>> 
>>> 
>>> You need to use:
>>>
>>> T x;
>>> do {
>>> x = ...;
>>> } while (predicate(x));
>>
>> Yeah. That comes from C/C++ (and is the same in Java and C#, I 
>> believe). I
>> don't know why it works that way. It's definitely annoying.
>> 
>> [SNIP]
>>
>> - Jonathan M Davis
>
> Because it's the only way to guarantee that x exits when you 
> reach the end of the loop.
>
> do {
>   if(true) continue; //Yawn... skip.
>   const x = ... ;
> } while (predicate(x)); //What's x?
>
> Basic goto limitations. Unlike goto though, inserting a 
> "continue" should never create a compile error, so the compiler 
> *has* to guarantee that the if condition references nothing 
> inside its own block.
>
> It is annoying, but nothing that can't be fixed with a scope 
> bloc.

There is a simple way around this... which addresses both 
concerns raised...
1. Semantics of old code is unchanged.
2. no issue with 'continue'

do(const x = ...)
{
}
while(predicate(x));



More information about the Digitalmars-d mailing list