|
2007 01 11
|
Tail Calls
Tail calls were recenlty readded as a feature to Io. Here is a small example that compares their performance with normal recursive calls:
count := 10000
r := 100
b := method(x, if(x > r, return x); b(x + 1))
t1 := Date secondsToRun(count repeat(b(1)))
writeln((count*r/t1) round, " recursive calls per second")
b := method(x, if(x > r, return x); tailCall(x + 1))
t2 := Date secondsToRun(count repeat(b(1)))
writeln((count*r/t2) round, " tail calls per second")
writeln("tail calls are ", (t1/t2) round, " times faster")
And the results on a 2Ghz Mac Book Pro:
456328 recursive calls per second
1369613 tail calls per second
tail calls are 3 times faster
Not a huge speed difference for this simple example but for deep recursion, it can save a lot of stack space.
|