[slime-devel] Re: *read-default-float-format* with C-c C-k, , load-system, etc.

Helmut Eller e9626484 at stud3.tuwien.ac.at
Mon Jan 10 17:36:17 UTC 2005


Dirk Gerrits <dirk at dirkgerrits.com> writes:

> Something like this?
>
> #+:sb-thread
> (when (find-package :swank-loader)
>   (setf (sb-thread::symbol-value-in-thread *read-default-float-format*
>                                            (the-right-thread))
>         'long-float))
>
> Sounds reasonable, but I haven't found the right thread yet.  Any SLIME
> developers who can help?

The thread tree looks like this:

  inferior-lisp (== SBCL REPL)
   \_ socket server [usually dead]
       \_ reader thread
       \_ repl thread
       \_ control thread
           \_ worker thread1  
           \_ worker thread2 ...

REPL command are executed by the repl thread.  For the other request,
a new worker thread is created by the control thread. So,
the-right-thread(s) are probably the control thread and the repl
thread.

sb-thread::symbol-value-in-thread doesn't appear to be setf-able here,
but 

  (sb-thread:interrupt-thread
    (swank::connection.control-thread swank::*emacs-connection*)
    (lambda () (setq *read-default-float-format* 'long-float)))

seems to work.

The issue came up before but I still don't know what the proper fix
is.  SBCL is the only Lisp with the
inherit-dynamic-variables-in-new-threads semantics.  Implementing
non-inheriting seems to be difficult in SBCL and implementing
inheriting is difficult in the other Lisps.  We could probably offer
something like swank:setq-default to set initial values in the
worker threads.  Other ideas?

Helmut.



More information about the slime-devel mailing list