From: <don...@is...> - 2009-11-05 19:32:37
|
I notice in recent clisp-cvs Digests changes to bind -per-thread "non-global" special variables. I've now removed the defvar I had to add because such vars had not been bound per thread, and just want to report that the code seems to be working. I guess this can now be removed from the doc for make-thread: Note that symbols should be global SPECIAL variables (e.g., declared as such by DEFVAR, DEFPARAMETER, etc). BTW, I assume that a variable in this list is bound as a special even if it was never declared as such, similar to progv, right? I also noticed in the same patch changes to MT:*DEFAULT-SPECIAL-BINDINGS* which I thought were strange. Why is gensym counter in that list? This is going to make debugging more difficult. I suggest instead that gensym should use its own critical section. I assumed that the initial thread is created with -per-thread bindings from MT:*DEFAULT-SPECIAL-BINDINGS* but experimentation suggests otherwise. So I guess in that particular thread a plain setf can be used to change the "global" values of variables. This might be worth mentioning in the doc. What do you think of trading (MT:SYMBOL-VALUE-THREAD symbol thread) for (MT:GLOBAL-VALUE symbol) and making SYMBOL-VALUE mean the -per-thread value if there is one? My goal here is for code using SYMBOL-VALUE and originally written for non threaded implementations to run in a new thread without modification. I think that this proposal corresponds better to the normal meaning of symbol-value than the current implementation. |