Không, Ruby không thực hiện TCO. Tuy nhiên, nó cũng không thực hiện TCO.
Đặc tả ngôn ngữ Ruby không nói gì về TCO. Nó không nói rằng bạn phải làm, nhưng nó cũng không nói rằng bạn không thể làm được. Bạn chỉ không thể dựa vào nó.
Đây là không giống như Đề án, nơi mà các kỹ thuật ngôn ngữ đòi hỏi rằng tất cả Triển khai phải thực hiện TCO. Nhưng nó cũng không giống như Python, nơi mà Guido van Rossum đã nói rất rõ ràng trong nhiều lần (lần gần đây nhất chỉ vài ngày trước) rằng Triển khai Python không nên thực hiện TCO.
Yukihiro Matsumoto có thiện cảm với TCO, anh ấy chỉ không muốn buộc tất cả các Triển khai phải hỗ trợ nó. Thật không may, điều này có nghĩa là bạn không thể dựa vào TCO, hoặc nếu bạn làm vậy, mã của bạn sẽ không còn khả dụng cho các Triển khai Ruby khác.
Vì vậy, một số Triển khai Ruby thực hiện TCO, nhưng hầu hết thì không. YARV, ví dụ, hỗ trợ TCO, mặc dù (hiện tại) bạn phải bỏ ghi chú rõ ràng một dòng trong mã nguồn và biên dịch lại VM, để kích hoạt TCO - trong các phiên bản tương lai, nó sẽ được bật theo mặc định, sau khi triển khai chứng minh ổn định. Máy ảo Parrot hỗ trợ TCO nguyên bản, do đó Cardinal cũng có thể dễ dàng hỗ trợ nó. CLR có một số hỗ trợ cho TCO, có nghĩa là IronRuby và Ruby.NET có thể làm được điều đó. Rubinius cũng có thể làm được.
Nhưng JRuby và XRuby không hỗ trợ TCO và có thể họ sẽ không hỗ trợ, trừ khi bản thân JVM nhận được hỗ trợ cho TCO. Vấn đề là ở đây: nếu bạn muốn triển khai nhanh, tích hợp nhanh và liền mạch với Java, thì bạn nên tương thích với Java và sử dụng ngăn xếp của JVM càng nhiều càng tốt. Bạn có thể khá dễ dàng triển khai TCO với trampolines hoặc kiểu truyền tiếp tục rõ ràng, nhưng sau đó bạn không còn sử dụng ngăn xếp JVM nữa, có nghĩa là mỗi khi bạn muốn gọi vào Java hoặc gọi từ Java vào Ruby, bạn phải thực hiện một số loại chuyển đổi chậm. Vì vậy, XRuby và JRuby đã chọn đi với tốc độ và tích hợp Java qua TCO và tính liên tục (về cơ bản có cùng một vấn đề).
Điều này áp dụng cho tất cả các triển khai của Ruby muốn tích hợp chặt chẽ với một số nền tảng máy chủ không hỗ trợ TCO nguyên bản. Ví dụ, tôi đoán MacRuby sẽ gặp vấn đề tương tự.