Fabien LE LEZ writes:je ne comprends pas pourquoi tu devrais croire que c'est
une multiplication par deux -- de fait tu as dejà fait une
hypothèse sur le type de « x ».
Mon hypothèse de travail est qu'il n'y a pas d'abus de
surcharge, et
pour moi « abus de surcharge » avant même d'avoir explorer le
domaine d'utilisation et les alternatives est un non-argument
: c'est du fanatisme.
qu'un operator* (à deux arguments) signifie bien quelque
chose qui ressemble fort à une multiplication.Je présume que ce que je veux dire, c'est que tout est
question de contexte.
En partie seulement. Si je vois un "++", je sais qu'il
s'agit soit d'une addition (type numérique), soit d'un
passage à l'élément suivant (itérateur). Si "++" sert à
multiplier par 3, je vais finir par le
Si « multiplier par 3 » est *l'implémentation* de passer à
l'élement suivant, alors on est bon pour la guillotine aussi ?
Fabien LE LEZ <gramster@gramster.com> writes:
je ne comprends pas pourquoi tu devrais croire que c'est
une multiplication par deux -- de fait tu as dejà fait une
hypothèse sur le type de « x ».
Mon hypothèse de travail est qu'il n'y a pas d'abus de
surcharge, et
pour moi « abus de surcharge » avant même d'avoir explorer le
domaine d'utilisation et les alternatives est un non-argument
: c'est du fanatisme.
qu'un operator* (à deux arguments) signifie bien quelque
chose qui ressemble fort à une multiplication.
Je présume que ce que je veux dire, c'est que tout est
question de contexte.
En partie seulement. Si je vois un "++", je sais qu'il
s'agit soit d'une addition (type numérique), soit d'un
passage à l'élément suivant (itérateur). Si "++" sert à
multiplier par 3, je vais finir par le
Si « multiplier par 3 » est *l'implémentation* de passer à
l'élement suivant, alors on est bon pour la guillotine aussi ?
Fabien LE LEZ writes:je ne comprends pas pourquoi tu devrais croire que c'est
une multiplication par deux -- de fait tu as dejà fait une
hypothèse sur le type de « x ».
Mon hypothèse de travail est qu'il n'y a pas d'abus de
surcharge, et
pour moi « abus de surcharge » avant même d'avoir explorer le
domaine d'utilisation et les alternatives est un non-argument
: c'est du fanatisme.
qu'un operator* (à deux arguments) signifie bien quelque
chose qui ressemble fort à une multiplication.Je présume que ce que je veux dire, c'est que tout est
question de contexte.
En partie seulement. Si je vois un "++", je sais qu'il
s'agit soit d'une addition (type numérique), soit d'un
passage à l'élément suivant (itérateur). Si "++" sert à
multiplier par 3, je vais finir par le
Si « multiplier par 3 » est *l'implémentation* de passer à
l'élement suivant, alors on est bon pour la guillotine aussi ?
Ou plus prêt de mon point de vue d'enseignant, qu'un
débutant ayant suivit un cours de C++ peut ne pas avoir
vu << comme opérateur de décalage binaire, et que c'est
peut-être plus rare pour du C.
Ou plus prêt de mon point de vue d'enseignant, qu'un
débutant ayant suivit un cours de C++ peut ne pas avoir
vu << comme opérateur de décalage binaire, et que c'est
peut-être plus rare pour du C.
Ou plus prêt de mon point de vue d'enseignant, qu'un
débutant ayant suivit un cours de C++ peut ne pas avoir
vu << comme opérateur de décalage binaire, et que c'est
peut-être plus rare pour du C.
Fabien LE LEZ writes:On 06 Mar 2006 16:38:59 +0100, Gabriel Dos Reis
:Que les développeur C++ sont plus habitués à penser
sémantique avant de penser optimisation ?
comme le montre la bibliothèque standard de C++ ?
La SL est à mi-chemin entre le compilateur et un programme
"normal" : elle doit être optimisée pour que justement le
programmeur n'ait pas à se préoccuper d'optimisation.
je parle de l'initerface utilisateur -- pas de son
implémentation. L'optimisation a pris le dessus sur la
sémantique.
Fabien LE LEZ <gramster@gramster.com> writes:
On 06 Mar 2006 16:38:59 +0100, Gabriel Dos Reis
<gdr@integrable-solutions.net>:
Que les développeur C++ sont plus habitués à penser
sémantique avant de penser optimisation ?
comme le montre la bibliothèque standard de C++ ?
La SL est à mi-chemin entre le compilateur et un programme
"normal" : elle doit être optimisée pour que justement le
programmeur n'ait pas à se préoccuper d'optimisation.
je parle de l'initerface utilisateur -- pas de son
implémentation. L'optimisation a pris le dessus sur la
sémantique.
Fabien LE LEZ writes:On 06 Mar 2006 16:38:59 +0100, Gabriel Dos Reis
:Que les développeur C++ sont plus habitués à penser
sémantique avant de penser optimisation ?
comme le montre la bibliothèque standard de C++ ?
La SL est à mi-chemin entre le compilateur et un programme
"normal" : elle doit être optimisée pour que justement le
programmeur n'ait pas à se préoccuper d'optimisation.
je parle de l'initerface utilisateur -- pas de son
implémentation. L'optimisation a pris le dessus sur la
sémantique.
Marc Boyer wrote on 06/03/2006 18:08:Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
Je ne l'avais pas noté.
selon K&R, il était réservé (/réservé/ uniquement) par certaines
implémentations (de même que "fortran").Je reviens quand même sur le contexte de cette discussion qui
était de la fonction int Double([const] int x); qui retourne
le double de x *devrait* se coder
return x<<1;
j'ai bien dit "devrait" (should) et non "doit" (shall).
cette remarque ne pouvait avoir de sens que dans un contexte un peu plus
précis, or ce n'était pas l'objet initial; de plus l'extrait (d'un post
annulé mais pas assez vite) ne reprenait que ce point alors que
l'élément discuté concernait "int Rapport(const int a,const int b)" qui
ne compilait pas.
profitant de votre fil posé et constructif, je préciserai que la réponse
"devrait" était un raccourci à "une telle fonction ne 'doit' jamais
exister" mais l'opération doit être inlinée (sinon le cout d'appel est
prohibitif par rapport au traitement) et ce codage selon l'opérande et
la famille de compilos visés pourra être "optimisé d'office" par un
shift si cela semble opportun.
or donc, la question concernait l'usage du modifier 'const' et non le
bien fondé d'une telle fonction, j'ai donc opté pour la version courte,
un peu pour voir ... et j'ai vu.
pour répondre à la remarque de l'autre post:A tout prendre, je prefererais qu'il sache qu'un decalage
a droite c'est une *division* par deux sur un entier non
signe et que c'est dependant de l'implementation sur
un entier signe.
Oui ;-)
il a été rappellé que les opérateurs de décalage sont contextuels (ils
ne sont pas un codage fixe en asm);
pour un décalage à droite, si le
type entier est signé, le compilo doit générer un décalage signé
(restauration du bit de signe, soit SAR sur Intel) tandis qu'un opérande
non signé subira un décalage non signé (injection de 0 à gauche, SHR sur
Intel).
Marc Boyer wrote on 06/03/2006 18:08:
Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
Je ne l'avais pas noté.
selon K&R, il était réservé (/réservé/ uniquement) par certaines
implémentations (de même que "fortran").
Je reviens quand même sur le contexte de cette discussion qui
était de la fonction int Double([const] int x); qui retourne
le double de x *devrait* se coder
return x<<1;
j'ai bien dit "devrait" (should) et non "doit" (shall).
cette remarque ne pouvait avoir de sens que dans un contexte un peu plus
précis, or ce n'était pas l'objet initial; de plus l'extrait (d'un post
annulé mais pas assez vite) ne reprenait que ce point alors que
l'élément discuté concernait "int Rapport(const int a,const int b)" qui
ne compilait pas.
profitant de votre fil posé et constructif, je préciserai que la réponse
"devrait" était un raccourci à "une telle fonction ne 'doit' jamais
exister" mais l'opération doit être inlinée (sinon le cout d'appel est
prohibitif par rapport au traitement) et ce codage selon l'opérande et
la famille de compilos visés pourra être "optimisé d'office" par un
shift si cela semble opportun.
or donc, la question concernait l'usage du modifier 'const' et non le
bien fondé d'une telle fonction, j'ai donc opté pour la version courte,
un peu pour voir ... et j'ai vu.
pour répondre à la remarque de l'autre post:
A tout prendre, je prefererais qu'il sache qu'un decalage
a droite c'est une *division* par deux sur un entier non
signe et que c'est dependant de l'implementation sur
un entier signe.
Oui ;-)
il a été rappellé que les opérateurs de décalage sont contextuels (ils
ne sont pas un codage fixe en asm);
pour un décalage à droite, si le
type entier est signé, le compilo doit générer un décalage signé
(restauration du bit de signe, soit SAR sur Intel) tandis qu'un opérande
non signé subira un décalage non signé (injection de 0 à gauche, SHR sur
Intel).
Marc Boyer wrote on 06/03/2006 18:08:Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
Je ne l'avais pas noté.
selon K&R, il était réservé (/réservé/ uniquement) par certaines
implémentations (de même que "fortran").Je reviens quand même sur le contexte de cette discussion qui
était de la fonction int Double([const] int x); qui retourne
le double de x *devrait* se coder
return x<<1;
j'ai bien dit "devrait" (should) et non "doit" (shall).
cette remarque ne pouvait avoir de sens que dans un contexte un peu plus
précis, or ce n'était pas l'objet initial; de plus l'extrait (d'un post
annulé mais pas assez vite) ne reprenait que ce point alors que
l'élément discuté concernait "int Rapport(const int a,const int b)" qui
ne compilait pas.
profitant de votre fil posé et constructif, je préciserai que la réponse
"devrait" était un raccourci à "une telle fonction ne 'doit' jamais
exister" mais l'opération doit être inlinée (sinon le cout d'appel est
prohibitif par rapport au traitement) et ce codage selon l'opérande et
la famille de compilos visés pourra être "optimisé d'office" par un
shift si cela semble opportun.
or donc, la question concernait l'usage du modifier 'const' et non le
bien fondé d'une telle fonction, j'ai donc opté pour la version courte,
un peu pour voir ... et j'ai vu.
pour répondre à la remarque de l'autre post:A tout prendre, je prefererais qu'il sache qu'un decalage
a droite c'est une *division* par deux sur un entier non
signe et que c'est dependant de l'implementation sur
un entier signe.
Oui ;-)
il a été rappellé que les opérateurs de décalage sont contextuels (ils
ne sont pas un codage fixe en asm);
pour un décalage à droite, si le
type entier est signé, le compilo doit générer un décalage signé
(restauration du bit de signe, soit SAR sur Intel) tandis qu'un opérande
non signé subira un décalage non signé (injection de 0 à gauche, SHR sur
Intel).
Très certainement, nous attendons de l'étudiant « electrical
engineer » ou « computer engineer » qui prend le cours de
C++ 101 de savoir ce qu'est le décalage binaire et comment
cela s'écrit en C++.
C'est vrai ?
Et dire que mes étudiants me trouvent exigeants...
Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Très certainement, nous attendons de l'étudiant « electrical
engineer » ou « computer engineer » qui prend le cours de
C++ 101 de savoir ce qu'est le décalage binaire et comment
cela s'écrit en C++.
C'est vrai ?
Et dire que mes étudiants me trouvent exigeants...
Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Très certainement, nous attendons de l'étudiant « electrical
engineer » ou « computer engineer » qui prend le cours de
C++ 101 de savoir ce qu'est le décalage binaire et comment
cela s'écrit en C++.
C'est vrai ?
Et dire que mes étudiants me trouvent exigeants...
Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Je reviens quand même sur le contexte de cette discussion qui
était de la fonction int Double([const] int x); qui retourne
le double de x *devrait* se coder
return x<<1;
j'ai bien dit "devrait" (should) et non "doit" (shall).
cette remarque ne pouvait avoir de sens que dans un contexte un peu plus
précis,
profitant de votre fil posé et constructif, je préciserai que la réponse
"devrait" était un raccourci à "une telle fonction ne 'doit' jamais
exister" mais l'opération doit être inlinée (sinon le cout d'appel est
prohibitif par rapport au traitement) et ce codage selon l'opérande et
la famille de compilos visés pourra être "optimisé d'office" par un
shift si cela semble opportun.
Je reviens quand même sur le contexte de cette discussion qui
était de la fonction int Double([const] int x); qui retourne
le double de x *devrait* se coder
return x<<1;
j'ai bien dit "devrait" (should) et non "doit" (shall).
cette remarque ne pouvait avoir de sens que dans un contexte un peu plus
précis,
profitant de votre fil posé et constructif, je préciserai que la réponse
"devrait" était un raccourci à "une telle fonction ne 'doit' jamais
exister" mais l'opération doit être inlinée (sinon le cout d'appel est
prohibitif par rapport au traitement) et ce codage selon l'opérande et
la famille de compilos visés pourra être "optimisé d'office" par un
shift si cela semble opportun.
Je reviens quand même sur le contexte de cette discussion qui
était de la fonction int Double([const] int x); qui retourne
le double de x *devrait* se coder
return x<<1;
j'ai bien dit "devrait" (should) et non "doit" (shall).
cette remarque ne pouvait avoir de sens que dans un contexte un peu plus
précis,
profitant de votre fil posé et constructif, je préciserai que la réponse
"devrait" était un raccourci à "une telle fonction ne 'doit' jamais
exister" mais l'opération doit être inlinée (sinon le cout d'appel est
prohibitif par rapport au traitement) et ce codage selon l'opérande et
la famille de compilos visés pourra être "optimisé d'office" par un
shift si cela semble opportun.
Sylvain wrote:Marc Boyer wrote on 03/03/2006 12:24:devrait lire return 2.0 * x;
Et pourquoi ce passage en double ?
j'ai été abusé par le "Double" (nom de fonction) que j'ai lu
comme "double" (type retour), dans un tel cas il fait sens de
forcer une multiplication flottante ; j'ai annulé mon post
après avoir relu.
C'est vrai que le nom n'est pas superbe. (Mais
réalistiquement... je crois que l'intention n'était que d'avoir
un exemple simple, et non de donner du code de production. Je
doute fort que dans un vrai projet, on aurait jamais une telle
fonction.)
Sylvain wrote:
Marc Boyer wrote on 03/03/2006 12:24:
devrait lire return 2.0 * x;
Et pourquoi ce passage en double ?
j'ai été abusé par le "Double" (nom de fonction) que j'ai lu
comme "double" (type retour), dans un tel cas il fait sens de
forcer une multiplication flottante ; j'ai annulé mon post
après avoir relu.
C'est vrai que le nom n'est pas superbe. (Mais
réalistiquement... je crois que l'intention n'était que d'avoir
un exemple simple, et non de donner du code de production. Je
doute fort que dans un vrai projet, on aurait jamais une telle
fonction.)
Sylvain wrote:Marc Boyer wrote on 03/03/2006 12:24:devrait lire return 2.0 * x;
Et pourquoi ce passage en double ?
j'ai été abusé par le "Double" (nom de fonction) que j'ai lu
comme "double" (type retour), dans un tel cas il fait sens de
forcer une multiplication flottante ; j'ai annulé mon post
après avoir relu.
C'est vrai que le nom n'est pas superbe. (Mais
réalistiquement... je crois que l'intention n'était que d'avoir
un exemple simple, et non de donner du code de production. Je
doute fort que dans un vrai projet, on aurait jamais une telle
fonction.)