Subject: Re: newbie: non local exits in CL
From: Erik Naggum <erik@naggum.no>
Date: 1997/07/13
Newsgroups: comp.lang.lisp
Message-ID: <3077774362659109@naggum.no>


* Hrvoje Niksic
| Emacs SHOULD have means of handling this situation without further
| corruption.

the situation I mention comes from Emacs, where user interrupts are very
easy, but the posed problem was intended to be more general.  Kent Pitman
writes that interrupts may occur at any random point in the execution of
code, and suggests ways to ensure that the cleanup-forms are properly
executed, but there is no similar guarantee that they will be executed at
all, since there migt be another interrupt just before they are executed.
(I'm using "evaluate" to refer to Lisp forms, and "execute" to refer to
compiled machine code which _might_ be the interpreter, if any.  I just
invented this distinction, so if it's useless, let me know.)

| Of course, one can wrap a `(let ((inhibit-quit t)) ...' around it, but it
| doesn't strike me as a good general solution.

in Emacs, this is possible, and it is indeed what I do when I really need
those cleanup forms, but there is still the window where establishing the
dynamic binding is susceptible to interrupts.

however, I'm asking for a Common Lisp solution to the same problem.  Unix
has an answer (signal masks), but that's not at the right level, unless, of
course, the Lisp implementation uses maskable software signals to do the
job of exceptions and such, but it could become very messy, and very much
dependent on the implementation.  ... which is precisely why I'm looking
for a clean interface to a complex solution.

#\Erik
-- 
if DUI is "Driving Under the Influence"
then GUI must be "Graphics Under the Influence"