io
about
blog
community
docs
downloads

    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.