Non, Ruby n'effectue pas de coût total de possession. Cependant, c'est aussi ne pas effectuer le coût total de possession.
Le Langage Ruby Spécification ne dit rien sur le coût total de possession. Cela ne veut pas dire que vous avez à faire, mais il ne dis pas que vous ne pouvez pas le faire. Vous ne pouvez pas simplement compter sur elle.
C'est la différence de Régime, où le Langage de Spécification exige que toutes les Implémentations doivent effectuer le coût total de possession. Mais c'est aussi, contrairement à Python, où Guido van Rossum a fait savoir très clairement à plusieurs reprises (la dernière fois, juste une couple de jours il ya) que les Implémentations de Python ne devrait pas effectuer le coût total de possession.
Yukihiro Matsumoto est de la sympathie pour le coût total de possession, il ne veut tout simplement pas la force de toutes les Implémentations de le soutenir. Malheureusement, cela signifie que vous ne pouvez pas compter sur le coût total de possession, ou si vous le faites, votre code ne sera plus portable à d'autres Ruby Implémentations.
Ainsi, certains de Ruby Implémentations effectuer le coût total de possession, mais la plupart ne le font pas. YARV, par exemple, prend en charge le coût total de possession bien que (pour le moment), vous devez explicitement dé-commenter une ligne dans le code source et recompiler le VM, pour activer TCO – dans de futures versions, il va être activée par défaut, après la mise en œuvre s'avère stable. La Machine Virtuelle Parrot prend en charge coût total de possession en natif, donc le Cardinal pourrait assez facilement soutenir, trop. Le CLR a un certain appui pour le coût total de possession, ce qui signifie que IronRuby et Ruby.NET pourrait probablement le faire. Rubinius pourrait probablement le faire, trop.
Mais JRuby et XRuby ne supportent pas le coût total de possession, et ils ne le feront probablement pas, à moins que la JVM elle-même gains de soutien pour le coût total de possession. Le problème, c'est ceci: si vous voulez avoir une mise en œuvre rapide et rapide et une intégration transparente avec Java, alors vous devriez être pile-compatible avec Java et utiliser la JVM pile autant que possible. Vous pouvez très facilement mettre en œuvre coût total de possession avec des trampolines ou explicite continuation passing style, mais alors vous n'êtes plus à l'aide de la JVM de la pile, ce qui signifie que chaque fois que vous voulez l'appeler en Java ou en appel à partir de Java en Ruby, vous devez effectuer un certain type de conversion, qui est lent. Donc, XRuby et JRuby choisi d'y aller avec de la vitesse et de l'intégration Java plus de TCO et les continuations (qui, en gros, ont le même problème).
Cela s'applique à toutes les implémentations de Ruby qui veulent intégrer étroitement avec certains d'accueil de la plateforme qui ne supporte pas le coût total de possession en mode natif. Par exemple, je suppose que MacRuby va avoir le même problème.