Ні, Рубі не виконує TCO. Однак він також не виконує TCO.
Специфікація мови Ruby нічого не говорить про TCO. Там не сказано, що ти повинен це робити, але також не сказано, що ти не можеш цього зробити. На це просто не можна покладатися .
Це на відміну від схеми, де Мовна специфікація вимагає, щоб усі реалізації мали виконувати TCO. Але це також несхоже на Python, де Гвідо ван Россум неодноразово чітко давав зрозуміти (востаннє всього пару днів тому), що реалізації Python не повинні виконувати TCO.
Юкіхіро Мацумото прихильно ставиться до TCO, він просто не хоче змушувати всі Реалізації підтримувати його. На жаль, це означає, що ви не можете покладатися на TCO, або якщо ви це зробите, ваш код більше не буде переноситися до інших реалізацій Ruby.
Отже, деякі реалізації Ruby виконують TCO, але більшість цього не робить. Наприклад, YARV підтримує TCO, хоча (на даний момент) вам потрібно явно розкомментирувати рядок у вихідному коді та перекомпілювати VM, щоб активувати TCO - у наступних версіях він буде ввімкнений за замовчуванням, після того, як реалізація докаже стабільний. Віртуальна машина Parrot підтримує TCO власним чином, тому кардинал також міг би її легко підтримати. CLR має певну підтримку TCO, а це означає, що IronRuby та Ruby.NET могли б це зробити. Можливо, це міг би зробити і Рубіній.
Але JRuby та XRuby не підтримують TCO, і, мабуть, не підтримуватимуть, якщо JVM не отримає підтримки TCO. Проблема полягає в наступному: якщо ви хочете мати швидку реалізацію та швидку та безперебійну інтеграцію з Java, то ви повинні бути сумісними зі стеком з Java і використовувати стек JVM якомога більше. Ви можете досить легко реалізувати TCO на батутах або явному стилі передачі продовження, але тоді ви більше не використовуєте стек JVM, що означає, що кожного разу, коли ви хочете зателефонувати в Java або зателефонувати з Java у Ruby, вам потрібно виконати якусь перетворення, що відбувається повільно. Отже, XRuby та JRuby вирішили піти зі швидкістю та інтеграцією Java над TCO та продовженнями (які в основному мають однакову проблему).
Це стосується всіх реалізацій Ruby, які хочуть щільно інтегруватися з якоюсь платформою хосту, яка не підтримує TCO. Наприклад, я думаю, у MacRuby буде така сама проблема.