[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: tail call efficiency (was: Modified allwords() function)
- From: Mike Pall <mikelu-0505@...>
- Date: Tue, 17 May 2005 15:34:11 +0200
Hi,
Wim Couwenberg wrote:
> On a related note, I wonder if it would be at all possible to optimise
> tailcalls any further?
Yes. The current code for OP_TAILCALL always adds a new call frame.
When it finds that it was a Lua function, it undoes that by moving
everything one frame down. Doing this in one step requires quite
a bit of code restructuring, though. It should be faster, but I'm
not sure by how much.
If someone wants to take on this: merge/simplify the code from
luaD_precall with the code after OP_TAILCALL in luaV_execute.
But you need to be careful: there are some subtle interactions
with stack slots and call frames for generic callables and for
vararg functions.
> The recursive sumr takes about 2.5 times more time than the iterative
> sumi in 5.0.2. (In 5.1-w5 both are quicker, but the iterative version
> more so than the recursive one...) If tailcalls get cheaper, they would
> gain in strength as "structured goto's".
I don't think we can get generic tailcalls that much faster.
Speeding up simple recursive functions is doable with a lot of help
from the compiler (essentially converting the call to a jump).
But this won't help with the structured goto use case where the
target cannot be derived statically (most of the time).
Bye,
Mike