On 28/07/2020 15:33, Guido van Rossum wrote:
Rest assured this is not a problem. In any case it’s the compiler, not the parser, that generates the bytecode, from the AST. The compiler always has the full AST available before it is asked to generate any bytecode. The new parser just allows more flexible syntactic constructs, esp. “soft keywords”.

*If* you want tou propose clearer syntax for this, please extend the loop syntax, not the ‘if’ syntax. So, ‘case ... zero’ makes more sense than ‘if [not] break’.


On Tue, Jul 28, 2020 at 03:26 Jonathan Fine <jfine2358@gmail.com> wrote:
Hi Rob

You wrote:

So:  You're asking that the bytecode generated for the for-loop depends
on something that happens (or not) after the end of the for-loop body
(which could be arbitrarily long).
I speak from ignorance, but I suspect that even with the new parser,
which I am reliably informed can make the tea and implement world peace,
that would be asking a lot.

I'm also speaking from ignorance. However, here I'm the optimist. Ignorance is bliss. You're the pessimist. The devil is in the details.

Until we have knowledge and wisdom on this, I think we need both points of view. So I'm grateful for your https://en.wikipedia.org/wiki/Grain_of_salt (American English, pinch of salt in British English). I hope it makes my dish taste better!
I stand corrected; my objection to detecting "zero iterations" has no foundation.
It's good to know the facts.

On labelled breaks:
My God, you want to bring back the GOTO statement!:-)  Seriously, though, I can see that labelled breaks might be useful.  Especially where the same label is used more than once, helping DRY.
One thought though:
A possible, unrelated, future language extension is to allow breaking out of more than one loop at a time.  (I know there have been times where I would have found this useful, though I can't recall them now.)
So the syntax to break out of 3 loops at a time might be "break break break" or "break 3" or "break 3 times" or <you-name-it>.
A syntax to break out of *all* enclosing loops (although not great programming style, because it would be broken by adding a new outer loop) might be "break all" or "break *".
(BTW I have a job lot of bikesheds, in case you want any cheap ones.)
So maybe you could give half an eye to not clashing with some such possible future scheme?

--Guido (mobile)