|
From: | Daniel Kraft |
Subject: | Re: Elisp performance |
Date: | Tue, 04 Aug 2009 12:54:26 +0200 |
User-agent: | Thunderbird 2.0.0.0 (X11/20070425) |
Andy Wingo wrote:
Daniel Kraft <address@hidden> writes:Lambda arguments are still always dynamically bound, which is quite a pity as it inhibits tail-call optimization;Indeed, a pity. Though self-tail calls can be optimized... still, irritating.
Yes, but I fear this will complicate the compiler a lot and does not gain that much -- for anyone who wants to use tail-calls, he can do so with the always-lexical feature, and existing code should not depend on tail-calls anyway as Emacs seems not to do it.
The main thing I believe that makes a fluid different from a normal variable is that a fluid can have a different value in each thread - which is not relevant to Elisp.True. Of course, it would be a nice thing to give to elisp -- I mean, currently in Emacs variables have one value per thread as well, it's just that there's only one thread. So if we give Emacs the capability to run multiple threads (as we should IMO), we should provide thread-local values.
I like the idea, too. In this case, we should stick with the fluids. I also thought about giving the user the choice of which "dynamic binding" facility to use, and it would not be that much of a mess, I think; maybe I'm going to give dynamic binding without fluids and just dynamic-wind a try to see how much performance this really gives.
Cheers, Daniel -- Done: Arc-Bar-Cav-Ran-Rog-Sam-Tou-Val-Wiz To go: Hea-Kni-Mon-Pri
[Prev in Thread] | Current Thread | [Next in Thread] |