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