È necessario passare l'attuale *standard-output*
al nuovo thread in qualche modo, quindi nella funzione di quel thread, è possibile associare *standard-output*
a tale valore.
Le attuali implementazioni comuni di Lisp rendono i collegamenti dinamici locali a thread e SBCL is one of them.
(sb-thread:make-thread ;; thread function
#'(lambda (standard-output)
;; thread-local dynamic binding of special variable
(let ((*standard-output* standard-output))
...))
;; thread function argument, provided by the current thread
:arguments (list *standard-output*))
Nota che avrei potuto chiamato argomento della funzione di filo *standard-output*
e poi non avrei bisogno del let
, dal momento che il binding dinamico è stato fatto a ingresso della funzione. Ma penso che i legami dinamici dovrebbero essere espliciti ed evidenti, nonostante i paraorecchie che circondano la convenzione di denominazione delle variabili speciali.