아니요, Ruby는 TCO를 수행하지 않습니다. 그러나, 그것은 또한하지 않습니다 하지 총 소유 비용 (TCO)을 수행합니다.
Ruby 언어 사양에는 TCO에 대한 내용이 없습니다. 그것은 당신이 그것을해야한다고 말하는 것이 아니라 당신 이 그것을 할 수 없다는 것을 또한 말하지 않습니다 . 당신 은 그것에 의지 할 수 없습니다 .
언어 사양이 곳은 계획, 달리 요구 하는 것이 모든 구현이 있어야 총 소유 비용 (TCO)을 수행합니다. 그러나 Guido van Rossum이 Python 구현 이 TCO를 수행 해서는 안된다는 점을 여러 차례 (마지막 며칠 전)에 매우 명확하게 밝힌 Python 과도 다릅니다 .
Yukihiro Matsumoto는 TCO에 공감하며 모든 구현이이를 지원 하도록 강요하고 싶지는 않습니다 . 안타깝게도 이는 TCO에 의존 할 수 없다는 것을 의미합니다. 그렇지 않으면 코드를 더 이상 다른 Ruby 구현으로 이식 할 수 없습니다.
따라서 일부 Ruby 구현은 TCO를 수행하지만 대부분은 수행하지 않습니다. 예를 들어 YARV는 TCO를 지원하지만 (현재로서는) TCO를 활성화하기 위해 소스 코드의 한 줄을 명시 적으로 주석 해제하고 VM을 다시 컴파일해야합니다. 이후 버전에서는 구현이 입증 된 후 기본적으로 설정 될 것입니다. 안정된. Parrot Virtual Machine은 기본적으로 TCO를 지원하므로 Cardinal도이를 매우 쉽게 지원할 수 있습니다. CLR은 TCO를 일부 지원하므로 IronRuby와 Ruby.NET이이를 수행 할 수 있습니다. Rubinius도 그렇게 할 수 있습니다.
하지만 JRuby와 XRuby는 TCO를 지원하지 않으며 JVM 자체가 TCO를 지원하지 않는 한 지원하지 않을 것입니다. 문제는 이것입니다. 빠른 구현을 원하고 Java와 빠르고 원활하게 통합하려면 Java와 스택 호환이 가능하고 JVM 스택을 가능한 많이 사용해야합니다. 트램폴린 또는 명시 적 연속 전달 스타일로 TCO를 매우 쉽게 구현할 수 있지만 더 이상 JVM 스택을 사용하지 않습니다. 즉, Java를 호출하거나 Java에서 Ruby로 호출 할 때마다 일종의 수행해야합니다. 느린 변환입니다. 따라서 XRuby와 JRuby는 TCO 및 연속성 (기본적으로 동일한 문제가 있음)보다 속도 및 Java 통합을 선택했습니다.
이는 기본적으로 TCO를 지원하지 않는 일부 호스트 플랫폼과 긴밀하게 통합하려는 Ruby의 모든 구현에 적용됩니다. 예를 들어, MacRuby도 같은 문제를 겪을 것 같습니다.