Thanks, Richard.<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Whether someone would choose Lua or Stackless Python for coroutines is<br>
probably a matter of preference for the language itself.  But one<br>
thing Stackless might provide that Lua does not, is the ability to<br>
block C function calls as well as Python function calls given that we<br>
shift C stack sections in and out with tasklets.  Or the ability to<br>
persist and unpersist in a cross platform way, running tasklets.<br>
<br>
Cheers,<br>
<font color="#888888">Richard.<br>
</font></blockquote></div><br>I just noticed that there is &#39;Coco&#39; for lua, which seems to provide similar C stack manipulation to that used in Stackless:<br><br>&quot;&quot;&quot;<br>Coco is a small extension to get <strong>True C Coroutine</strong>
semantics for Lua 5.1.
<br><p>
True C coroutine semantics mean you can yield from a coroutine
across a C call boundary and resume back to it.
</p>
<p>
Coco allows you to use a dedicated C stack for each coroutine.
Resuming a coroutine and yielding from a coroutine automatically switches
C stacks, too.
</p>
<p>
In particular you can now:
</p>
<ul><li>Yield across all metamethods (not advised for <tt>__gc</tt>).</li><li>Yield across iterator functions (<tt>for x in func do</tt>).</li><li>Yield across callbacks (<tt>table.foreach()</tt>, <tt>dofile()</tt>, ...).</li>
<li>Yield across protected callbacks (<tt>pcall()</tt>, <tt>xpcall()</tt>, ...).</li><li>Yield from C functions and resume back to them.</li></ul>
<p>
Best of all, you don&#39;t need to change your Lua or C sources
and still get the benefits. It&#39;s fully integrated into the
Lua core, but tries to minimize the required changes.
</p>&quot;&quot;&quot;<br><br>So far I do not see a lua answer to Stackless&#39;s pickling support. (Live, running &#39;tasklets&#39; in Stackless can be serialized and then resumed - anywhere that you can run Stackless...)<br>
<br>:)<br>