On Mon, Aug 1, 2011 at 5:32 AM, Matthew Mondor <span dir="ltr"><<a href="mailto:mm_lists@pulsar-zone.net">mm_lists@pulsar-zone.net</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

I audited the symbol.d and package.d code today, and wrote down some<br>
notes about possible future improvements.<br></blockquote><div><br>It would be nice if someone did this for the whole of the Hyperspec :-)<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


Although GENSYM is more often used in the compile phase (which is<br>
single-threaded, at least for now), it can also be used by<br>
multithreaded user code at runtime.  Because GENSYM is standard,<br>
it's unlikely that user code would expect to have to use a lock to<br>
avoid its internal race conditions around *GENSYM-COUNTER*.  So<br>
possibly that GENSYM should implicitely use a lock, held the whole time<br>
between the getf and setf.<br></blockquote><div><br>Doesn't the fact that the user may change *gensym-counter* invalidate the purpose of the lock? The compiler itself sets *gensym-counter* to 0, binding it locally so there may be no race condition there, since the symbols are never interned.<br>

 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I wondered if a lock was also required for *PACKAGE* access in<br>
IN-PACKAGE, but I'm unsure, as theoretically every thread has its own<br>
local *PACKAGE*; but I'm unsure where this binding gets created, I only<br>
see the ECL_SETQ to set the new package, I might have missed a LET-like<br>
binding creation operation.  I see a ecl_bds_bind() call for<br>
*current-process* only in process.d.  There's some bindings related<br>
code in process_alloc() but I don't think it handles this either.<br></blockquote></div><br>This is indeed more important: what bindings should become local for a thread by default. Currently the list of variables that become thread-local is by default empty. Maybe we should at least add *package* to it? Maybe also create a global binding with the default list of variables so that each invocation of make-process uses it by default? What do you think?<br>

<br>Juanjo<br clear="all"><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com" target="_blank">http://juanjose.garciaripoll.googlepages.com</a><br>