On 2011-04-18, at 13:40, Louis-Philippe wrote:

> it seems like fib(50000) is not only too big for MRI ruby, but also Python
> and Lua and Rubinius panic on it...
There was some traffic on the Python mailing list maybe a year ago, it seems that Python will not implement TR optimization in the near (or likely far) future; Python's BDFL seems unconvinced of its value. AFAIK no TR PEP has ever been written. Lua's TR is very specific, I believe the recursive call  has to stand as a statement on its own. When I tried this with Lua 5.2.0 (alpha), I saw every evidence of TR optimization.

> function fib(n)
>>   local function fib1(n, a, b)
>>     if n == 0 then
>>       return b
>>     else
>>       a, b = b, a + b
>>       return fib1(n - 1, a, b) 
>>     end
>>   end
>>   return fib1(n, 0, 1)
>> end
> print(fib(1), fib(3), fib(10), fib(100), fib(1000), fib(10000))
1	3	89	5.7314784401382e+20	7.0330367711423e+208	inf
> print(fib(1000000))
inf

TR optimization can't easily be done on the JVM (and probably on .NET), because it interferes with the code verification process the JVM does. Accordingly, I doubt TR can be made mandatory for Ruby implementations, which is what I'd like. However, a boolean function or built-in constant that says whether it's performed would be very nice, so one can test this before running a program.