[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Best way to save/re-load an lua state
- From: Asko Kauppi <askok@...>
- Date: Mon, 23 Mar 2009 07:09:56 +0200
I would recommend another (simpler) kind of mechanism:
- have all of your application state in a separate table (or in the _G)
- store that table when exiting
- read that table when re-launching, and if it already contains stuff,
rebuild your application's visual appearance accordingly
- in regular exit (truly quitting the software) erase the state table
so the next launch will be "virgin"
At least Maemo had this kind of a framework, though very roughly
implemented. With Lua, it can be simple. It requires special attention
from the scripts you are running, though. And if it's a GUI, you need
to make some assumptions s.a. not "hybernating" when a dialog is
active. Otherwise there's waaaay too much state to be restored (had
this dialog open, with this field selected, with these entries
edited....) Just consider dialogs invocation-temporal.
Lua Lanes supports this kind of a mechanism in the thread cancellation
(you can get the globals of a cancelled thread). But you can implement
it also on bare Lua, or with Pluto.
Things s.a. userdata cannot be serialized, of course. They can have a
lifespan within each invocation only.
firstname.lastname@example.org kirjoitti 20.3.2009 kello 13:10:
I want to save the state of a Lua VM to a file to re-load and
restart execution later.
Three options come to my mind:
1. Serializing the global index table of the VM. I even found a
library called "Pluto" which promises to do this.
2. Trying to make a deep copy of the lua_State* pointing to a VM and
save/load the binary data.
3. Trying to overwrite malloc/free for the Lua.dll, place all memory
the VM holds in an pre-allocated chunk. Save and re-load that whole
chunk. I'm not sure If I'm yet experienced (in C/C++) enough to get
this done. Probably not.
My Questions are:
1. Which of that options will work or which one are used and which
2. Are there any other options I missed?
3. Which option is most promising in terms of time and complexity?
4. Are there any other helper libraries (beside Pluto) which helps
doing one of the options?