Besides opinions from the community, I'm hoping for some word from
the
Lua authors like one of "working on a solution", "Lua doesn't need
improvement here", "see the need for it but don't have a design in
mind", etc.
Later on this discussion David Manura wrote:
Now, personally, in practice, I've only found myself wanting this
time
of capability in Lua on a few occasions (but perhaps others with
different applications will have greater need for it):
- closing file handles upon exceptions
- closing COM objects on exceptions
- releasing native OS handles on exceptions, e.g. as once in
http://lua-users.org/wiki/SerialCommunication
- and if I used Lua more for database and socket work, quite
possibly that too.
I personaly agree with him. In all cases the key point is "on
exceptions".
He then goes on:
Workarounds I've used are explicit collectgarbage() calls judiciously
placed, adding pcalls (often ugly, affects error tracebacks, and can
conflict with coroutines), and ignoring the problem (sometimes
acceptable).
Maybe we could avoid these workarounds by forcing a full garbage
collection
upon errors. This could be added to the core or through the libraries.
(That is, pcall and other library functions that do protected calls
should
call lua_gc in case of errors, and user's C code would be recommended
to do the same.)
That is, all resources should have an explicit "close" method plus
a finalizer that releases it. (Like files from the io library.) In
regular use, the control flow should call the close method for prompt
release. On exceptions, a full collection would call the finalizers.
If needed, we could add to the library a "generic resource":
a = newresource(func) -- creates something
a:close() -- calls 'func'
If 'a' is collected before being closed, its finalizer calls 'func'.
-- Roberto