James M. Lawrence
James M. Lawrence
Why isn't the closure in your example a good idea? This may be generalized as [`dynamic-lambda`](https://gist.github.com/lmj/0d5f431d670c12db4d03b0ee7c5c62ab), which I've considered adding to lparallel as a convenience utility (the final version would...
There are at least three ways to transfer the values of current dynamic bindings to tasks. The easiest is [`dynamic-lambda`](https://gist.github.com/lmj/0d5f431d670c12db4d03b0ee7c5c62ab), and if you wish to cut down on verbosity you...
Rather than having specials in predicates etc., perhaps you can just make closures and avoid the whole issue? That is, instead of (defvar *foo* 0) (defun predicate (x y) (<...
I thought the purpose here was to amortize the binding of dynamic variables: performing a binding once and then many tasks are executed under that binding. That's what `task-let` does....
Well I wrote `task-let` not really believing that it would be needed, since the overhead of binding dynamic variables is not usually on the radar, especially for web servers. But...
To the issue of performance, it's difficult to believe that dynamically binding a variable has any cost significance compared to what goes on in a web server or most any...
@phmarek After further considering special-variable-heavy cases like hunchentoot, I think you've convinced me that lparallel should provide such functionality. Please see https://github.com/lmj/lparallel/commit/b2e81a6d463642dd73497dec2e97492463ed412b. Your feedback would be valuable. Because it's implemented...
The only way to avoid doing a binding inside each task is to break modularity, as in `task-let`. But the overhead of dynamic bindings is something you almost certainly shouldn't...
`*transfer-specials*` does just what you want: dynamic bindings inside the task are seen by whatever is called inside the task, such as a predicate for `psort`. It doesn't wrap the...
I've pushed a tweak to the transfer-specials branch. Previously `psort` needed `*transfer-specials*` to list itself (it's the only function in lparallel that spawns tasks recursively), but no longer. All recursive...