Is it conceivable to pass (a pointer to) the lisp environment to each
C function, as
opposed to storing it in a thread local storage?
It is conceivable, but it would involve a major rewrite. Right now what I try to do is to minimize the damage by calling ecl_process_env() once per function at most.
There is also one thing I forgot to mention: special variable binding & access is bit too expensive in the multithreaded environment right now -- we use an EQ-hash table instead of an index into a thread-local vector.If Axiom uses a lot of special variables it could profit from rewriting that part with the unfortunate consequence that symbols garbage collection might become more complicated.