InsideLoop a écrit 27 commentaires

  • [^] # Re: Une chose que j'ai oublié d'ajouter

    Posté par  . En réponse à la dépêche Le langage Rust en version 1.0 alpha, on arrête de tout casser !. Évalué à 1.

    Sur le type pour indexer un tableau:
    Au passage, un bon choix de type pour indexer un tableau est std::ptrdiff_t ( http://en.cppreference.com/w/cpp/types/ptrdiff_t ). Sur une machine 64 bits classique c'est un entier signé sur 64 bits.

  • [^] # Re: Une chose que j'ai oublié d'ajouter

    Posté par  . En réponse à la dépêche Le langage Rust en version 1.0 alpha, on arrête de tout casser !. Évalué à 3. Dernière modification le 31 janvier 2015 à 16:05.

    Sur le choix d'un type non signé pour indexer les tableaux :
    Je crois qu'il est urgent de faire admettre à la communauté C++ que ce choix est une énorme ânerie. Ce n'est d'ailleurs pas gagné d'avance. Je me permet de rappeler quelques inconvénients d'utiliser un type non signé pour indexer les tableaux.

    1) for(std::size_t k = v.size() - 1; k >=0; --k) fait une boucle infinie, ce qui est assez surprenant pour un "débutant"
    2) for(std::size_t k = 0; k < v.size() - 1; ++k) est assez drôle lorsque v.size() == 0
    3) Pour les types non signés, k + 1 < size() + 1 n'est pas équivalent à k < size(). En effet, si k = 0 et size() contient la valeur maximale du type std::size_t, k < size() est vrai alors que k + 1 < size() + 1 est faux (En effet size() + 1 == 0!). Un compilateur ne peut donc pas optimiser cette expression avec des types non signés alors qu'il le peut avec des types signés car l'overflow de ces types n'a pas à renvoyer un résultat modulo 232 (ou 264).

    Inutile de poster toutes les raisons absurdes qu'on entend souvent pour justifier l'utilisation des types non signés. Si vous n'êtes pas convaincu par mon explication, regardez cette vidéo : http://www.youtube.com/watch?v=Puio5dly9N8. Plus particulièrement aux instants 42:38 et 1:02:50 . Vous verrez que Bjarne Stroustrup, Herb Sutter et Chandler Carruth sont aussi d'accord pour dire que c'est une ânerie.

    Au passage, comme je fais du calcul scientifique donc grand utilisateurs d'arrays, j'ai réécrit mes propres std::vector et std::array pour pouvoir travailler avec des entiers signés et pour avoir des "custom allocators" qui ne changent pas le type du conteneur, à la manière de ce que font les gens de Bloomberg.

    Gnx, on est donc plutôt en bonne compagnie :-).