On Sun, 02 Oct 2005 18:59:56 +0200, James Kanze :T'es taquin ;-p
N'est-ce pas ? Surtout que chaque fois que quelqu'un propose
la solution avec '=' pour éviter ce problème, je soulève
l'histoire du constructeur de copie privé.
Je reviens sur ce que j'ai dit : tu n'es pas taquin, tu es
sadique ;-)
On Sun, 02 Oct 2005 18:59:56 +0200, James Kanze <kanze@none>:
T'es taquin ;-p
N'est-ce pas ? Surtout que chaque fois que quelqu'un propose
la solution avec '=' pour éviter ce problème, je soulève
l'histoire du constructeur de copie privé.
Je reviens sur ce que j'ai dit : tu n'es pas taquin, tu es
sadique ;-)
On Sun, 02 Oct 2005 18:59:56 +0200, James Kanze :T'es taquin ;-p
N'est-ce pas ? Surtout que chaque fois que quelqu'un propose
la solution avec '=' pour éviter ce problème, je soulève
l'histoire du constructeur de copie privé.
Je reviens sur ce que j'ai dit : tu n'es pas taquin, tu es
sadique ;-)
Certes, mais il y a une perte de performance dont il vaut mieux être au
courant
Certes, mais il y a une perte de performance dont il vaut mieux être au
courant
Certes, mais il y a une perte de performance dont il vaut mieux être au
courant
On Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
:Certes, mais il y a une perte de performance dont il vaut mieux être
au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
On Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
<use.link.in.signature@ddress.invalid>:
Certes, mais il y a une perte de performance dont il vaut mieux être
au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
On Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
:Certes, mais il y a une perte de performance dont il vaut mieux être
au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
Je réponds à Fabien LE LEZ qui dansOn Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
:Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Je réponds à Fabien LE LEZ <gramster@gramster.com> qui dans
On Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
<use.link.in.signature@ddress.invalid>:
Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Je réponds à Fabien LE LEZ qui dansOn Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
:Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Patrick 'Zener' Brunet wrote:Je réponds à Fabien LE LEZ qui dansOn Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
:Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Ce qui veut dire, réalistiquement ?
Moi, je considère l'efficacité algorithmique au niveau de la
conception, éventuellement. (C-à-d que si je sais que j'ai des
millions d'éléments à traiter, j'évite des algorithmes
quadratiques.) Mais pour la reste, je fais du propre, sans trop
m'inquieter des performances. Et j'encapsule à mort. De façon à
ce que quand le profiler me dit qu'il y a un problème à un
endroit donné, je peux bien optimiser ce point sans
répercussions ailleurs.
J'ai vu des programmeurs qui essayaient à faire autrement. Qui
prenaient en compte les questions de performance des le début --
pas de std::string (ou son équivalent d'avant la norme), à cause
des allocations dynamiques, par exemple. Chose curieuse, leur
code était toujours moins rapide que le mien, quand il
importait.
Patrick 'Zener' Brunet wrote:
Je réponds à Fabien LE LEZ <gramster@gramster.com> qui dans
On Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
<use.link.in.signature@ddress.invalid>:
Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Ce qui veut dire, réalistiquement ?
Moi, je considère l'efficacité algorithmique au niveau de la
conception, éventuellement. (C-à-d que si je sais que j'ai des
millions d'éléments à traiter, j'évite des algorithmes
quadratiques.) Mais pour la reste, je fais du propre, sans trop
m'inquieter des performances. Et j'encapsule à mort. De façon à
ce que quand le profiler me dit qu'il y a un problème à un
endroit donné, je peux bien optimiser ce point sans
répercussions ailleurs.
J'ai vu des programmeurs qui essayaient à faire autrement. Qui
prenaient en compte les questions de performance des le début --
pas de std::string (ou son équivalent d'avant la norme), à cause
des allocations dynamiques, par exemple. Chose curieuse, leur
code était toujours moins rapide que le mien, quand il
importait.
Patrick 'Zener' Brunet wrote:Je réponds à Fabien LE LEZ qui dansOn Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
:Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il faut
optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Ce qui veut dire, réalistiquement ?
Moi, je considère l'efficacité algorithmique au niveau de la
conception, éventuellement. (C-à-d que si je sais que j'ai des
millions d'éléments à traiter, j'évite des algorithmes
quadratiques.) Mais pour la reste, je fais du propre, sans trop
m'inquieter des performances. Et j'encapsule à mort. De façon à
ce que quand le profiler me dit qu'il y a un problème à un
endroit donné, je peux bien optimiser ce point sans
répercussions ailleurs.
J'ai vu des programmeurs qui essayaient à faire autrement. Qui
prenaient en compte les questions de performance des le début --
pas de std::string (ou son équivalent d'avant la norme), à cause
des allocations dynamiques, par exemple. Chose curieuse, leur
code était toujours moins rapide que le mien, quand il
importait.
Je réponds à kanzePatrick 'Zener' Brunet wrote:Je réponds à Fabien LE LEZ qui dansOn Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
:Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il
faut optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Ce qui veut dire, réalistiquement ?
Par exemple, je me suis doté - un peu par défi, certes :-) -
de classes alternatives, comme par exemple une classe texte
qui travaille sur un buffer externe (simple tableau
automatique). Et donc lorsque je veux profiter des
fonctionnalités "avancées" de cette classe texte et que la
taille prévue pour le texte le permet, préférer cette classe
supprime le travail d'allocation.
Dans le cas que je citais (A = B + C;), la classe dynamique
fait intervenir un "don de buffer" qui est donc embarqué dans
ce composant et s'applique automatiquement à ce scénario
précis.
J'en ai d'autres...
* Par exemple utiliser des heaps "jetables" (sans libération
de chaque unité de mémoire) pour héberger des grappes d'objets
qui doivent être débarrassés globalement, ce qui arrive
typiquement dans la compilation type IA (élagage de branches
d'analyse),
* Par exemple aussi utiliser des heaps dont les algorithmes
d'allocation sont adaptés aux cycles et formats des données
hébergées (blocs fixes, buddy blocks, first fit / best fit,
...)
Je sais bien que ça serait peut-être complexe à enseigner à
des débutants et donc que paradoxalement ça génèrerait un
surcoût et des risques de bugs, mais ma position actuelle est
celle d'un chercheur. J'ai longtemps cru au code pérenne et
capitalisable, mais je suis en train de développer une autre
stratégie qui peut être plus avantageuse...
Moi, je considère l'efficacité algorithmique au niveau de la
conception, éventuellement. (C-à-d que si je sais que j'ai
des millions d'éléments à traiter, j'évite des algorithmes
quadratiques.) Mais pour la reste, je fais du propre, sans
trop m'inquieter des performances. Et j'encapsule à mort. De
façon à ce que quand le profiler me dit qu'il y a un
problème à un endroit donné, je peux bien optimiser ce point
sans répercussions ailleurs.
Je suis 100% d'accord sur le principe, mais ...
Je ne suis pas sûr que le profiler puisse forcément tout voir
dans le contexte IA-like où je travaille souvent et où les
liens entre modules ne sont pas forcément explicites (ie: ils
sont souvent dynamiques et peuvent être très optionnels).
Je réponds à kanze <kanze@gabi-soft.fr>
Patrick 'Zener' Brunet wrote:
Je réponds à Fabien LE LEZ <gramster@gramster.com> qui dans
On Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
<use.link.in.signature@ddress.invalid>:
Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il
faut optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Ce qui veut dire, réalistiquement ?
Par exemple, je me suis doté - un peu par défi, certes :-) -
de classes alternatives, comme par exemple une classe texte
qui travaille sur un buffer externe (simple tableau
automatique). Et donc lorsque je veux profiter des
fonctionnalités "avancées" de cette classe texte et que la
taille prévue pour le texte le permet, préférer cette classe
supprime le travail d'allocation.
Dans le cas que je citais (A = B + C;), la classe dynamique
fait intervenir un "don de buffer" qui est donc embarqué dans
ce composant et s'applique automatiquement à ce scénario
précis.
J'en ai d'autres...
* Par exemple utiliser des heaps "jetables" (sans libération
de chaque unité de mémoire) pour héberger des grappes d'objets
qui doivent être débarrassés globalement, ce qui arrive
typiquement dans la compilation type IA (élagage de branches
d'analyse),
* Par exemple aussi utiliser des heaps dont les algorithmes
d'allocation sont adaptés aux cycles et formats des données
hébergées (blocs fixes, buddy blocks, first fit / best fit,
...)
Je sais bien que ça serait peut-être complexe à enseigner à
des débutants et donc que paradoxalement ça génèrerait un
surcoût et des risques de bugs, mais ma position actuelle est
celle d'un chercheur. J'ai longtemps cru au code pérenne et
capitalisable, mais je suis en train de développer une autre
stratégie qui peut être plus avantageuse...
Moi, je considère l'efficacité algorithmique au niveau de la
conception, éventuellement. (C-à-d que si je sais que j'ai
des millions d'éléments à traiter, j'évite des algorithmes
quadratiques.) Mais pour la reste, je fais du propre, sans
trop m'inquieter des performances. Et j'encapsule à mort. De
façon à ce que quand le profiler me dit qu'il y a un
problème à un endroit donné, je peux bien optimiser ce point
sans répercussions ailleurs.
Je suis 100% d'accord sur le principe, mais ...
Je ne suis pas sûr que le profiler puisse forcément tout voir
dans le contexte IA-like où je travaille souvent et où les
liens entre modules ne sont pas forcément explicites (ie: ils
sont souvent dynamiques et peuvent être très optionnels).
Je réponds à kanzePatrick 'Zener' Brunet wrote:Je réponds à Fabien LE LEZ qui dansOn Mon, 3 Oct 2005 08:32:00 +0200, "Patrick 'Zener' Brunet"
:Certes, mais il y a une perte de performance dont il vaut
mieux être au courant
Yep. Ça permet d'optimiser ce que le profiler dit qu'il
faut optimiser...
Question de point de vue ;-)
Moi je préfère concevoir (efficace+robuste) d'emblée que
corriger ensuite pour rendre efficace en essayant de ne pas
casser la robustesse. Certes c'est plus complexe, mais ça
vaut le coup.
Ce qui veut dire, réalistiquement ?
Par exemple, je me suis doté - un peu par défi, certes :-) -
de classes alternatives, comme par exemple une classe texte
qui travaille sur un buffer externe (simple tableau
automatique). Et donc lorsque je veux profiter des
fonctionnalités "avancées" de cette classe texte et que la
taille prévue pour le texte le permet, préférer cette classe
supprime le travail d'allocation.
Dans le cas que je citais (A = B + C;), la classe dynamique
fait intervenir un "don de buffer" qui est donc embarqué dans
ce composant et s'applique automatiquement à ce scénario
précis.
J'en ai d'autres...
* Par exemple utiliser des heaps "jetables" (sans libération
de chaque unité de mémoire) pour héberger des grappes d'objets
qui doivent être débarrassés globalement, ce qui arrive
typiquement dans la compilation type IA (élagage de branches
d'analyse),
* Par exemple aussi utiliser des heaps dont les algorithmes
d'allocation sont adaptés aux cycles et formats des données
hébergées (blocs fixes, buddy blocks, first fit / best fit,
...)
Je sais bien que ça serait peut-être complexe à enseigner à
des débutants et donc que paradoxalement ça génèrerait un
surcoût et des risques de bugs, mais ma position actuelle est
celle d'un chercheur. J'ai longtemps cru au code pérenne et
capitalisable, mais je suis en train de développer une autre
stratégie qui peut être plus avantageuse...
Moi, je considère l'efficacité algorithmique au niveau de la
conception, éventuellement. (C-à-d que si je sais que j'ai
des millions d'éléments à traiter, j'évite des algorithmes
quadratiques.) Mais pour la reste, je fais du propre, sans
trop m'inquieter des performances. Et j'encapsule à mort. De
façon à ce que quand le profiler me dit qu'il y a un
problème à un endroit donné, je peux bien optimiser ce point
sans répercussions ailleurs.
Je suis 100% d'accord sur le principe, mais ...
Je ne suis pas sûr que le profiler puisse forcément tout voir
dans le contexte IA-like où je travaille souvent et où les
liens entre modules ne sont pas forcément explicites (ie: ils
sont souvent dynamiques et peuvent être très optionnels).