Bonjour,
J'ai écrit un petit article qui explique via une exemple comment utiliser le générateur de "wrapper" SWIG pour interfacer un petit bout de code C avec Python :
http://dosimple.ch/articles/Python-SWIG/(...)
Les commentaires et les corrections sont les bienvenus.
# Le style de la page
Posté par salvaire . Évalué à 1.
# Petite remarque
Posté par Joris Dedieu (site web personnel) . Évalué à 2.
J'ai trouvé cette phrase un peu enigmatique
[^] # Re: Petite remarque
Posté par Croconux . Évalué à 2.
Pouquoi ça ? Tel que je le comprends, si tu crées des objets dans ton code C tu dois les libérer. Si tu les crées dans ton code Python, le ramasse miettes s'en charge comme s'il s'agissait de code full Python. J'ai bon ?
# J'ai rien compris ...
Posté par harbort1 . Évalué à 2.
Déjà il aurait été mille fois plus intéressant de montrer comment faire une classe Python à partir d'une structure C ! Et donc montrer rapidement comment enregistrer le destructeur et le constructeur (ou plutôt l'initialisateur ...).
Ensuite, le GC (garbage collector) n'a absolument rien à faire dans ton exemple ! Pour les objets "simple" (comprendre : qui ne risquent pas de provoquer des cycles de références) Python fonctionne par comptage de référence ... parler du GC ici est une complication inutile.
De plus, celui qui ne libère pas la mémoire n'est pas Python mais SWIG ... Python a probablement libéré la mémoire nécessaire pour stoquer sa structure à lui !
[^] # Re: J'ai rien compris ...
Posté par Yoan B (site web personnel) . Évalué à 1.
http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn55(...)
Cet article est peut-être un peu rapide/court, c'est vrai.
Un peu de lecture pour les frustrés (et moi avec) : http://www.swig.org/Doc1.1/HTML/Contents.html(...)
[^] # Re: J'ai rien compris ...
Posté par faden . Évalué à 2.
C'est bien ce que fait SWIG.
"montrer rapidement comment enregistrer le destructeur et le constructeur"
Oki si tu penses que c'est important je peux le faire.
"Ensuite, le GC (garbage collector) n'a absolument rien à faire dans ton exemple"
Bien sûre que si, c'est justement le but de cette article de montrer comment fonctionne le GC de python avec SWIG.
"De plus, celui qui ne libère pas la mémoire n'est pas Python mais SWIG ... Python a probablement libéré la mémoire nécessaire pour stoquer sa structure à lui !"
Python ne libère pas la mémoire mais c'est lui qui commande cette libération via SWIG. Donc quand Python n'a plus de référence sur un objet (dans ce cas une structure) le GC supprime l'objet Python. Le destructeur de cet objet Python commande à la bibliothèque la libération de la mémoire via le destructeur généré automatiquement par SWIG. On s'affranchi ainsi de la gestion de la mémoire tant qu'on respecte la règle de ne pas créer la structure dans une fonction C/C++.
# Petit Malin
Posté par golum . Évalué à 0.
http://linuxfr.org/comments/630944.html#630944(...)
Désolé, ce soir j'ai mon cours de danse :D
# déjà testé
Posté par kiai . Évalué à 2.
Merci SWIG :-)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.