"Stackless" XEmacs?
Glynn Clements
glynn at gclements.plus.com
Thu May 1 19:51:53 EDT 2008
Jerry James wrote:
> > > 1. You have to choose between two painful alternatives.
> > > a. [...]
> >
> > > b. A scheduler that only runs inside of well-defined functions, meaning
> > > that a given stack can hog the CPU for arbitrary amounts of time.
> >
> > It's not obvious to me that this wouldn't be a big win in XEmacs.
> > This isn't a realtime OS where you need to discipline badly-behaved
> > threads; it's a single-user application where judicious use of
> > cooperative multithreading might permit big wins from a few tweaks.
>
> Yes, but we already do that! That's what the select()/poll() driven
> event loop is all about: find out what I/O is ready to go, then run
> the handler to drive it. There are some places where we don't follow
> discipline and allow the process to block rather than defer activity
> to a later iteration of the event loop.
If your code is in the middle of a complex loop or recursion with a
lot of local state, it's a lot easier to call a hypthothetical "yield"
function than to turn your code inside-out so that it works as a
process filter.
The situation is analogous to converting a recursive-descent parser to
the pushdown automaton form created by e.g. yacc. The latter is a much
better fit for event-driven I/O, but who would write one by hand?
> > Because threads are hard. I could see using threads for certain
> > subsystems (eg, redisplay, and assuming Marcus and Olivier are up for
> > it, GC), but having true threads in the Lisp interpreter will be hard
> > (unless we're willing to replace the whole thing).
>
> Yes, threads are certainly hard. I'm not necessarily suggesting we
> dive into using them. I'm suggesting that the stackless approach is
> (a) a lot more work than fixing our discipline with respect to our
> current architecture for about the same benefit; and (b) a lot less
> work but with much less benefit than going to a threaded architecture.
AFAICT, the main issue is making dynamic scope and threads coexist.
Having a separate stack for each thread doesn't help much when all of
your local variables are just pointers to global symbols.
--
Glynn Clements <glynn at gclements.plus.com>
More information about the XEmacs-Beta
mailing list