At 08:24 PM 6/16/2005 -0400, Raymond Hettinger wrote: > As a further benefit, using >attributes was a natural approach because that same technique has long >been used with classes (so no new syntax was needed and the learning >curve was zero).
On Friday 17 Jun 2005 02:53, Phillip J. Eby wrote: > Ugh. Having actually emulated co-routines using generators, I have to tell > you that I don't find generator attributes natural for this at all; > returning a value or error (via PEP 343's throw()) from a yield expression > as in PEP 342 is just what I've been wanting. We've been essentially emulating co-routines using generators embedded into a class to give us the equivalent of generator attributes. We've found this very natural for system composition. (Essentially it's a CSP type system, though with an aim of ease of use) I've written up my talk from ACCU/Python UK this year, and it's available here: http://www.bbc.co.uk/rd/pubs/whp/whp113.shtml I'll also be talking about it at Europython later this month. At 08:03 PM 6/16/2005 -0700, Guido van Rossum wrote: >Someone should really come up with some realistic coroutine examples >written using PEP 342 (with or without "continue EXPR"). On Friday 17 Jun 2005 05:07:22, Phillip J. Eby wrote: > How's this? > > def echo(sock): > while True: > try: > data = yield nonblocking_read(sock) > yield nonblocking_write(sock, data) ... snip ... For comparison, our version of this would be: from Axon.Component import component from Kamaelia.SimpleServerComponent import SimpleServer class Echo(component): def mainBody(self): while True: if self.dataReady("inbox"): self.send(data,"outbox") yield1 SimpleServer(protocol=EchoProtocol, port=1501).run() For more interesting pipelines we have: pipeline(TCPClient("127.0.0.1",1500), VorbisDecode(), AOAudioPlaybackAdaptor() ).run() Which works in the same way as a Unix pipeline. I haven't written the "pipegraph" or similar component yet that could allow this: graph(A=SingleServer("0.0.0.0", 1500), B=Echo(), layout = { "A:outbox": "B:inbox", "B:outbox" : "A:inbox" } ) (Still undecided on API for that really, currently the above is a lot more verbose -) By contrast I really can't see how passing attributes in via .next() helps this approach in any way (Not that that's a problem for us :). I CAN see though it helps if you're taking the approach for generator composition if you're using twisted.flow (though I'll defer a good example for that to someone else since although I've been asked for a comparison in the past, I don't think I'm sufficiently twisted to do so!). Michael. -- Michael Sparks, Senior R&D Engineer, Digital Media Group [EMAIL PROTECTED], http://kamaelia.sourceforge.net/ British Broadcasting Corporation, Research and Development Kingswood Warren, Surrey KT20 6NP This e-mail may contain personal views which are not the views of the BBC. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com