Wouldn't "create", "getcurrent" and "switch" be better primitives for coroutines [0]?<p>Having a concept of caller and callee complicates the maintenance of a large number of "concurrent" coroutines that does different things, and "yield" can be implemented by just using a global variable.<p>[0]: <a href="http://pypy.readthedocs.org/en/latest/stackless.html#coroutines" rel="nofollow">http://pypy.readthedocs.org/en/latest/stackless.html#corouti...</a>