Howdy Dirk,
Dirk Gerrits dirk@dirkgerrits.com writes:
Not only did I find a nice manual, but to my amazement, the following actually works:
CL-USER> (defvar *stop-damnit* nil) *STOP-DAMNIT* CL-USER> (loop until *stop-damnit*) (setq *stop-damnit* t) NIL CL-USER> T
Great job guys! Keep it up. :)
We're glad you like it :-)
I'd just like to ask if there's anything else I need to know about this functionality. Are there any limitations? Dangers? Which Lisp implementations does it work with?
We've added the concept of "communication styles" to incorporate the ideas from that January thread you cited. There's some discussion of them in the "Lisp-side configuration" part of the manual, though I think we should make it more prominent because it's pretty important.
The defaults are:
CMUCL uses a signal handler to process RPCs. If you issue two at once then the second will run "inside" the first on a signal handler, which looks like what your example does.
LispWorks, ACL, and SBCL-with-threads use a separate thread for each request. (Well, almost: the REPL always uses the same thread.)
The rest use either something select()-based or a loop.
Not every style is supported by every backend, but some do support more than one. Exactly which ones is not currently precisely documented :-)
-Luke