Every once in a while Erlang style [1] message passing concurrency [2] is discussed for Python which does not only imply Stackless tasklets [3] but also some process isolation semantics that lets the runtime easily distribute tasklets ( or logical 'processes' ) across physical processes. Syntactically a tasklet might grow out of a generator by reusing the yield keyword for sending messages:
yield_expr : 'yield' ([testlist] | testlist 'to' testlist) where the second form is specific for tasklets ( one could also use a new keyword like "emit" if this becomes confusing - the semantics is quite different ) and the addition of a new keyword for assigning the "mailbox" e.g: required_stmt: 'required' ':' suite So tasklets could be identified on a lexical level ( just like generators today ) and compiled accordingly. I just wonder about sharing semantics. Would copy-on-read / copy-on-write and new opcodes be needed? What would happen when sharing isn't dropped at all but when the runtime moves a tasklet around into another OS level thread / process it will be pickled and just separated on need? I think it would be cleaner to separate it completely but what are the costs? What do you think? [1] http://en.wikipedia.org/wiki/Erlang_programming_language [2] http://en.wikipedia.org/wiki/Actor_model [3] http://www.stackless.com/ -- http://mail.python.org/mailman/listinfo/python-list