• [^] # Re: Ça pique les yeux

    Posté par (site web personnel) . En réponse au journal Mémorisation partielle de fonction constexpr. Évalué à 2.

    je suis pas persuadé que le gain en performance soit considérable quand on utilise des templates.

    Peut-être dans certaines catégorie d'applications, avec très peu de code et beaucoup de calculs, il y a un gain lié au fait que le compilateur génère du code plus "spécialisé", mais le comportement lié à l'utilisation des templates fait exploser la taille des librairies et le temps de compilation.

    Hors le volume du code instancié en mémoire à un impact très négatif sur les performances (et c'est très très chiant à optimiser).

    L'exemple cité dans ce journal montre un cache statique... C'est quand même plus lisible d'appeler la fonction sur les valeurs à la première utilisation (ou de la remplir au fil de l'eau en stockant le résultat). Il y a bien des façons d'initialiser un cache, quelle est la stratégie du compilateur? que change les options de compilation? Par exemple si j'écris 2 fois la ligne

    memoized<prime_sieve, uint64_t, 0,1,2,3,4,5,6,7,8,90> ps1;
    memoized<prime_sieve, uint64_t, 0,1,2,3,4,5,6,7,8,90> ps2;

    Est-ce qu'il va stocker 2 fois les résultats? Si ces lignes sont dans 2 librairies différentes, que ce passe t-il? (bien sûr qu'il va stocker 2 fois les résultats... )
    Et si le prime_sieve est dans une autre librairie, que ce passe t-il?

    En tout cas la syntaxe est impressionnante.