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?