3 ms·
Why not? Isn't that the whole purpose of coroutines in Lua?
by gngeal 14y ago
Why not? Isn't that the whole purpose of coroutines in Lua?
- ufo 14y agoYou 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.
- gngeal 14y agoAre 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).
- ufo 14y agoYou 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 http://www.lua.org/manual/5.2/manual.html#4.7
- gngeal 14y agoWell, two other options for you are using the coco library with stock Lua 5.1.x, or simply using LuaJIT.
- fab13n 14y agoNo, 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)
- gngeal 14y agoNote that GP didn't mention the means in which the yielding was to be invoked.