• [^] # Re: Il serait peut-être temps d'utiliser des langages modernes

    Posté par . En réponse au journal Si si, le C++ peut parfois être plus rapide que le C. Évalué à 8.

    Les overloads sont justement l'antithèse du polymorphisme paramétrique, ce qu'on appelle aussi polymorphisme ad-hoc, parce que les fonctions peuvent faire des choses très différentes selon leur type. Les templates présentent le problème cité dans l'article, à savoir une duplication de code à la compilation.

    Pour prendre un équivalent de la fonction bsearch en ML, on pourrait imaginer une fonction

    bsearch: 'a -> 'a list -> ('a -> 'a -> bool) -> 'a
    

    où le premier 'a correspond à key, le 'a list correspond à base, la fonction ('a -> 'a -> bool) à compare et le derner 'a est le type retourné.

    Ici, point de duplication de code, il n'y a qu'une seule fonction créée à la compilation. Le 'a joue ici le rôle du void* effacé, i.e. c'est un type universellement quantifié, sauf qu'en plus on a la type-safety au niveau des contraintes. Le code se comporte de manière uniforme sur tout les types, au contraire de l'overloading.