[Python-Dev] PEP 340: Deterministic Finalisation (new PEP draft, either a competitor or update to PEP 340)

Jim Jewett jimjjewett at gmail.com
Mon May 9 16:52:54 CEST 2005


Nick Coghlan <ncoghlan at gmail.com> wrote:
> Josiah Carlson wrote:

>> This has the benefit that an arbitrary block of code can be named, 
>> and a named TerminateBlock used to exit it.

>> ... I suspect any such implementation is going to need to use
>> exceptions for the guts of the flow control, even if that use isn't
>> visible to the programmer.

> Not necessarily.  If I were implementing such a thing; any time
> arbitrary break/continues (to a loop that isn't the deepest) were used
> in nested loops, I would increment a counter any time a loop was entered,
> and decrement the counter any time a loop was exited.  ...

When named blocks are used in Lisp, they often cross function
boundaries.  Given that, the number of intervening loops could
change depending on external variables.  Since you would have
to pop frames anyhow, Exceptions are the right way to do it.

If you limited the named-block gotos to within a single function/method,
then the loop counter would work (and you could limit obfuscation).
Unfortunately, you would lose most of the power of named blocks, 
while still paying the full ugliness price.  You would also encourage 
people to inline things that ought to be separate functions.

In case it isn't clear, I think named loops would be a mistake.  I
wanted them when I first started, but ... at the moment, I can't
think of any usage that wasn't an ugly speed hack, which is at
least more explicit with the "raise Found" idiom.

-jJ


More information about the Python-Dev mailing list