• [^] # Re: Structures non mutables performantes

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

    What every programmer should know about memory est une lecture vivement conseillée dans ce cas.

    Cela à l'air on ne peut plus complet ! :-O
    N'étant pas programmeur, je mets cela de côté et le lirai quand j'aurais le temps par pure curiosité intellectuelle. C'est fou ce que la technique évolue, il n'y a pas longtemps j'ai relu l'article de Turing sur son test de l'imitation et l'on y lit :

    Dans le système nerveux, les phénomènes chimiques sont au moins aussi importants que les phénomènes électriques. Dans certains ordinateurs le système de mémorisation est principalement acoustique.

    Je n'ose imaginer leur capacité mémoire et les temps de réponse. :-P

    Pour la structure et ses performances, cela doit surtout dépendre de son usage. Dans le pire des cas concevables, un vecteur est totalement distinct du contenu du vecteur modifiable partagé et dans ce cas, il faudrait qu'il ne se trouve pas à plus de n Diff de ce dernier (où n est la taille des vecteurs). Le tout étant qu'une telle distance ne soit que rarement dépassée : avec ton implémentation c'est plus dur à obtenir car tu ne rebases jamais quand tu changes le contenu d'une cellule, avec mon implémentation cela doit pouvoir se réaliser dans certains usages.

    Il se peut, aussi, que l'aspect paresseux d'Haskell est également un impact. En tout cas, dans ton implémentation, vu la façon dont tu vas solliciter le GC cela peut aussi avoir son impact. Gasche a écrit un article de comparaison des GC : Measuring GC latencies in Haskell, OCaml, Racket.

    Intéressant la structure des HAMT, je regarderai cela de plus près. Les modules Map et Set sont implémentés avec des arbres binaires balancés en OCaml. Mais la doc Haskell précise que :

    A HashMap is often faster than other tree-based set types, especially when key comparison is expensive, as in the case of strings.

    Si j'ai le temps, j'essaierai d'implémenter la chose en OCaml et de comparer les performances.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.