Lua is a big name in game scripting.  I chose it for my engine because it is simple, easy to integrate and has excellent performance. Anyway, I just read an article about LuaJIT, which is a just-in-time compiler for Lua that is partially sponsored by Google.  It's supposed to have even more amazing performance than the standard implementation.  It's also binary-compatible with the standard Lua library and interpreter, which means I'm going to try it out with my game engine ASAP.
Lua's implementation of coroutines is one of my all-time favorite features of the language.  This (short) paper  explains the whole reasoning behind the Lua's coroutine implementation and also a little about the history of coroutines.   Sadly, coroutines are not supported out-of-the box by many modern languages, C++ included.  Which brings me to the subject of this post: Lua-style coroutines in C++!  For those who don't know (or were too lazy to read the paper!), Lua's coroutines support three basic operations:    Create: Create a new coroutine object  Resume: Run a coroutine until it yields or returns  Yield: Suspend execution and return to the caller   To implement these three operations, I'll use a great header file: ucontext.h.   #include <vector> #include <ucontext.h>  class Coroutine { public:     typedef void (*Function)(void);      Coroutine(Function function);     void resume();     static void yield();  private:     ucontext_t context_;     std...
Comments
Post a Comment