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 :

RAII et exception


Sujet :

C

  1. #1
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut RAII et exception
    Bonjour,
    existe t'il ,en C, des outils qui fournissent
    1- des exception?
    j'ai trouvé ça pour l'instant http://www.on-time.com/ddj0011.htm

    2- une gestion de la mémoire en RAII ?
    la j'ai rien trouvé en C

    merci.

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Bonjour,
    existe t'il ,en C, des outils qui fournissent
    1- des exception?
    j'ai trouvé ça pour l'instant http://www.on-time.com/ddj0011.htm

    2- une gestion de la mémoire en RAII ?
    la j'ai rien trouvé en C
    Tu peux aussi voir ce qu'il y a dans les differents framework de Laurent Deniau (http://ldeniau.web.cern.ch/ldeniau/html/oopc.html).

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    merci je vais regarder

  4. #4
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    Bon, est-ce qu'il est vraiment judicieux d'utiliser des frameworks genre de l'OO ou les exceptions en C là ?
    Parceque franchement le C c'est le C, et on n'a pas, à ma connaissance, inventé le C++ pour les poules du voisin! si?
    Compil your life guy!
    The Aures Project

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    L'utilisation d'un framework OO en C plutôt que C++ peut se justifier à mon avis par les raisons suivantes:

    • Aucun compilateur n'est disponible pour la plateforme cible (ou alors un tel compilateur est inaccessible pour des questions de coûts)
    • C90 est probablement le langage le plus portable à l'heure actuelle.
    • Le langage C possède une ABI bien définie, ce qui facilite la création de passerelles (bindings) entre une bibliothèque écrite en C ou en C OO et d'autres langages.
    • Certains programmeurs utilisent le C tout simplement parce que c'est le langage qu'ils connaissent le mieux. Un framework OO leur permet alors de bénéficier des avantages que peut offrir la programmation orienté-objet, notamment au niveau de l'organisation du code.


    L'inconvénient principal que je vois concernant l'utilisation d'un framework OO particulier est que les programmeurs participant au projet devront se former sur son utilisation. Il est en effet plus facile de recruter des programmeurs possédant de l'expérience en C++ que des programmeurs ayant déjà entendu parler de ooc-2.0 ou COS. GObject jouit d'une popularité plus évidente, notamment grâce aux projets GTK+ et GNOME, mais l'utilisation de ce framework est relativement complexe.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Goundy Voir le message
    Bon, est-ce qu'il est vraiment judicieux d'utiliser des frameworks genre de l'OO ou les exceptions en C là ?
    Parceque franchement le C c'est le C, et on n'a pas, à ma connaissance, inventé le C++ pour les poules du voisin! si?

    Pour l'OO. Ben je voit pas quoi te repondre. Tu connait Glib? Gtk+? GTS?
    C'est du C avec de l'OO ( ou j'ai peut être pas compris).
    Thierry Chappuis as bien répondu sur ce point...

    Sinon, sait tu ce qu'est le RAII ?
    Développant en C++, je vais bientôt aller sur un projet en C-objet et C++.
    Je cherche donc quelques equivalence

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Pour l'OO. Ben je voit pas quoi te repondre. Tu connait Glib? Gtk+? GTS?
    C'est du C avec de l'OO ( ou j'ai peut être pas compris).
    Thierry Chappuis as bien répondu sur ce point...

    Sinon, sait tu ce qu'est le RAII ?
    Développant en C++, je vais bientôt aller sur un projet en C-objet et C++.
    Je cherche donc quelques equivalence
    Je ne connais pas de moyen d'implanter RAII (Resource Acquisition Is Initialization) en C. Pour ce faire, il faudrait qu'il existe un moyen d'appeler automatiquement le destructeur d'un objet à la sortie du bloc dans lequel il a été définit. En C, l'appel d'un destructeur ne peut se faire (à ma connaissance) que de manière explicite.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Je ne connais pas de moyen d'implanter RAII (Resource Acquisition Is Initialization) en C. Pour ce faire, il faudrait qu'il existe un moyen d'appeler automatiquement le destructeur d'un objet à la sortie du bloc dans lequel il a été définit. En C, l'appel d'un destructeur ne peut se faire (à ma connaissance) que de manière explicite.

    Thierry
    merci

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ai récemment posté un monstre à base de fonctions et macros sur ce thème. Par contre, j'ai la flemme de chercher et il y avait quelques bugs (notamment, on ne pouvait pas utiliser "return" pour retourner une valeur)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    J'ai récemment posté un monstre à base de fonctions et macros sur ce thème. Par contre, j'ai la flemme de chercher et il y avait quelques bugs (notamment, on ne pouvait pas utiliser "return" pour retourner une valeur)...
    Tu parles de ce post? http://www.developpez.net/forums/sho...98&postcount=6. Je vais regarder ça de plus près.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Oui.
    Magnifique, non?

    Il faudra que je pense à poster la dernière version, mais en .zip cette fois...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,
    juste deux question :

    - La partie C++ est uniquement pour ne pas réimplementer la pile?

    - pourquoi "Thread-local data structure" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Thread-local data structure.
    struct threadFrameMemory
    {
    	struct frame * pCurrentTopFrame;
    };
    merci

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Bonjour,
    1. Pour être précis: Chaque structure "frame" peut contenir une liste de couples (pointeur de fonction, pointeur vers l'objet à détruire). Les fonctions sont appelées en ordre inverse de leur ajout lors de la destruction de la "frame", donc cette liste est une pile. Et comme je n'avais pas de fonctions "liste" ou "pile" en C sous la main, j'ai décidé d'utiliser une classe standard C++ pour ça.
    2. Là, il y a deux problèmes liés:
      • J'ai besoin d'une variable globale pour ne pas avoir à passer systématiquement un pointeur supplémentaire aux fonctions
      • Une variable globale, ça marche bien en mono-thread, mais pas en multithread.

      Donc, j'utilise du Thread-Local Storage (TLS) : Chaque thread possède sa propre variable "globale". Mais si tu fais un simple programme monothread, tu peux remplaçer cela par une simple variable globale...

    Donc, mon code est à la fois réentrant et thread-safe: Réentrant parce que la variable globale sert pour une pile, thread-safe parce que chaque variable n'est vue que par un thread et un seul...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Ok merci.
    Sympa ton code...

  15. #15
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Oui.
    Magnifique, non?

    Il faudra que je pense à poster la dernière version, mais en .zip cette fois...
    Oui, beau travail.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    pour ceux que cela interesse.
    j'ai trouvé ca
    http://c.developpez.com/sources/?page=XII#MEMOIRE_cmm

  17. #17
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention, gestion de mémoire et RAII sont deux choses distinctes, hein...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Attention, gestion de mémoire et RAII sont deux choses distinctes, hein...
    ?
    c'est quand même proche non? ou j'ai peut pas compris ce qu'est le RAII .

    Citation Envoyé par wikipedia
    Resource Acquisition Is Initialization, often referred to by the acronym RAII, is a popular design pattern in C++, D and Ada. The technique combines acquisition and release of resources with initialization and uninitialization of objects.

    En tout cas, a première vue, cela ressemble ce que tu as fait, non?

  19. #19
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    La RAII s'applique à toute ressource: Mémore, fichier ouvert, verrou, ou même indentation d'un fichier de log.
    RAII, c'est tout ce qu'on peut faire automatiquement avec le destructeur d'une classe C++.

    La gestion de mémoire, c'est la gestion de mémoire. Tu peux y faire des objets à comptage de références, un système de ramasse-miettes, un traceur d'allocations et de fuites de mémoire, etc.

    Mon code, il est fait pour la RAII, pas en particulier pour la gestion de mémoire.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    ah ok.
    merci

Discussions similaires

  1. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  2. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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