comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: stopping a loop iteration without exiting it
Date: Thu, 4 Jan 2018 19:31:17 -0600
Date: 2018-01-04T19:31:17-06:00	[thread overview]
Message-ID: <p2mkh5$jtl$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: fb680nFc4gpU1@mid.individual.net

"Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message 
news:fb680nFc4gpU1@mid.individual.net...
> On 18-01-04 01:17 , Robert A Duff wrote:
>> "Randy Brukardt" <randy@rrsoftware.com> writes:
>>
>>> A "goto" is *not* stupid in this case.
>>
>> I agree.  There are (rare) cases in Ada when "goto" is the right
>> solution, and nested "continue" can be one of them.
>
> But many coding rules frown on "goto" (with good reason, IMO). If 
> "continue" is implemented with "goto", either the code-rule-checking tools 
> will flag these "gotos" as violations, or the tools must be taught to 
> tolerate "gotos" when they are used for "continue".

There is nothing the Standard can do about bad programming management. ;-)

Coding standards that blindly ban features force programs into convuluted 
structures. Which defeat the purpose of the coding standard in the first 
place.

> IMO, if there is a frequent need for a "continue" construct in Ada 
> programming, it should just be added to the language, even if this seems 
> like shameful imitation of some other, more popular languages.

It's not a frequent need, it's just a non-zero need. I find I end up up 
writing such a goto (very roughly) once a year. But a good number of them 
aren't strict continues; there's often something at the bottom of the loop 
after the label.

> That said, I don't remember ever having a need for a "continue" in my Ada 
> programming, but perhaps this depends on one's design style and favourite 
> coding idioms.
>
>> In fact, the goto is BETTER than the continue statement, because the
>> place where it's jumping to is marked with a label, ..
>
> If "continue" were added to Ada, of course it should have an optional 
> loop-name to mark the loop being continued, as for the current "exit":
>
>     exit Search_Loop when ...;
>
>     continue Search_Loop when ...;

I think you miss the point: the fact that there is a goto to the end of the 
loop is marked by a label in this (the "continue") case. "Continue" is NOT 
the usual case (it is rare enough that we decided not to add it because it 
would need a new keyword and inevitably break existing code using the label 
"Continue"), so the presence of the label at the end keys the reader that 
you can get there in other ways then just dropping out of the if statement 
that probably preceeds the "end loop". That's what Bob meant by saying that 
it is "better". (The sort of loop that needs a "continue" is likely to be 
very long.) This is likely the same reason that Ada 83 didn't allow goto to 
a loop name (when one sees a loop name, one ignores it unless you are 
tracing exits).

                                     Randy.



  reply	other threads:[~2018-01-05  1:31 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-03 16:54 stopping a loop iteration without exiting it Mehdi Saada
2018-01-03 17:23 ` Lucretia
2018-01-03 21:19   ` Randy Brukardt
2018-01-03 23:17     ` Robert A Duff
2018-01-04  8:47       ` Niklas Holsti
2018-01-05  1:31         ` Randy Brukardt [this message]
2018-01-04 10:08       ` Jeffrey R. Carter
2018-01-04 11:02         ` Dmitry A. Kazakov
2018-01-04 19:46           ` Robert A Duff
2018-01-04 20:47             ` Mehdi Saada
2018-01-04 21:17             ` Dmitry A. Kazakov
2018-01-04 23:08               ` Niklas Holsti
2018-01-05  8:38                 ` Dmitry A. Kazakov
2018-01-06 16:50                   ` Niklas Holsti
2018-01-06 17:20                     ` Dmitry A. Kazakov
2018-01-07 11:36                       ` Niklas Holsti
2018-01-07 12:05                         ` Dmitry A. Kazakov
2018-01-07 21:22                           ` Niklas Holsti
2018-01-08  8:35                             ` Dmitry A. Kazakov
2018-01-08 20:57                       ` Randy Brukardt
2018-01-08 21:19                         ` Dmitry A. Kazakov
2018-01-08 21:48                           ` Submitting requests to the ARG, was: " Simon Clubley
2018-01-09  9:45                             ` Dmitry A. Kazakov
2018-01-08 22:35                         ` Jeffrey R. Carter
2018-01-05 16:34               ` Robert A Duff
2018-01-05 19:09                 ` G. B.
2018-01-07 11:52               ` Niklas Holsti
2018-01-07 12:27                 ` Dmitry A. Kazakov
2018-01-06  0:53           ` Keith Thompson
2018-01-06  8:36             ` Dmitry A. Kazakov
2018-01-06  8:49               ` gautier_niouzes
2018-01-06  9:26                 ` Dmitry A. Kazakov
2018-01-08 11:05                 ` mockturtle
2018-01-09 11:05               ` AdaMagica
2018-01-09 11:26                 ` Dmitry A. Kazakov
2018-01-09 12:50                   ` Simon Wright
2018-01-09 13:07                     ` Dmitry A. Kazakov
2018-01-09 13:47                       ` Dennis Lee Bieber
2018-01-09 14:53                         ` Dmitry A. Kazakov
2018-01-09 20:07                           ` G. B.
2018-01-10  8:13                             ` Dmitry A. Kazakov
2018-01-10 21:14                               ` G. B.
2018-01-11 12:48                                 ` AdaMagica
2018-01-11 20:54                                   ` G. B.
2018-01-11 13:06                                 ` Dmitry A. Kazakov
2018-01-11 17:11                                   ` Simon Wright
2018-01-11 17:30                                     ` Dmitry A. Kazakov
2018-01-11 18:09                                       ` Simon Wright
2018-01-11 20:54                                   ` G. B.
2018-01-12  8:20                                     ` Dmitry A. Kazakov
2018-01-12  9:22                                       ` G. B.
2018-01-12  9:42                                         ` Dmitry A. Kazakov
2018-01-10 10:52                       ` AdaMagica
2018-01-10 11:14                         ` Dmitry A. Kazakov
2018-01-10 11:21                           ` AdaMagica
2018-01-10 13:47                             ` Dmitry A. Kazakov
2018-01-04 21:52         ` Mart van de Wege
2018-01-05 13:17           ` Jeffrey R. Carter
2018-01-05 14:35             ` Mart van de Wege
2018-01-05 15:21               ` Jeffrey R. Carter
2018-01-05 19:13                 ` Paul Rubin
2018-01-05 23:50                   ` Randy Brukardt
2018-01-06  1:19                   ` G. B.
2018-01-06  9:59                   ` Jeffrey R. Carter
2018-01-05  1:17         ` Randy Brukardt
2018-01-05 14:05           ` Jeffrey R. Carter
2018-01-05 23:58             ` Randy Brukardt
2018-01-04 12:43     ` gautier_niouzes
2018-01-03 17:28 ` Jeffrey R. Carter
2018-01-03 18:27 ` Mehdi Saada
2018-01-06  0:26 ` Matt Borchers
2018-01-06 22:04   ` J-P. Rosen
2018-01-07  2:05     ` Matt Borchers
2018-01-08 20:49   ` Randy Brukardt
2018-01-07 11:33 ` Mehdi Saada
2018-01-07 11:45   ` Simon Wright
2018-01-08  0:58   ` Matt Borchers
2018-01-07 17:47 ` Micah Waddoups
2018-01-07 21:04   ` Simon Wright
2018-01-23  3:49 ` Robert Eachus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox