Le 14-09-2011, Paul Gaborit a écrit :Il existe de vrais pièges en Perl (commme dans tous les autres langages)
qui, eux, sont mal ou pas documentés du tout. Par exemple, le piège des
fuites mémoires liées aux références circulaires n'est qu'évoqué dans
perlref avec un renvoi vers perlobj qui l'explique un peu mieux mais ne
fournit pas de solution. Ça, c'est un vrai piège du langage difficile à
comprendre et difficile à résoudre.
ce n'est pas parce qu'il existe des pieges plus vicieux que celui-ci n'en est
pas un.
Le 14-09-2011, Paul Gaborit <Paul.Gaborit@invalid.invalid> a écrit :
Il existe de vrais pièges en Perl (commme dans tous les autres langages)
qui, eux, sont mal ou pas documentés du tout. Par exemple, le piège des
fuites mémoires liées aux références circulaires n'est qu'évoqué dans
perlref avec un renvoi vers perlobj qui l'explique un peu mieux mais ne
fournit pas de solution. Ça, c'est un vrai piège du langage difficile à
comprendre et difficile à résoudre.
ce n'est pas parce qu'il existe des pieges plus vicieux que celui-ci n'en est
pas un.
Le 14-09-2011, Paul Gaborit a écrit :Il existe de vrais pièges en Perl (commme dans tous les autres langages)
qui, eux, sont mal ou pas documentés du tout. Par exemple, le piège des
fuites mémoires liées aux références circulaires n'est qu'évoqué dans
perlref avec un renvoi vers perlobj qui l'explique un peu mieux mais ne
fournit pas de solution. Ça, c'est un vrai piège du langage difficile à
comprendre et difficile à résoudre.
ce n'est pas parce qu'il existe des pieges plus vicieux que celui-ci n'en est
pas un.
Erwan David writes:Paul Gaborit écrivait :Un exemple tout simple :
{
my $pere = {};
$pere->{fils} = {pere => $pere};
}
Normalement, cette structure de données devraient étre détruite à la fin
du bloc... Mais elle ne l'est pas à cause des références circulai res (le
père référence son fils qui référence son père...). C'est d onc une fuite
mémoire.
tu veux dire que le GC de perl est un simple compteur de références ?
Ça faut quand même des années qu'on sait faire mieux...
Je partage ta stupéfaction, et en allant lire les documents auquel Paul
faisait référence, j'ai bien peur que ce soit le cas...
Erwan David <erwan@rail.eu.org> writes:
Paul Gaborit <Paul.Gaborit@invalid.invalid> écrivait :
Un exemple tout simple :
{
my $pere = {};
$pere->{fils} = {pere => $pere};
}
Normalement, cette structure de données devraient étre détruite à la fin
du bloc... Mais elle ne l'est pas à cause des références circulai res (le
père référence son fils qui référence son père...). C'est d onc une fuite
mémoire.
tu veux dire que le GC de perl est un simple compteur de références ?
Ça faut quand même des années qu'on sait faire mieux...
Je partage ta stupéfaction, et en allant lire les documents auquel Paul
faisait référence, j'ai bien peur que ce soit le cas...
Erwan David writes:Paul Gaborit écrivait :Un exemple tout simple :
{
my $pere = {};
$pere->{fils} = {pere => $pere};
}
Normalement, cette structure de données devraient étre détruite à la fin
du bloc... Mais elle ne l'est pas à cause des références circulai res (le
père référence son fils qui référence son père...). C'est d onc une fuite
mémoire.
tu veux dire que le GC de perl est un simple compteur de références ?
Ça faut quand même des années qu'on sait faire mieux...
Je partage ta stupéfaction, et en allant lire les documents auquel Paul
faisait référence, j'ai bien peur que ce soit le cas...
à (at) Thu, 15 Sep 2011 19:57:08 +0200,
Alain Ketterlin écrivait (wrote):tu veux dire que le GC de perl est un simple compteur de réfé rences ?
Ãa faut quand même des années qu'on sait faire mieux...
Je partage ta stupéfaction, et en allant lire les documents auquel Paul
faisait référence, j'ai bien peur que ce soit le cas...
Les créateurs de Lisp disaient : « La gestion de la mà ©moire est une
chose tellement importante qu'on ne peut pas la laiser au
programmeur. C'est le système qui doit s'en occuper lui-mê me. »
Les créateurs du C disaient : « La gestion de la mémo ire est une
chose tellement importante qu'on ne peut pas la laiser au
système. C'est le programmeur qui doit s'en occuper lui-mê me. »
Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
à (at) Thu, 15 Sep 2011 19:57:08 +0200,
Alain Ketterlin <alain@dpt-info.u-strasbg.fr> écrivait (wrote):
tu veux dire que le GC de perl est un simple compteur de réfé rences ?
Ãa faut quand même des années qu'on sait faire mieux...
Je partage ta stupéfaction, et en allant lire les documents auquel Paul
faisait référence, j'ai bien peur que ce soit le cas...
Les créateurs de Lisp disaient : « La gestion de la mà ©moire est une
chose tellement importante qu'on ne peut pas la laiser au
programmeur. C'est le système qui doit s'en occuper lui-mê me. »
Les créateurs du C disaient : « La gestion de la mémo ire est une
chose tellement importante qu'on ne peut pas la laiser au
système. C'est le programmeur qui doit s'en occuper lui-mê me. »
Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
à (at) Thu, 15 Sep 2011 19:57:08 +0200,
Alain Ketterlin écrivait (wrote):tu veux dire que le GC de perl est un simple compteur de réfé rences ?
Ãa faut quand même des années qu'on sait faire mieux...
Je partage ta stupéfaction, et en allant lire les documents auquel Paul
faisait référence, j'ai bien peur que ce soit le cas...
Les créateurs de Lisp disaient : « La gestion de la mà ©moire est une
chose tellement importante qu'on ne peut pas la laiser au
programmeur. C'est le système qui doit s'en occuper lui-mê me. »
Les créateurs du C disaient : « La gestion de la mémo ire est une
chose tellement importante qu'on ne peut pas la laiser au
système. C'est le programmeur qui doit s'en occuper lui-mê me. »
Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
Paul Gaborit writes:
Les créateurs de Lisp disaient : « La gestion de la mémoire est une
chose tellement importante qu'on ne peut pas la laiser au
programmeur. C'est le système qui doit s'en occuper lui-même. »
Les créateurs du C disaient : « La gestion de la mémoire est une
chose tellement importante qu'on ne peut pas la laiser au
système. C'est le programmeur qui doit s'en occuper lui-même. »
Tout à fait d'accord, avec les deux. Mais j'aurais du mal à défendre :
« La gestion de la mémoire est une chose tellement importante que quand
c'est facile on la laisse au système et quand c'est plus compliqué on
demande l'aide du programmeur. »
[...]Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
mais je n'ai pas l'intention de verser dans le débat religieux.
Paul Gaborit <Paul.Gaborit@invalid.invalid> writes:
Les créateurs de Lisp disaient : « La gestion de la mémoire est une
chose tellement importante qu'on ne peut pas la laiser au
programmeur. C'est le système qui doit s'en occuper lui-même. »
Les créateurs du C disaient : « La gestion de la mémoire est une
chose tellement importante qu'on ne peut pas la laiser au
système. C'est le programmeur qui doit s'en occuper lui-même. »
Tout à fait d'accord, avec les deux. Mais j'aurais du mal à défendre :
« La gestion de la mémoire est une chose tellement importante que quand
c'est facile on la laisse au système et quand c'est plus compliqué on
demande l'aide du programmeur. »
[...]
Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
mais je n'ai pas l'intention de verser dans le débat religieux.
Paul Gaborit writes:
Les créateurs de Lisp disaient : « La gestion de la mémoire est une
chose tellement importante qu'on ne peut pas la laiser au
programmeur. C'est le système qui doit s'en occuper lui-même. »
Les créateurs du C disaient : « La gestion de la mémoire est une
chose tellement importante qu'on ne peut pas la laiser au
système. C'est le programmeur qui doit s'en occuper lui-même. »
Tout à fait d'accord, avec les deux. Mais j'aurais du mal à défendre :
« La gestion de la mémoire est une chose tellement importante que quand
c'est facile on la laisse au système et quand c'est plus compliqué on
demande l'aide du programmeur. »
[...]Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
mais je n'ai pas l'intention de verser dans le débat religieux.
Ça ne prête à confusion que pour ceux qui ont des idées préconçues sur
le fonctionnement de 'return' et de 'eval'.
une grosse majorite quoi...
Ça ne prête à confusion que pour ceux qui ont des idées préconçues sur
le fonctionnement de 'return' et de 'eval'.
une grosse majorite quoi...
Ça ne prête à confusion que pour ceux qui ont des idées préconçues sur
le fonctionnement de 'return' et de 'eval'.
une grosse majorite quoi...
[...]Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
C'est quoi « exactement le contraire » ?
[...] Il n'existe pas de ramasse-miettes meilleur que les autres pour
toutes les situations. [...]
[...]
Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
C'est quoi « exactement le contraire » ?
[...] Il n'existe pas de ramasse-miettes meilleur que les autres pour
toutes les situations. [...]
[...]Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
C'est quoi « exactement le contraire » ?
[...] Il n'existe pas de ramasse-miettes meilleur que les autres pour
toutes les situations. [...]
Paul Gaborit writes:[...]Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
C'est quoi « exactement le contraire » ?
Selon moi, la plupart des programmes utilisent des références cycliques.
Seuls les plus simples ont un graphe de données parfaitement
arborescent.
[...] Il n'existe pas de ramasse-miettes meilleur que les autres pour
toutes les situations. [...]
Ce n'est pas la question. La question c'est : y a-t-il un ramasse-miette
ou pas ? Pour Perl, la réponse est : "oui mais non".
(Et si la question est de savoir comment implémenter un ramasse-miette,
cela fait longtemps que les solutions mixtes existent : OCaml utilise
des stratégies différentes pour des générations différents, Python fait
du comptage de référence et une collection des données cycliques
au besoin, Java te permet même de changer de gc selon l'application,
etc.)
Paul Gaborit <Paul.Gaborit@invalid.invalid> writes:
[...]
Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
C'est quoi « exactement le contraire » ?
Selon moi, la plupart des programmes utilisent des références cycliques.
Seuls les plus simples ont un graphe de données parfaitement
arborescent.
[...] Il n'existe pas de ramasse-miettes meilleur que les autres pour
toutes les situations. [...]
Ce n'est pas la question. La question c'est : y a-t-il un ramasse-miette
ou pas ? Pour Perl, la réponse est : "oui mais non".
(Et si la question est de savoir comment implémenter un ramasse-miette,
cela fait longtemps que les solutions mixtes existent : OCaml utilise
des stratégies différentes pour des générations différents, Python fait
du comptage de référence et une collection des données cycliques
au besoin, Java te permet même de changer de gc selon l'application,
etc.)
Paul Gaborit writes:[...]Pour la plupart des programmes, c'est le meilleur choix puisqu'ils
n'utilisent pas de références cycliques.
J'aurais dit exactement le contraire,
C'est quoi « exactement le contraire » ?
Selon moi, la plupart des programmes utilisent des références cycliques.
Seuls les plus simples ont un graphe de données parfaitement
arborescent.
[...] Il n'existe pas de ramasse-miettes meilleur que les autres pour
toutes les situations. [...]
Ce n'est pas la question. La question c'est : y a-t-il un ramasse-miette
ou pas ? Pour Perl, la réponse est : "oui mais non".
(Et si la question est de savoir comment implémenter un ramasse-miette,
cela fait longtemps que les solutions mixtes existent : OCaml utilise
des stratégies différentes pour des générations différents, Python fait
du comptage de référence et une collection des données cycliques
au besoin, Java te permet même de changer de gc selon l'application,
etc.)
En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
Paul Gaborit écrivait :En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
Un simple mark & sweep à 3 couleurs c'est pas couteux et ça marche (j'en
ai implémenté un en embarqué avec une mémoire de l'ordre de 64 ko).
Après on peut faire plus fin en le faisant génératif, temps réel ou
concurrent...
Paul Gaborit <Paul.Gaborit@invalid.invalid> écrivait :
En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
Un simple mark & sweep à 3 couleurs c'est pas couteux et ça marche (j'en
ai implémenté un en embarqué avec une mémoire de l'ordre de 64 ko).
Après on peut faire plus fin en le faisant génératif, temps réel ou
concurrent...
Paul Gaborit écrivait :En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
Un simple mark & sweep à 3 couleurs c'est pas couteux et ça marche (j'en
ai implémenté un en embarqué avec une mémoire de l'ordre de 64 ko).
Après on peut faire plus fin en le faisant génératif, temps réel ou
concurrent...
Paul Gaborit écrivait :En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
Un simple mark & sweep à 3 couleurs c'est pas couteux et ça marche (j'en
ai implémenté un en embarqué avec une mémoire de l'ordre de 64 ko).
Après on peut faire plus fin en le faisant génératif, temps réel ou
concurrent...
Paul Gaborit <Paul.Gaborit@invalid.invalid> écrivait :
En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
Un simple mark & sweep à 3 couleurs c'est pas couteux et ça marche (j'en
ai implémenté un en embarqué avec une mémoire de l'ordre de 64 ko).
Après on peut faire plus fin en le faisant génératif, temps réel ou
concurrent...
Paul Gaborit écrivait :En fait, ce qui manque à Perl 5, ce sont des ramasses-miettes plus
puissants (mais plus coûteux) qu'on pourrait activer au besoin (dans les
cas où les compteurs de référence couplés aux références faibles ne
suffisent pas ou dans les cas où le developpeur ne veut vraiment pas se
soucier de la gestion mémoire).
Un simple mark & sweep à 3 couleurs c'est pas couteux et ça marche (j'en
ai implémenté un en embarqué avec une mémoire de l'ordre de 64 ko).
Après on peut faire plus fin en le faisant génératif, temps réel ou
concurrent...