[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: newproxy()
- From: Phoenix Sol <phoenix@...>
- Date: Sat, 21 Nov 2009 11:52:52 -0600
On Sat, 21 Nov 2009 12:19:09 +0100
Florian Weimer <fw@deneb.enyo.de> wrote:
> > Is there any tangible notion of what is to become of newproxy() ?
> >
> > I found it useful today, to add some implicit finalization to
> > objects implemented with tables. (After feeling surprised that
> > '__gc' is for userdata only.)
>
> __gc is called asynchronously at rather unpredictable points in the
> program. A C extension writer can take that into account (and can
> actually do some useful work without invoking the garbage collector),
> but it's more difficult to do this in Lua code. It's also not
> possible to create a critical section which locks out the garbage
> collector.
>
> It might be better if there was some sort of __gcqueue metatable slot
> which referred to an array. When the object becomes unreachable, it
> is added to the __gcqueue array. Lua functions which interact with
> these objects would process the queue. This way, the side effect
> would occur at well-defined points in the program.
I have to confess that my usage of newproxy() was a bad idea.
In general, because it's better to do things explicitly rather than
implicitly; and more specifically, because I was doing something that
added unnecessary overhead: calling epoll_handle:del(fd) before
collecting a (wrapped) nixio socket object. (Epoll removes closed
descriptors anyway, so it's a wasted system call.)
Also, (while I'm bearing confessions) I've realized that I was getting
really carried away with metatables. I had pretty much *everything*
wrapped in layers of metatable lookups, and have found that stripping
it all away has given a significant speedup. I'm feeling kind of burned
by OOP indoctrination. Please don't tell Steve Dekorte ;)
--# end diary entry