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

Dirk Gerrits dirk at dirkgerrits.com
Mon Jan 17 00:00:49 UTC 2005


Helmut Eller <e9626484 at stud3.tuwien.ac.at> writes:

> If the parent thread has a dynamic binding the child will also have a
> dynamic binding and the value will be inherited from the parent.  The
> dynamic binding itself is private to a thread and SETQ-ing it will not
> change the value in other threads.  Only the global (non-dynamic)
> binding is shared.

What the ... ?!?!  

> Creating a thread is probably not very fast, but Common Lisp was not
> designed with concurrency in mind.

Well I assume most special variables will be "at the global binding",
but still...

> Here's an example: 
>
>   (defvar *dvar* 10)
>   
>   (let ((*dvar* 20)
>         (lock t))
>     (sb-thread:make-thread (lambda ()
>                              (print *dvar*)
>                              (setq *dvar* 30)
>                              (setq lock nil)))
>     (loop while lock do (sleep 0.2))
>     (print *dvar*))
>
> This prints 
>
>   20
>   20
>
> in SBCL.  The equivalent (MAKE-THREAD replaced with
> PROCESS-RUN-FUNCTION) in Allegro prints:
>
>   10
>   20

You're absolutely right.  And leaving out the (*dvar* 20) from the LET
prints 
  10
  30
for both Lisps.

Quite frankly, I find SBCL's behaviour baffling.  Let's see what replies
I get to my request for a rationale on sbcl-devel.

Kind regards,

Dirk Gerrits




More information about the slime-devel mailing list