C'est-à-dire habituellement à la fin du programme, ou tout du moins assez rarement si le programme tourne assez longtemps... Eh oui, les GC ont des avantages, mais là on touche à leur principal inconvénient. Non pas que je n'aie pas confiance sur le fait qu'ils se lancent avant que la consommation mémoire devienne génante, mais pour l'appel des destructeurs, ce n'est pas génial... C'est d'ailleurs il me semble la raison qu'invoque Matz pour ne pas en avoir implémenté.
une méthode peut être appelé (pour fermer des sockets, des fichiers, ce genre de trucs) ceci grace à define_finalizer().
Je connais. C'est peut-être plus approprié pour certains cas particuliers, mais dans le cas général, ça ne vaut pas un vrai destructeur défini au niveau de la classe.
J'avais pensé à étendre la classe de base appropriée (pour ceux qui ne connaissent pas, Ruby permet d'étendre des classes de manière très souple, en dehors de leur module) pour que son contructeur fasse automatiquement un appel à cette fonction si l'on a défini une méthode finalize au niveau de la classe, mais define_finalizer m'a causé quelques soucis et comme je n'avais pas vraiment l'utilité de Ruby...
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone
[^] # Re: Oui, mais...
Posté par Arthur Accroc . En réponse à la dépêche Interview de Matz le créateur de Ruby. Évalué à 4.
C'est-à-dire habituellement à la fin du programme, ou tout du moins assez rarement si le programme tourne assez longtemps... Eh oui, les GC ont des avantages, mais là on touche à leur principal inconvénient. Non pas que je n'aie pas confiance sur le fait qu'ils se lancent avant que la consommation mémoire devienne génante, mais pour l'appel des destructeurs, ce n'est pas génial... C'est d'ailleurs il me semble la raison qu'invoque Matz pour ne pas en avoir implémenté.
une méthode peut être appelé (pour fermer des sockets, des fichiers, ce genre de trucs) ceci grace à define_finalizer().
Je connais. C'est peut-être plus approprié pour certains cas particuliers, mais dans le cas général, ça ne vaut pas un vrai destructeur défini au niveau de la classe.
J'avais pensé à étendre la classe de base appropriée (pour ceux qui ne connaissent pas, Ruby permet d'étendre des classes de manière très souple, en dehors de leur module) pour que son contructeur fasse automatiquement un appel à cette fonction si l'on a défini une méthode finalize au niveau de la classe, mais define_finalizer m'a causé quelques soucis et comme je n'avais pas vraiment l'utilité de Ruby...
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone