Re: Best way to save/re-load an lua state
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: Best way to save/re-load an lua state
- From: Asko Kauppi <askok@...>
- Date: 2009年3月23日 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.
- asko
kathrin_69@gmx.de kirjoitti 20.3.2009 kello 13:10:
Hi,
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
not?
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?
Thank you!
Regards
Joerg