Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Why not? Isn't that the whole purpose of coroutines in Lua?


No, quite the contrary: coroutines only yield explicitly, due to a call to coroutine.yield(). They let you control your scheduling deterministically (although multitasking is far from being their only use)


Note that GP didn't mention the means in which the yielding was to be invoked.


You can't yield if there is a C function lower down in the stack so I don't think you can always abuse the coroutine system to implement OS threads like that.


Are you sure about that? I thought that yields across C functions were added in Lua 5.2. Not to mention that in a controlled environment like the runtime that Wikipedia exposes to you, you can take care of avoiding exposing APIs that would allow people to code themselves into a corner like that (if the C calls are leaves, you're OK even in 5.1).


You are right that they could use a carefully crafted API to work around the problems. Its also true that yields across C were added in 5.2 but you need to code the C functions in continuation-passing-style using a special API to take advantage of that.

http://www.lua.org/manual/5.2/manual.html#4.7


Well, two other options for you are using the coco library with stock Lua 5.1.x, or simply using LuaJIT.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: