Re: Parsec parser library...

"David McClain (as dbm at refined-audiometrics dot com)" <[email protected]> Mon, 27 Jul 2026 08:29:58 -0700
Newsgroups gmane.lisp.lispworks.general
Message-ID <[email protected]>
And so.. .with TLET, we can now make Parseq thread-safe by changing just one line from using a LOL LET, to using a LOL TLET.



> On Jul 27, 2026, at 08:28, David McClain <[email protected]> wrote:
> 
> Looks like you are similar to mine: Keeping it looking like a LOL, although I do it with TLET, instead of the arg.
> 
> I use a SYMBOL-MACROLET to keep the syntax looking like a lexical binding in use. 
> 
> THe one thing I ran into immediately was that you have to be sure that SMP is actually running, in order to use MP:PROCESS-PRIVATE-PROPERTY. I now look for that exceptional case, and resort to a LOL holding hash table, if needed. I apparently did need it for my number parsing while loading up my normal working image.
> 
> 
> 
>> On Jul 27, 2026, at 07:24, Tim Bradshaw (as tfb at tfeb dot org) <[email protected]> wrote:
>> 
>> On 27 Jul 2026, at 06:45, David McClain (as dbm at refined-audiometrics dot com) <[email protected]> wrote:
>>> 
>>> So we need some kind of thread-local version of Let-Over-Lambda.
>> 
>> For things like this I tend to use some variant of
>> 
>> (defun make-tval (&optional (default nil))
>> (let ((table (make-hash-table :weak-kind :key)))
>>   (lambda (thread &optional (nv nil nvp))
>>     (if nvp
>>         (setf (gethash thread table) nv)
>>       (gethash thread table default)))))
>> 
>> (declaim (inline tval-value (setf tval-value)))
>> 
>> (defun tval-value (tval &optional (thread *current-process*))
>> (funcall tval thread))
>> 
>> (defun (setf tval-value) (new tval &optional (thread *current-process*))
>> (funcall tval thread new))
>> 
>> Assuming hash-table access is thread-safe this is OK I think.  And then you do something like.
>> 
>> (let ((something (make-tval <default>)))
>> (lambda (...)
>>   ... (tval-value something) ... (setf (tval-value something) ...) ...))
>> 
>> I like it that the solution is itself let over lambda.
>> 
>> 
>> _______________________________________________
>> Lisp Hug - the mailing list for LispWorks users
>> [email protected]
>> http://www.lispworks.com/support/lisp-hug.html
> 


_______________________________________________
Lisp Hug - the mailing list for LispWorks users
[email protected]
http://www.lispworks.com/support/lisp-hug.html