when GC is permitted Jim Blandy 07 Jan 2004 22:01 UTC
I gather that your current inclination is to preserve the requirement
that GC may only take place during calls to specially marked API
functions. Thus, collection must wait until all active C calls have
called a marked API function. Is that correct?
If the system is mostly a Scheme world, which makes occasional calls
to C helper functions, then this is not a very serious restriction.
Threads will usually be executing Scheme code, or spending short
periods in C code that makes frequent calls to SRFI-50 functions (or
could be written to do so), so it's not hard to keep the waits short.
However, I would like to be able to use Scheme as an extension
language for existing C programs that use multiple system threads, and
I would like SRFI-50 to provide what I need to implement the C/Scheme
glue for this.
Similarly, for existing multi-threaded C programs that have C plug-in
interfaces, I would like to be able to implement plug-ins in Scheme,
and handle the Scheme / plug-in glue using SRFI-50.
In both of those cases, I have control over only a small portion of
the C code; threads will often spend the majority of their time in C
code I didn't write, which never calls SRFI-50 API functions. So when
a thread wants to perform a collection, I don't have enough control
over the situation to ensure that all other threads will eventually
reach a SRFI-50 function.
So it seems to me that the requirement that all C calls must be in
marked SRFI-50 functions seriously restricts SRFI-50's usefulness in
these scenarios. It's my impression that most developers would
consider it "not useful". (I admit that's just an impression.)
The specific applications I have in mind that I'd like to extend in
Scheme are Mozilla and Apache. Last I knew, Apache uses worker
threads on some systems, and distinct worker processes on others.
Mozilla is always multi-threaded.
I recognize that this is really a question about the scope of SRFI-50,
and I certainly respect the editors' right to set that scope. But
really, any question about the presence or absence of a feature is a
question of scope --- for example, if I understand Marc Feeley's post,
his FFI doesn't permit access to Scheme objects at all. So while I
think some posters have been a bit pushy, I still feel it's central to
the discussion where the boundaries should rest.