|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 672 ![]() |
Bonjour,
dans tous mes développements, même lorsque j'ai eu la possibilité d'avoir le temps pour produire du beau code, je n'ai jamais été satisfait de ma gestion des erreurs (sauf pour les petits programmes, bien sûr). Ici il s'agit de c++, mais j'ai le même problème en c#. Je viens de lire cet article, et son auteur me rassure, dans le sens où je ne suis pas le seul à avoir ce problème. En effet, c++ n'offre que 2 options pour la gestion d'erreurs: la valeur de retour ou l'exception. Et dans beaucoup de cas, en particulier lorsque le programme est très gros, avec des dépendances (dans les deux sens) et de fortes contraintes de rapidité d'exécution, aucune des deux méthodes n'est satisfaisante. Les ingénieurs de google semblent avoir réfléchi sur le sujet et ont permit, dans leur langage Go, qu'une fonction puisse retourner plusieurs valeurs sans avoir besoin de créer une structure spécifique pour cela. Mais cette solution n'est toujours pas pleinement satisfaisante selon moi. Le problème, au fond, peut s'appréhender en étudiant le chemin d'exécution d'un programme (en cours d'exécution). Par exemple, si on est dans une fonction f qui sera appelée au niveau de la 20ème couche d'exécution, la gestion d'erreur peut être extrêmement difficile. En effet, cela signifie que les 20 fonctions au-dessus de f doivent être prêtes à gérer les choix que l'on aura fait au niveau de f (soit on court-circuite le path avec une exception, soit on remonte tout le path avec une valeur de retour, avec, dans chaque cas, tous les types d'erreurs potentiels à gérer et les problèmes que peut poser la levée d'une exception au milieu d'un traitement ou d'une allocation). Pourquoi ce domaine du développement logiciel évolue-t-il si peu? Pourquoi les gurus du c++ n'abordent-ils jamais ce sujet? Avez-vous envisagé, voire même trouvé, des solutions intéressantes à ce problème? |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 315 ![]() |
(mode vendeur d'aspirateur)
Un peu de lecture : Retour de fonctions ou exceptions ? Performances des exceptions C++ [mode vendeur d'aspirateur off) Lecture en diagonale : * quelle solution est apportée par Go ? * en C++, on a pair et tuple pour retourner un code d'erreur complexe (ou créer une struct, c'est pas la mort non plus) * le problème ne vient pas du fait qu'ils ont du vieux code non exception safe (cf les conventions de codage de google...) et qu'ajouter des exceptions est alors problématique ? Perso, pas rencontré de problème avec l'utilisation des exceptions. La règle du "je gère l'exception ou je la retourne" me va bien
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
|
10
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 672 ![]() |
Cette fois-ci c'est Andrei Alexandrescu qui me conforte dans le fait que je ne suis pas seul à avoir ce problème existentiel: http://channel9.msdn.com/Shows/Going...-Handling-in-C
|
|
|
10
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 554 ![]() |
Oui et autant je connaissais le scope truc autant son Expected m'apparait comme une solution etonnamment bonne!
Ce que je me demande c'est si ils comptent le proposer dans la STL ou au moins dans boost... |
|
00
|
|
|
#5 | ||
![]() ![]() Timothée BernardÉtudiant Inscription : février 2010 Messages : 370 ![]() |
gbdivers > avec Go on peut faire
Code :
Concernant ce sujet, il y a aussi eu l'article intéressant Why should I have written ZeroMQ in C, not C++ (part I) qui a beaucoup fait réagir la communauté.
__________________
Si vous ne savez toujours pas ce qu’est la récursivité, relisez cette phrase. Mon blog sur la programmation et l'informatique ! |
||
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 554 ![]() |
Citation:
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 554 ![]() |
La suite de son poste le decredibilise fortement selon moi: http://www.250bpm.com/blog:8
Il aurait pu comparer le cout de retrait d'un element si c'etait un vecteur avec la taille de ses elements, je suis sur que ca aurait ete sacrement plus rapide. |
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 315 ![]() |
J'ai survolé, il dit en gros qu'il préfère écrire une structure en C parce que std::list du C++ ne convient pas à son problème ???
Qu'il change de conteneur ou qu'il écrive un conteneur adapté en C++ (EDIT : en fait, il veut utiliser un boost.intrusif. Il doit être possible de créer des centaines de conteneurs différents, c'est pas un drame si le C++ ne propose pas toutes les variantes possibles et imaginables... déjà que plein de personnes ne connaissent déjà pas tous les conteneurs de la STL, s'il fallait en mettre d'autres...) Je lirais les autres demain EDIT : survol de la partite 1. Je trouve qu'il n'est pas crédible non plus... Il rejette les exceptions parce qu'elles sont moins lisibles dans un contexte, il se retrouve alors avec des problèmes très complexes dans un autre contexte, parce qu'il a rejeté les exceptions. Mouais, bof. A lire en détail, mais s'il comprend pas que les exceptions sont un moyen supplémentaire (et non qui se substitue) à la gestion des erreurs en C EDIT2 : @mitkl En C++, ton code devient : Code :
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
||
|
10
|
|
|
#9 | ||||
![]() ![]() Florian BlanchetEtudiant en Optique Inscription : août 2004 Messages : 1 061 ![]() |
Bonjour,
En regardant les articles que vous citiez, je suis tombé sur : http://www.drdobbs.com/article/print...ectionName=cpp Pour moi la seule chose qu'il montre, c'est que l'écriture de code résistant aux exceptions c'est difficile, mais en aucun cas que le système des exceptions du C++ est défaillant. Pour la solution : Code :
Pour boost, on a : http://www.boost.org/doc/libs/1_52_0...exception.html http://www.boost.org/doc/libs/1_52_0...tml/index.html Le premier permettant l'ajout simple d'informations aux exceptions (nécessaire si on veut vraiment permettre de corriger l'état du programme), le second d'écrire du code résistant plus simplement (dans l'esprit de ce que propose l'article que j'ai cité. La question qui pourrait se poser c'est de savoir si un tel système (écriture d'une action et d'un rollback) peut-être intégré dans le coeur d'un langage (et pas comme un outil). Si un concepteur de langage s'est retrouvé confronté au problème, je vois un élément qui pourrait l'en dissuader : ça complexifie la grammaire du langage sans pour autant gagner en lisibilité par rapport à l'écriture d'un outil. Pour l'absence de l'outil SCOPED_EXIT dans la bibliothèque standard, il a peut-être jugé pas assez mature et ne présentant pas beaucoup plus d'avantage que ce qu'on peut réaliser avec un std::unique_ptr et lambda en C++11 : Code :
__________________
"We can solve any problem by introducing an extra level of indirection" Butler Lampson "N'importe quel problème peut être résolu en introduisant un niveau d'indirection supplémentaire" Butler Lampson (traduction libre) |
||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com