[Python-Dev] Re: anonymous blocks

Bob Ippolito bob at redivi.com
Mon Apr 25 06:08:02 CEST 2005


On Apr 24, 2005, at 11:57 PM, Phillip J. Eby wrote:

> At 11:39 PM 4/24/05 -0400, Bob Ippolito wrote:
>
>> On Apr 24, 2005, at 11:32 PM, Phillip J. Eby wrote:
>>
>>> At 04:57 PM 4/24/05 -0700, Guido van Rossum wrote:
>>>> So a block could return a value to the generator using a return
>>>> statement; the generator can catch this by catching ReturnFlow.
>>>> (Syntactic sugar could be "VAR = yield ..." like in Ruby.)
>>>
>>> [uncontrolled drooling, followed by much rejoicing]
>>>
>>> If this were available to generators in general, you could untwist 
>>> Twisted.  I'm basically simulating this sort of exception/value 
>>> passing in peak.events to do exactly that, except I have to do:
>>>
>>>     yield somethingBlocking(); result=events.resume()
>>>
>>> where events.resume() magically receives a value or exception from 
>>> outside the generator and either returns or raises it.  If 
>>> next()-with-argument and next_ex() are available normally on 
>>> generators, this would allow you to simulate co-routines without the 
>>> events.resume() magic; the above would simply read:
>>>
>>>     result = yield somethingBlocking()
>>>
>>> The rest of the peak.events coroutine simulation would remain around 
>>> to manage the generator stack and scheduling, but the syntax would 
>>> be cleaner and the operation of it entirely unmagical.
>>
>> Only if "result = yield somethingBlocking()" could also raise an 
>> exception.
>
> Read Guido's post again; he proposed that passing a result would occur 
> by raising a ReturnFlow exception!  In other words, it's the result 
> passing that's the exceptional exception, while returning an exception 
> is unexceptional.  :)

Oh, right.  Too much cold medicine tonight I guess :)

You're right, of course.  This facility would be VERY nice to ab^Wuse 
when writing any event driven software.. not just Twisted.

-bob



More information about the Python-Dev mailing list