IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Distinguished Lecture: Bjarne Stroustrup


Sujet :

C++

  1. #1
    Membre éprouvé
    Homme Profil pro
    -
    Inscrit en
    Octobre 2011
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Octobre 2011
    Messages : 344
    Points : 1 235
    Points
    1 235
    Par défaut Distinguished Lecture: Bjarne Stroustrup
    Bonjour, aujourd'hui j'ai été à une conférence de Bjarne Stroustrup (un ponte quoi) dans sa ville natale. Il nous a raconté comment sa vision pour écrire du beau c++, et donc des raisons de 2-3 nouveautés utile de c++2011 dans ce sens-là, et je voulais partager avec vous l'expérience.

    Il nous d'abord parlé de qsort() et pourquoi c'était une mauvaise fonction car son interface requiert de nombreux paramètres qui rende un appel peu clair à lire, et parce que son implémentation utilisais beaucoup de trucs « trop » générique qui plombe la performence de l'algorithme. Par ailleurs il n'apprécaient pas le type-safety réduit de qsort().

    Ensuite un petit mot sur la sur-utilisation des types basiques générique qui rendent le code peu clair quand on travaille avec des unités. Ainsi il faudrait définir un type de donnés « speed » plutôt que d'enregistrer tout dans des double, car on ne sait à quel unité correspond les double. Cet exemple était motivé par le crash de je-ne-sais-plus-lequel satellite qui s'était planté sous mars à cause d'une erreur d'intérprètation d'unité.

    Puis un peu d'algorithmie ou il est sortit très étonnement que le std::vector était le conteneur le plus performant pour insérer et retirer plein de petit nombre (même meilleur qu'un arbre) ! Bjarne explique que c'est parce que les données sont compacte et donc qu'il y a moins de « cache misses » et moins de pointeur à déréférencer, ce qui augmente le nombre d'instruction. Bjarne recommande d'utiliser que trois conteneurs : std::vector, std::map (ou unordered_map) ou une single-linked list si on a besion d'un conteneur souvent vide.

    Par après, une petite discussion sur la gestion de la ressource. Le couple allocation de la ressource/libération de la recoussource serait à proscrire car il mène facilement à un oubli de libération de la ressource si une erreur survient pendant la gestion de la ressource. Les try-catch ne pas beaucoup mieux car il rendrait le code peut lisible, donc peu maintenable. Bjarne propose évidemment d'utiliser des «*poignées*», ces objets dont le constructeur de charge d'allouer la ressource et le destructeur se charge de la libérer. Comme le destructeur est appelé à la fin de toute fonction, plus de problème.

    Bjarne parle aussi des retours de fonction. Par exemple, comment renvoier la somme de deux matrices.
    Renvoier un pointeur est dangereux, car on a du mal à savoir qui doit libérer la matrice créée, et on ne peut écrire la somme de 3 matrices simplement. Pour cette dernière raison, renvoyer une référence est aussi mauvaise. Passer la matrice ou enregistrer le résultat comme troisième argument est plus sur, mais rend l'appel de fonction très peu lisible, et renvoyer la matrice directement implique de copier beaucoup de données. Bjarne propose d'utiliser des constructeurs de déplacement (utilisant des références RHS) pour déplacer les données (changer les pointeur) plutôt que de les copier.

    Voilà, j'espère que ça vous intéresse, même s'il y a pas mal de connu. Perso ce qui m'a le plus surpris, c'est le coup du std::vector.

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    En effet rien de nouveau du côté des problèmes du C++ avant le C++11 (ce sont tous des constats qui ont 10 ans, ou presque), mais ca résume bien les solutions misent en oeuvre par le C++11 pour les résoudre.

  3. #3
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Il a fait la meme presentation (avec un graphique absent sur sa presentation...) lors de l'ouverture de Going Native : http://channel9.msdn.com/Events/Goin...up-Cpp11-Style

  4. #4
    Membre éprouvé
    Homme Profil pro
    -
    Inscrit en
    Octobre 2011
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Octobre 2011
    Messages : 344
    Points : 1 235
    Points
    1 235
    Par défaut
    Ah ben merci, klaim*! En fait la description est la même… Mais il nous avait assuré que c'était une nouvelle conférence.

    En tout cas ça me permettra de revisionner la conf merci encore.

  5. #5
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par laerne Voir le message
    Bonjour, aujourd'hui j'ai été à une conférence de Bjarne Stroustrup (un ponte quoi) dans sa ville natale. Il nous a raconté comment sa vision pour écrire du beau c++, et donc des raisons de 2-3 nouveautés utile de c++2011 dans ce sens-là, et je voulais partager avec vous l'expérience.

    Il nous d'abord parlé de qsort() et pourquoi c'était une mauvaise fonction car son interface requiert de nombreux paramètres qui rende un appel peu clair à lire, et parce que son implémentation utilisais beaucoup de trucs « trop » générique qui plombe la performence de l'algorithme. Par ailleurs il n'apprécaient pas le type-safety réduit de qsort().

    Ensuite un petit mot sur la sur-utilisation des types basiques générique qui rendent le code peu clair quand on travaille avec des unités. Ainsi il faudrait définir un type de donnés « speed » plutôt que d'enregistrer tout dans des double, car on ne sait à quel unité correspond les double. Cet exemple était motivé par le crash de je-ne-sais-plus-lequel satellite qui s'était planté sous mars à cause d'une erreur d'intérprètation d'unité.

    Puis un peu d'algorithmie ou il est sortit très étonnement que le std::vector était le conteneur le plus performant pour insérer et retirer plein de petit nombre (même meilleur qu'un arbre) ! Bjarne explique que c'est parce que les données sont compacte et donc qu'il y a moins de « cache misses » et moins de pointeur à déréférencer, ce qui augmente le nombre d'instruction. Bjarne recommande d'utiliser que trois conteneurs : std::vector, std::map (ou unordered_map) ou une single-linked list si on a besion d'un conteneur souvent vide.

    Par après, une petite discussion sur la gestion de la ressource. Le couple allocation de la ressource/libération de la recoussource serait à proscrire car il mène facilement à un oubli de libération de la ressource si une erreur survient pendant la gestion de la ressource. Les try-catch ne pas beaucoup mieux car il rendrait le code peut lisible, donc peu maintenable. Bjarne propose évidemment d'utiliser des «*poignées*», ces objets dont le constructeur de charge d'allouer la ressource et le destructeur se charge de la libérer. Comme le destructeur est appelé à la fin de toute fonction, plus de problème.

    Bjarne parle aussi des retours de fonction. Par exemple, comment renvoier la somme de deux matrices.
    Renvoier un pointeur est dangereux, car on a du mal à savoir qui doit libérer la matrice créée, et on ne peut écrire la somme de 3 matrices simplement. Pour cette dernière raison, renvoyer une référence est aussi mauvaise. Passer la matrice ou enregistrer le résultat comme troisième argument est plus sur, mais rend l'appel de fonction très peu lisible, et renvoyer la matrice directement implique de copier beaucoup de données. Bjarne propose d'utiliser des constructeurs de déplacement (utilisant des références RHS) pour déplacer les données (changer les pointeur) plutôt que de les copier.

    Voilà, j'espère que ça vous intéresse, même s'il y a pas mal de connu. Perso ce qui m'a le plus surpris, c'est le coup du std::vector.
    premièrement superbe initiative de ta part : +1 (même si ça existait déjà apparemment, le rappeler est toujours bon, personnellement j'aprécie beaucoup ton post).

    Ensuite : le satellite était en fait une sonde : Mars Climate Orbiter

    Enfin : merci pour la vidéo oui (on a quand même de la chance d'avoir l'inventeur encore bien vivant à notre portée^^ (vous imaginez la frustration pour les passionné de physique de pas avoir rencontré ou visionné Enstein ?) )
    Nullius in verba

Discussions similaires

  1. Itération suivant Bjarne Stroustrup ..Operand ?
    Par Go'Gaule dans le forum Débuter
    Réponses: 2
    Dernier message: 14/01/2012, 10h54
  2. Itération suivant Bjarne Stroustrup .
    Par Go'Gaule dans le forum Débuter
    Réponses: 6
    Dernier message: 12/01/2012, 16h37
  3. Principes et pratique avec c++ de Bjarne Stroustrup
    Par Go'Gaule dans le forum Débuter
    Réponses: 1
    Dernier message: 06/01/2012, 14h12
  4. P.P.P. de Bjarne Stroustrup C++
    Par Go'Gaule dans le forum Débuter
    Réponses: 16
    Dernier message: 05/12/2011, 22h15
  5. Réponses: 7
    Dernier message: 15/03/2007, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo