Coco

LuaJIT

# Coco

Coco is a small extension to get True C Coroutine semantics for Lua 5.1.

Coco is both available as a stand-alone release and integrated into LuaJIT.

The stand-alone release is a patchset against the » standard Lua 5.1.3 distribution. There are no dependencies on LuaJIT. However LuaJIT depends on Coco to allow yielding for JIT compiled functions.

Coco is Copyright © 2004-2008 Mike Pall. Coco is free software, released under the » MIT/X license (same license as the Lua core).

## Features

True C coroutine semantics mean you can yield from a coroutine across a C call boundary and resume back to it.

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.

In particular you can now:

- Yield across all metamethods (not advised for `__gc`).
- Yield across iterator functions (`for x in func do`).
- Yield across callbacks (`table.foreach()`, `dofile()`, ...).
- Yield across protected callbacks (`pcall()`, `xpcall()`, ...).
- Yield from C functions and resume back to them.

Best of all, you don't need to change your Lua or C sources and still get the benefits. It's fully integrated into the Lua core, but tries to minimize the required changes.

## More ...

Please visit the » Download page to fetch the current version of the stand-alone package.

Coco needs some machine-specific features — please have a look at the Portability Requirements.

Coco also provides some upwards-compatible API Extensions for Lua.

Copyright © 2005-2008 Mike Pall · Contact