Well, with scope and try...finally... are really important in asynchronized 
programming, so I'm afraid we cannot just drop it. There isn't a replacement 
for an iterator to safely dispose some resources; and now we know that EVEN 
with and finally are not really safe...

It turns out that what we love most and trust most harm us most :(

2016-10-24 

hubo 



发件人:Nathaniel Smith <n...@pobox.com>
发送时间:2016-10-24 15:24
主题:Re: [pypy-dev] RFC: draft idea for making for loops automatically close 
iterators
收件人:"Armin Rigo"<armin.r...@gmail.com>
抄送:"hubo"<h...@jiedaibao.com>,"PyPy Developer Mailing List"<pypy-dev@python.org>

On Sun, Oct 23, 2016 at 11:42 PM, Armin Rigo <armin.r...@gmail.com> wrote: 
> Hi, 
> 
> On 24 October 2016 at 06:03, hubo <h...@jiedaibao.com> wrote: 
>> long time, which is what PyPy is for. Files may not be the most critical 
>> problem, the real problem is LOCK - when you use with on a lock, there are 
>> chances that it never unlocks. 
> 
> Bah.  I would say that it makes the whole "with" statement pointless 
> in case you're using "await" somewhere inside it.  In my own honest 
> opinion it should not be permitted to do that at all---like, it should 
> be a SyntaxError to use "await" inside a "with".  (This opinion is 
> based on a very vague understanding of async/await in the first place, 
> so please take it with a grain of salt.) 

Interesting historical tidbit: until PEP 342, it actually was a syntax 
error to yield inside try, or at least inside try/finally. 

Actually relevant modern answer: 'await' inside 'with' turns out to be 
OK, because async functions are always run by some supervisor (like an 
event loop), and so the solution is that the supervisor guarantees as 
part of its semantics that it will always run async functions to 
completion. (You're right that this isn't obvious though -- it took 
very confused thread on the async-sig mailing list to recognize the 
problem and solution.) Since event loops are already rocket science 
and you only need one of them, requiring them to take some care here 
isn't a big deal. 

The problem with (async) generators is that everyone who uses them 
also has to make some similar guarantee (i.e., they must be run to 
completion, either by exhausting them or calling .close()), but they 
get used all over the place in random user code, and it's not 
reasonable to ask users to figure this out every time they write a 
'for' loop. 

-n 

--  
Nathaniel J. Smith -- https://vorpus.org 
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
https://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to