Re: [Python-Dev] Compilation of "except FooExc as var" adds useless store

2019年1月06日 03:44:25 -0800

Hello,
On Sun, 6 Jan 2019 22:19:39 +1100
Chris Angelico <[email protected]> wrote:
> > It's clear that what happens there is that first None is stored to
> > N, just to del it as the next step. Indeed, that's what done in the
> > compile.c:
> >
> > https://github.com/python/cpython/blob/master/Python/compile.c#L2905
> >
> > Storing None looks superfluous.
> >
> > There's no clear explanation why it's done like that, so probably an
> > artifact of the initial implementation. 
> 
> With something as clearly deliberate as this, it's generally safe to
> assume there's a good reason for it.
Absolutely, and one doesn't need to look far for an example. For 20
years Python was devoid of ":=", then, suddenly... ;-).
> But I would very much like to see
> that reason documented, preferably with an example of something that
> could otherwise fail.
Yeah, I'm keen to know too!
[]
> > So, perhaps the change should be not removing "e = None" part, but
> > conversely, removing the "del e" part. 
> 
> No, there's a good reason for having the "del e", and that's to
> prevent reference loops 
So, I'm not sure if I made that clear, but the issue is that currently
the generated code tries to break the reference loop *twice*. But once
should be enough. And which one of "N = None" or "del N" is better is
something to consider.
-- 
Best regards,
 Paul mailto:[email protected]
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to