Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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
    }


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




Consider applying for YC's Winter 2027 batch! Applications are open till November 2.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: