Email list hosting service & mailing list manager

GC safety and return values Tom Lord (22 Dec 2003 20:58 UTC)
Re: GC safety and return values Jim Blandy (22 Dec 2003 21:26 UTC)
Re: GC safety and return values Tom Lord (22 Dec 2003 21:47 UTC)
Re: GC safety and return values tb@xxxxxx (22 Dec 2003 22:27 UTC)
Re: GC safety and return values Jim Blandy (22 Dec 2003 22:28 UTC)

Re: GC safety and return values Jim Blandy 22 Dec 2003 22:24 UTC

Tom Lord <xxxxxx@emf.net> writes:
> I understand and appreciate your negative experience with GCPRO in
> emacs; I even agree that an "explicitly-freed reference object"
> approach evades that problem (assuming I infer correctly what you
> mean by that); but....

I explained it in the very first post; it's in the archives.

> I don't think there's anything seriously wrong with the GC_PROTECT
> approach.
>
> Anecodtally: After I forked guile to make systas I made a little
> `lint' program -- it happened not to be for GC issues but for critical
> section demarcations.   It had to do flow analysis similar to what the
> GC issues would take.   It could output "right", "wrong" and "can't be
> sure" for a given function.   Worked like a charm and only took a
> couple of weeks --- very simple-minded flow analysis was sufficient.
>
> GCPRO needs additional tools -- and maybe some code cleanups in Emacs
> (if it hadn't been abandoned) -- but it's not nearly as losing as
> you've made it out to be in the past.

When I described GCPRO as impossible to maintain, I hadn't imagined
the sort of tools you came up with later.  They're a great idea, and
I'm sure they'd help a lot.  Emacs does a lot of "optimization", of
the "I know this object is still referenced, so I'm not going to GCPRO
it" variety --- for example, you GCPRO the variable pointing to the
head of the list, but not the variable that walks along the list's
spine --- which really cries out for some sort of mechanical
verification.

The points I made in the very first post to this SRFI's discussion
list still apply, though --- GCPRO cannot be made to work in
multi-threaded contexts.