Hacker News new | ask | show | jobs
by yror10 4408 days ago
If you write ruby and want TCO put this at the top of your .rb file:

    RubyVM::InstructionSequence.compile_option = {
      :tailcall_optimization => true,
      :trace_instruction => false
    }
2 comments

Why is it optional? What is the benefit of having it disabled by default if there is a decent implementation?
They disabled it for error reporting/debugging reasons. Because you don't need to create a new stack frame, you eliminate that information in the backtrace.
I've seen at least one paper that shows a way to fix this... hm.
A lot of people prefer having complete, explicit stacks for debugger use over having tail calls.
loops don't leave a stack trace either...
And also apply this patch, if you're using MRI (the C implementation, and the most common Ruby runtime): https://gist.github.com/plexus/11201946