Tidak, Ruby tidak menjalankan TCO. Namun, itu juga tidak melakukan TCO.
Spesifikasi Bahasa Ruby tidak menjelaskan apapun tentang TCO. Ia tidak mengatakan Anda harus melakukannya, tetapi juga tidak mengatakan Anda tidak dapat melakukannya. Anda tidak bisa mengandalkannya .
Ini tidak seperti Skema, di mana Bahasa Spesifikasi mengharuskan bahwa semua Implementasi harus melakukan TCO. Tetapi ini juga tidak seperti Python, di mana Guido van Rossum telah membuatnya sangat jelas pada beberapa kesempatan (terakhir kali hanya beberapa hari yang lalu) bahwa Implementasi Python tidak boleh melakukan TCO.
Yukihiro Matsumoto bersimpati pada TCO, dia hanya tidak ingin memaksa semua Implementasi untuk mendukungnya. Sayangnya, ini berarti Anda tidak dapat mengandalkan TCO, atau jika Anda melakukannya, kode Anda tidak lagi dapat dibawa ke Implementasi Ruby lainnya.
Jadi, beberapa Implementasi Ruby melakukan TCO, tetapi sebagian besar tidak. YARV, misalnya, mendukung TCO, meskipun (untuk saat ini) Anda harus secara eksplisit menghapus komentar baris di kode sumber dan mengkompilasi ulang VM, untuk mengaktifkan TCO - di versi mendatang ini akan aktif secara default, setelah implementasi terbukti stabil. Mesin Virtual Parrot mendukung TCO secara native, oleh karena itu Cardinal dapat dengan mudah mendukungnya juga. CLR memiliki beberapa dukungan untuk TCO, yang berarti IronRuby dan Ruby.NET mungkin dapat melakukannya. Rubinius mungkin bisa melakukannya juga.
Tetapi JRuby dan XRuby tidak mendukung TCO, dan mereka mungkin tidak mendukung, kecuali JVM itu sendiri mendapatkan dukungan untuk TCO. Masalahnya adalah ini: jika Anda ingin memiliki implementasi yang cepat, dan integrasi yang cepat dan mulus dengan Java, maka Anda harus kompatibel-stack dengan Java dan menggunakan stack JVM sebanyak mungkin. Anda dapat dengan mudah mengimplementasikan TCO dengan trampolin atau gaya penerusan lanjutan eksplisit, tetapi kemudian Anda tidak lagi menggunakan tumpukan JVM, yang berarti bahwa setiap kali Anda ingin memanggil ke Java atau memanggil dari Java ke Ruby, Anda harus melakukan beberapa jenis konversi, yang lambat. Jadi, XRuby dan JRuby memilih untuk menggunakan kecepatan dan integrasi Java melalui TCO dan kelanjutan (yang pada dasarnya memiliki masalah yang sama).
Ini berlaku untuk semua implementasi Ruby yang ingin berintegrasi erat dengan beberapa platform host yang tidak mendukung TCO secara native. Misalnya, saya kira MacRuby akan mengalami masalah yang sama.