J'en avais eu une : créer une classe de base dont le constructeur crée un finaliseur appelant une méthode considérée comme le destructeur, méthode à redéfinir sur les classes dérivées.
Seulement d'une part, le moment et l'ordre de la destruction des objets ne pourrait être garanti. Au passage, pour moi, ça démontre clairement que la gestion de la mémoire par un garbage collector est une erreur : un choix d'implémentation qui t'empêche d'implémenter un concept du paradigme, c'est un très mauvais choix.
D'autre part, les finaliseurs sont appelés après la destruction des objets !!!
Là, je ne vois pas ce qui obligeait à une telle aberration...
D'un point de vue plus général, comment quelqu'un qui a fait un langage aussi génial par ailleurs a-t-il pu autant saloper la question des destructeurs ? Ruby, ça me fait penser à une Ferrari avec une roue carrée !
As tu tant besoin des destructeurs que ça ?
Que répondre ?
Tu pourras me démontrer que je peux m'en passer, tout comme les avocats des langages qui ne supportent pas l'héritage multiple ont démontré qu'on pouvait s'en passer.
Seulement il y a une démonstration scientifique comme quoi on peut tout programmer avec juste une machine de Turing et il est empiriquement évident qu'on peut tout faire en assembleur. Ça ne me donnera pas envie pour autant de faire mes programmes avec une machine de Turing ou en assembleur...
Pour citer Matz : Above all, you can't enjoy programming with much stress.
Là, je suis parfaitement d'accord avec lui, Ruby's true motto is "Enjoy programming".
mais moi, je ne peux pas "enjoy programming" avec la complication de devoir contourner l'absence de destructeurs avec des méthodes plus lourdes ou plus moches.
Le système de bloc répond à une partie des problématiques (exemple l'implémentation de File.open(...) { .... } qui automatise la cloture du fichier)
Oui, mais cela ne se fait pas au même niveau : cela doit être fait au niveau de l'utilisation de la classe et pas seulement au niveau de sa définition comme les destructeurs.
Si tu programmes ta classe, que tu commences à l'utiliser un peu partout, et qu'à ce moment-là, tu te rends compte qu'il faudrait que tu fasses un traitement après l'utilisation des objets, eh bien avec les blocs, tu es cuit, il faut que tu modifies toutes les utilisations de ta classe !
Les finaliseurs de ruby ont certes une syntaxe dérangeantes mais permettent de faire le travail dans ces cas simples et clairement identifiables.
D'un autre côté, si c'est pour avoir au bout du compte un programme moche, je n'ai pas d'intérêt à passer à Ruby, je reste à Perl. Au moins avec Perl, c'est la syntaxe du langage qui est moche, pas la conception de tes programmes (ou alors c'est entièrement ta faute, le langage ne t'impose pas une conception sale).
Au niveau des concepts de programmation, Perl m'a permis de continuer à faire tout ce que je faisais avant avec d'autres langages. J'attends encore de trouver un langage qui me permette de faire tout ce que je fais maintenant avec Perl...
Cela dit, je m'inquiète un peu pour Perl 6, qui devrait utiliser un garbage collector plutôt qu'un compteur de références. Si, comme je le crains, ça implique la destruction des destructeurs, je me rabattrai sur Python, même s'il est par ailleurs trop rigide à mon goût.
Quels sont les besoins que tu as vis à vis des destructeurs et qui ne sont pas recoupés ?
Je ne sais même plus. Quand j'avais découvert Ruby, je m'étais jeté dessus (un truc (qui m'apparaissait) aussi puissant que Perl, mais en joli !) en commençant à programmer avec le premier truc pas trop gros (mais pas trop petit non plus, quelques centaines de lignes, quoi) dont j'ai pu avoir l'utilité.
Arrivé à un moment, je me dis "Tiens, il faut que je fasse un traitement à la destruction des objets de telle classe", mais, m'apprêtant à ajouter un destructeur, j'ai un curieux trou de mémoire sur la syntaxe des destructeurs... et là, je dois faire des recherches un peu poussées... pour finalement découvrir la merde de chat sous le tapis.
Conclusion, j'ai fini mon programme en ajoutant une méthode et en l'appelant explicitement partout où c'était nécessaire, j'ai ensuite passé du temps à essayer de programmer des destructeurs en Ruby, et puis quand j'ai vu que ce n'était pas possible, j'ai abandonné la programmation en Ruby.
Parmi les langages informatiques, Ruby est ma plus grande déception.
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone
[^] # Destructeurs
Posté par Arthur Accroc . En réponse à la dépêche Ruby on rails 1.0 est sorti. Évalué à 4.
J'en avais eu une : créer une classe de base dont le constructeur crée un finaliseur appelant une méthode considérée comme le destructeur, méthode à redéfinir sur les classes dérivées.
Seulement d'une part, le moment et l'ordre de la destruction des objets ne pourrait être garanti. Au passage, pour moi, ça démontre clairement que la gestion de la mémoire par un garbage collector est une erreur : un choix d'implémentation qui t'empêche d'implémenter un concept du paradigme, c'est un très mauvais choix.
D'autre part, les finaliseurs sont appelés après la destruction des objets !!!
Là, je ne vois pas ce qui obligeait à une telle aberration...
D'un point de vue plus général, comment quelqu'un qui a fait un langage aussi génial par ailleurs a-t-il pu autant saloper la question des destructeurs ? Ruby, ça me fait penser à une Ferrari avec une roue carrée !
Que répondre ?
Tu pourras me démontrer que je peux m'en passer, tout comme les avocats des langages qui ne supportent pas l'héritage multiple ont démontré qu'on pouvait s'en passer.
Seulement il y a une démonstration scientifique comme quoi on peut tout programmer avec juste une machine de Turing et il est empiriquement évident qu'on peut tout faire en assembleur. Ça ne me donnera pas envie pour autant de faire mes programmes avec une machine de Turing ou en assembleur...
Pour citer Matz :
Above all, you can't enjoy programming with much stress.
Là, je suis parfaitement d'accord avec lui,
Ruby's true motto is "Enjoy programming".
mais moi, je ne peux pas "enjoy programming" avec la complication de devoir contourner l'absence de destructeurs avec des méthodes plus lourdes ou plus moches.
Oui, mais cela ne se fait pas au même niveau : cela doit être fait au niveau de l'utilisation de la classe et pas seulement au niveau de sa définition comme les destructeurs.
Si tu programmes ta classe, que tu commences à l'utiliser un peu partout, et qu'à ce moment-là, tu te rends compte qu'il faudrait que tu fasses un traitement après l'utilisation des objets, eh bien avec les blocs, tu es cuit, il faut que tu modifies toutes les utilisations de ta classe !
D'un autre côté, si c'est pour avoir au bout du compte un programme moche, je n'ai pas d'intérêt à passer à Ruby, je reste à Perl. Au moins avec Perl, c'est la syntaxe du langage qui est moche, pas la conception de tes programmes (ou alors c'est entièrement ta faute, le langage ne t'impose pas une conception sale).
Au niveau des concepts de programmation, Perl m'a permis de continuer à faire tout ce que je faisais avant avec d'autres langages. J'attends encore de trouver un langage qui me permette de faire tout ce que je fais maintenant avec Perl...
Cela dit, je m'inquiète un peu pour Perl 6, qui devrait utiliser un garbage collector plutôt qu'un compteur de références. Si, comme je le crains, ça implique la destruction des destructeurs, je me rabattrai sur Python, même s'il est par ailleurs trop rigide à mon goût.
Je ne sais même plus. Quand j'avais découvert Ruby, je m'étais jeté dessus (un truc (qui m'apparaissait) aussi puissant que Perl, mais en joli !) en commençant à programmer avec le premier truc pas trop gros (mais pas trop petit non plus, quelques centaines de lignes, quoi) dont j'ai pu avoir l'utilité.
Arrivé à un moment, je me dis "Tiens, il faut que je fasse un traitement à la destruction des objets de telle classe", mais, m'apprêtant à ajouter un destructeur, j'ai un curieux trou de mémoire sur la syntaxe des destructeurs... et là, je dois faire des recherches un peu poussées... pour finalement découvrir la merde de chat sous le tapis.
Conclusion, j'ai fini mon programme en ajoutant une méthode et en l'appelant explicitement partout où c'était nécessaire, j'ai ensuite passé du temps à essayer de programmer des destructeurs en Ruby, et puis quand j'ai vu que ce n'était pas possible, j'ai abandonné la programmation en Ruby.
Parmi les langages informatiques, Ruby est ma plus grande déception.
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone