Ken Raeburn wrote:
On Oct 6, 2009, at 16:05, Daniel Kraft wrote:
If any such value is hit when reading/setting a variable, we do the
needed stuff for handling aliases/foolocal variables instead of doing
the operation directly. While this should work, I fear that it hits
performance once again... But I do not see how we could implement
aliases and foolocal variables without checking on each variable
access if it is some special variable or not? Maybe there we could
add VM support if necessary.
In the multithreaded case, I think the checks might need to be done
every time -- one thread could call make-variable-foo-local while
another thread is in between two accesses to the variable within a
function. And you also need to watch out for updating what was a
non-foo-local variable in one thread while another makes the variable
foo-local...
I also fear that we probably need to examine each variable on each
access for being something "special" or not (like the current void
check). But with doing so it should be quite easy (and also robust) to
implement aliases and foolocals, I've already some ideas and will work
them out soon.
For now I will change the #:disable-viod-check option to
#:no-special-var which disables *all* such special checks on access for
sake of performance; but I'll also see how much this really affects
timings. As a further idea, I think we could implement such "special"
variables in the VM more or less easily (and without being too special
about elisp and aliases/foolocals) to get better performance of variable
access again, maybe I'll investigate that, also.
Yours,
Daniel
--
Done: Arc-Bar-Cav-Ran-Rog-Sam-Tou-Val-Wiz
To go: Hea-Kni-Mon-Pri