lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]




On Wed, Oct 14, 2009 at 1:08 AM, Mark Hamburg <mark@grubmah.com> wrote:
On Oct 13, 2009, at 3:35 PM, TNHarris wrote:


Which could be optimized to use local variables only. However, that does
demonstrate one thing about Lua that I didn't expect. This...

  return something, F()

... isn't a tail-call. I thought it would be, but the comma operator is
enough to prevent the optimization. I think it would be a worthwhile
change to the VM to allow a tail-call in this case.

This can't be a tail call because it has to process the results of F() to combine them with something before returning further up the chain.

So, in this case, you might actually want to fear recursion.

Basically, you want to write map and filter in C because it will be much easier to work with varargs efficiently in C.

Mark


Well, you _could_ make this a special case that supported tail recursion, by offsetting the stack for each prepended argument:
return a, foo() or return a, b, foo(), et.c.

The cases that can't be tail called is stuff like: return 1 + foo()