James M. Lawrence
James M. Lawrence
Well `:bindings` _can_ use the values from the thread calling `make-kernel`, but it's more general than that since the values for the bindings are obtained from `eval` in each worker...
Yes I had been thinking about `try-force` -- it's not in yet because the timeout option in bordeaux-threads is relatively recent and lparallel doesn't yet require it. Since futures can...
This requires an additional slot for a condition variable in the future struct, which may be another reason that I avoided it. As with queues the cvar would be lazily...
lparalel.queue is largely similar to sb-concurrency's mailbox while remaining portable, as it rests upon the functionality of bordeaux-threads. For gates, I would avoid adding it to lparallel directly. Since it...
Sorry for the delay. I think this is a good idea, though I'd prefer a name that makes it clearer what is happening -- maybe `submit-untracked-task` or `submit-unchanneled-task` or `submit-task/no-channel`?...
I think I would go with `submit-bare-task`. There are complications with error handling which remind me that I've visited this issue before. The `transfer-error` restart, which is bound at the...
Interesting, all tests pass after replacing in kill.lisp (destroy-thread (thread worker)) with (bt:interrupt-thread (thread worker) (lambda () (invoke-restart 'transfer-error (make-condition 'task-killed-error)))) For each lisp implementation I would have to check...
Ha, you're right: there it is in kernel-util.lisp: `steal-until-receive-result`. I completely forgot that I fixed that. There's even `lparallel-test::cognate-steal-test`. Thanks for the info!
It's come up before, and I have a couple private branches which have `defmacro with-tasks-flushed-on-abort (&key kill &body body)`. The first method of doing this is more or less what...
Yes, successively wrapping lambdas around tasks is the natural way to do this. There is already one such lambda wrapping in lparallel, namely the rebinding of the handlers established with...