• [^] # Re: euh?!

    Posté par . En réponse au journal Retour d'expérience avec le langage J. Évalué à 3.

    Je me répond à moi même pour me dire que mon exemple était particulièrement stupide, celui ci est bien mieux :

    {- f est ici redéfini à chaque appel de fib car le compilo (ghc 7.6.3 en O0)
     ne détecte pas que f ne dépend pas de n (le parametre de fib),
     en revanche en O2 il le détecte
    -}
    fib n = let f 0 = 1 
     f 1 = 1 
     f n = fib (n - 1) + fib (n - 2)
     in f n
    {- pour fib' on explicite le fait que la définition (complete) de f est connue
     à la compilation, le compilo peut donc optimiser ça en 
     fib' 0 = 1
     fib' 1 = 1
     fib' n = fib' (n-1) + fib' (n-2)
    -}
    fib' = let f 0 = 1
     f 1 = 1
     f n = fib' (n-1) + fib' (n-2)
     in f
    -- sur mon petit test à l'arrache, fib' 40 s'execute en 28 seconde, fib 40 en 55 secondes

    Please do not feed the trolls