Функциональные языки приводят к использованию рекурсии для решения множества проблем, поэтому многие из них выполняют оптимизацию Tail Call Optimization (TCO). TCO вызывает вызовы функции из другой функции (или самой себя, и в этом случае эта функция также известна как Tail Recursion Elimination, которая является подмножеством TCO), в качестве последнего шага этой функции, чтобы не требовать новый стек стека, что уменьшает накладные расходы и использование памяти.
Ruby, очевидно, "заимствовал" ряд понятий из функциональных языков (lambdas, функции, такие как карта и т.д. и т.д.), что заставляет меня любопытно: оптимизирует ли Ruby оптимизацию вызовов?