• [^] # Re: 4Clojure

    Posté par . En réponse à la dépêche Sortie de Clojure 1.6. Évalué à 3.

    À propos de la JVM : il y a quand même un petit truc spécifique (enfin, il y a peut-être le même problème pour la machine virtuelle Microsoft) concernant la récursion terminale (Tail Call Optimization)

    La récursion terminale ne pose aucun problème sur la JVM. C'est un choix du langage ou non de l'implémenter. Scala le fait pas exemple.

    Pour le TCO par contre ce n'est actuellement pas possible sur la JVM. Ca n'a jamais été une priorité et ca n'a donc pas été fait. En gros les problèmes à résoudre sont:
    - La spec actuelle dit qu'il ne faut pas jouer avec la stack frame courante, c'est pourtant ce que le TCO fait
    - On perd les stack trace. Ce n'est pas un problème en soit mais ca change un peu de ce qui existe actuellement
    - Actuellement certains mécanisme repose sur les stack frame notament le bytecode verifier et les security manager. Ca peut se résoudre mais ca demande du travail.

    Donc en gros oui la JVM à clairement des limites pour le TCO. Maintenant en pratique ce n'est pas non plus extrêment bloquant il y a souvent des alternatives.

    John rose avait bossé sur un patch et Oracle en parlait dans sa roadmap à long terme en 2012 mais je ne sais pas si c'est toujours vivant ou pas:
    https://wiki.openjdk.java.net/display/mlvm/TailCalls
    http://wiki.jvmlangsummit.com/Why_Tailcalls