On Thu, Apr 13, 2017 at 4:59 PM, bartc <b...@freeuk.com> wrote: > On 13/04/2017 22:58, Ian Kelly wrote: >> >> On Thu, Apr 13, 2017 at 3:27 PM, Dennis Lee Bieber >> <wlfr...@ix.netcom.com> wrote: >>> >>> On Thu, 13 Apr 2017 15:52:24 +0100, bartc <b...@freeuk.com> declaimed the >>> following: >>> >>>> 'goto' would be one easy-to-execute byte-code; no variables, objects or >>>> types to worry about. If implemented properly (with the byte-code >>>> compiler using a dedicated name-space for labels) there would be no name >>>> lookups. >>>> >>> >>> Only if GOTO is not allowed to break out of namespaces... >>> >>> NO GOTO from inside a function to some global catch-all >>> handler... > > > (That doesn't happen. No sane language would allow it, not on the user-side > anyway.)
Well, you can do it in Assembly. And BASIC, if you count the primitive GOSUB-type subroutines, though modern BASICs have real subroutines that don't allow it. >>> Once you permit uncontrolled/unlimited GOTO you have to be >>> concerned >>> with stack-frames and object life-times. >> >> >> Even within a function you would still have to be concerned about a >> goto from inside a try or with block to outside of that block, as the >> finally block or the context manager's __exit__ still need to be >> executed on the way out. > > > So how does 'break' manage it? I assume break works from inside a try- or > with-block. Yes, it would have to work similarly to break, continue and return. I didn't mean to imply that it was impossible, only that it's not quite as simple as just modifying a program counter. For reference, here's what break inside a try block compiles to: >>> dis.dis(""" ... while True: ... try: ... break ... finally: ... print("Bye") ... """) 2 0 SETUP_LOOP 22 (to 24) 3 >> 2 SETUP_FINALLY 6 (to 10) 4 4 BREAK_LOOP 6 POP_BLOCK 8 LOAD_CONST 0 (None) 6 >> 10 LOAD_NAME 0 (print) 12 LOAD_CONST 1 ('Bye') 14 CALL_FUNCTION 1 16 POP_TOP 18 END_FINALLY 20 JUMP_ABSOLUTE 2 22 POP_BLOCK >> 24 LOAD_CONST 0 (None) 26 RETURN_VALUE -- https://mail.python.org/mailman/listinfo/python-list