lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]




On 10/04/16 05:44 PM, Soni L. wrote:


On 10/04/16 05:06 PM, Nagaev Boris wrote:
On Sun, Apr 10, 2016 at 6:40 PM, Jura Pk <marsgpl@gmail.com> wrote:
Problem solved, thanks to Shmuel Zeigerman and Soni L.
After wrapping in lua_checkstack, the code works perfectly even with 1000
tables.
Seems, like lua_checkstack grows the stack =)

2016-04-10 21:27 GMT+03:00 Shmuel Zeigerman <shmuz@013net.net>:
On 10/04/2016 20:16, Jura Pk wrote:
I am stuck with a problem: when I'm trying to add 100 tables in Lua c
stack, I receive segfault on function end.
Code example:
lua_example.c: http://pastebin.com/GFvLwMY2
Makefile: http://pastebin.com/3EWJiVz7
test.lua: http://pastebin.com/1y22XvzK

See https://www.lua.org/manual/5.3/manual.html#lua_checkstack

--
Shmuel


By the way, why not to grow the stack automatically in pushing API functions?

Because of overhead. Imagine checking the stack every operation vs checking the stack once for 1000 operations, or however many you need.

A note about overhead: You can significantly speed up a Lua VM by using a "microcoded" VM and optimizing the "microcode", that is, splitting large operations into smaller operations and optimizing access.

E.g. for this code:

local t = {}
t[1] = true
t[2] = false
print(t[1], t[2])

Each table access needs to check if the table is nil and if the table has a metatable. But with a "microcoded" VM, access to `t` could skip those checks. It would however make the debug library significantly more dangerous, and the VM would be significantly larger.

LuaJIT actually does this. The bytecode includes type hints and is dynamically translated into IR and optimized, which then gets translated into assembly. Altho I'm not sure if it includes the whole "making the debug library dangerous" part.

If you need performance, you do it in C.

--
Disclaimer: these emails may be made public at any given time, with or without reason. If you don't agree with this, DO NOT REPLY.