Marc Boyer writes:
| > Definis « débutant. »
|
| Diplomé en informatique depuis moins de 3 ans ?
et quand ils sont en première année de fac (« freshmen »), il sont
pré^4 débutants ?
L'étudiant « electrical engineer » (et non « computer scientist ») qui
est nouveau C++ juste pour pouvoir écrire des drivers pour sa machine
et périphérique est n'est pas un débutant mais un « alien » ?
| 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.
le problème ici est qu'en France on a tendance à mettre un peu de tout
sous le vocable « informaticien »,
De ce que je peux voir ici, les « electrical engineer »
sont probablement plus expérimentés en programmation que les «
computer scientists ». En fait, lorsque j'étais en France c'est aussi
vrai ; peut-être que c'est un phénomène général, j'en sais rien.
Ceux qui utilisent sérieusement C++ dans les systèmes embarqués
(voir la page de BS pour plus d'info) et que j'ai rencontrés sont
contents de ne pas voir de « trous » laissés par C++ : ces gens là sont
en contact direct avec le hardware si je puis dire.
L'idée que le shift ne se verrait qu'en C -- soit disant que c'est le
truc de bas niveau -- me semble de la pure hérésie et en
contradiction avec l'un des critères de conceptions de C++ : ne
laisser partiquement aucune place entre le hardware et le programme
lorsque nécessaire (la seulee place, si est elle nécessaire d'être
occupée, est laissée à l'assembleur.
Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
| Qu'il ne sache pas si un décalage à droite correspond à une
| multiplication par deux en complément à 1 ou non, ça me
| semble aussi acceptable.
|
| J'ai prété mon "Accelerated C++", donc je ne peux pas
| dire s'il le présente. Un grep sur les sources semble montrer
| qu'il n'utilise "<<" que pour des E/S ostream.
Oui, mais de là à en tirer une théroème universel et moraliser les
gens avec ça, il y a un pas que je me garderai de franchir. Il me
semble que le contexte est important.
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
| > Definis « débutant. »
|
| Diplomé en informatique depuis moins de 3 ans ?
et quand ils sont en première année de fac (« freshmen »), il sont
pré^4 débutants ?
L'étudiant « electrical engineer » (et non « computer scientist ») qui
est nouveau C++ juste pour pouvoir écrire des drivers pour sa machine
et périphérique est n'est pas un débutant mais un « alien » ?
| 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.
le problème ici est qu'en France on a tendance à mettre un peu de tout
sous le vocable « informaticien »,
De ce que je peux voir ici, les « electrical engineer »
sont probablement plus expérimentés en programmation que les «
computer scientists ». En fait, lorsque j'étais en France c'est aussi
vrai ; peut-être que c'est un phénomène général, j'en sais rien.
Ceux qui utilisent sérieusement C++ dans les systèmes embarqués
(voir la page de BS pour plus d'info) et que j'ai rencontrés sont
contents de ne pas voir de « trous » laissés par C++ : ces gens là sont
en contact direct avec le hardware si je puis dire.
L'idée que le shift ne se verrait qu'en C -- soit disant que c'est le
truc de bas niveau -- me semble de la pure hérésie et en
contradiction avec l'un des critères de conceptions de C++ : ne
laisser partiquement aucune place entre le hardware et le programme
lorsque nécessaire (la seulee place, si est elle nécessaire d'être
occupée, est laissée à l'assembleur.
Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
| Qu'il ne sache pas si un décalage à droite correspond à une
| multiplication par deux en complément à 1 ou non, ça me
| semble aussi acceptable.
|
| J'ai prété mon "Accelerated C++", donc je ne peux pas
| dire s'il le présente. Un grep sur les sources semble montrer
| qu'il n'utilise "<<" que pour des E/S ostream.
Oui, mais de là à en tirer une théroème universel et moraliser les
gens avec ça, il y a un pas que je me garderai de franchir. Il me
semble que le contexte est important.
Marc Boyer writes:
| > Definis « débutant. »
|
| Diplomé en informatique depuis moins de 3 ans ?
et quand ils sont en première année de fac (« freshmen »), il sont
pré^4 débutants ?
L'étudiant « electrical engineer » (et non « computer scientist ») qui
est nouveau C++ juste pour pouvoir écrire des drivers pour sa machine
et périphérique est n'est pas un débutant mais un « alien » ?
| 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.
le problème ici est qu'en France on a tendance à mettre un peu de tout
sous le vocable « informaticien »,
De ce que je peux voir ici, les « electrical engineer »
sont probablement plus expérimentés en programmation que les «
computer scientists ». En fait, lorsque j'étais en France c'est aussi
vrai ; peut-être que c'est un phénomène général, j'en sais rien.
Ceux qui utilisent sérieusement C++ dans les systèmes embarqués
(voir la page de BS pour plus d'info) et que j'ai rencontrés sont
contents de ne pas voir de « trous » laissés par C++ : ces gens là sont
en contact direct avec le hardware si je puis dire.
L'idée que le shift ne se verrait qu'en C -- soit disant que c'est le
truc de bas niveau -- me semble de la pure hérésie et en
contradiction avec l'un des critères de conceptions de C++ : ne
laisser partiquement aucune place entre le hardware et le programme
lorsque nécessaire (la seulee place, si est elle nécessaire d'être
occupée, est laissée à l'assembleur.
Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
| Qu'il ne sache pas si un décalage à droite correspond à une
| multiplication par deux en complément à 1 ou non, ça me
| semble aussi acceptable.
|
| J'ai prété mon "Accelerated C++", donc je ne peux pas
| dire s'il le présente. Un grep sur les sources semble montrer
| qu'il n'utilise "<<" que pour des E/S ostream.
Oui, mais de là à en tirer une théroème universel et moraliser les
gens avec ça, il y a un pas que je me garderai de franchir. Il me
semble que le contexte est important.
Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Qu'il se ne souvienne pas comment cela se note en C (ou en C++ ou
en Java), je juge cela moins grave.
Qu'il ne sache pas si un décalage à droite correspond à une
multiplication par deux en complément à 1 ou non, ça me
semble aussi acceptable.
Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Qu'il se ne souvienne pas comment cela se note en C (ou en C++ ou
en Java), je juge cela moins grave.
Qu'il ne sache pas si un décalage à droite correspond à une
multiplication par deux en complément à 1 ou non, ça me
semble aussi acceptable.
Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Qu'il se ne souvienne pas comment cela se note en C (ou en C++ ou
en Java), je juge cela moins grave.
Qu'il ne sache pas si un décalage à droite correspond à une
multiplication par deux en complément à 1 ou non, ça me
semble aussi acceptable.
si on ne doit pas se préoccuper de quel type est x et qu'on écrit
« x << 2 », je ne comprends pas pourquoi tu devrais croire que c'est
une multiplication par deux
si on ne doit pas se préoccuper de quel type est x et qu'on écrit
« x << 2 », je ne comprends pas pourquoi tu devrais croire que c'est
une multiplication par deux
si on ne doit pas se préoccuper de quel type est x et qu'on écrit
« x << 2 », je ne comprends pas pourquoi tu devrais croire que c'est
une multiplication par deux
Marc Boyer wrote:Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Qu'il se ne souvienne pas comment cela se note en C (ou en C++ ou
en Java), je juge cela moins grave.
Qu'il ne sache pas si un décalage à droite correspond à une
multiplication par deux en complément à 1 ou non, ça me
semble aussi acceptable.
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.
Marc Boyer wrote:
Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Qu'il se ne souvienne pas comment cela se note en C (ou en C++ ou
en Java), je juge cela moins grave.
Qu'il ne sache pas si un décalage à droite correspond à une
multiplication par deux en complément à 1 ou non, ça me
semble aussi acceptable.
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.
Marc Boyer wrote:Qu'un informaticien sache ce qu'est un décalage, c'est une
exigence que je partage.
Qu'il se ne souvienne pas comment cela se note en C (ou en C++ ou
en Java), je juge cela moins grave.
Qu'il ne sache pas si un décalage à droite correspond à une
multiplication par deux en complément à 1 ou non, ça me
semble aussi acceptable.
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.
Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
Je ne l'avais pas noté.
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;
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 ;-)
Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
Je ne l'avais pas noté.
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;
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 ;-)
Et tu remarqueras que le C++,
contrairement au C, a spécifiquement introduit un mot clé -- « asm »).
Je ne l'avais pas noté.
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;
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 ;-)
On 06 Mar 2006 15:43:15 +0100, Gabriel Dos Reis :| > ce bavardage (ou avis très personnel) m'amuse un peu, si
un codeur C ne | > sait pas lire "x << n" je lui
conseillerais humblement de commencer à | > s'initier au
langage qu'il pense utiliser ou de passer à autre chose.
| Et s'il faisait du C++ justement ?
Cela change-t-il quelque chose ?
Je pense que oui.
Il me semble qu'en C on a plus le réflexe "assembleur" :
bidouillage de bits et compagnie. Je ne dis pas que c'est une
bonne idée, mais un programmeur C a sans doute déjà vu ça.
On 06 Mar 2006 15:43:15 +0100, Gabriel Dos Reis :
| > ce bavardage (ou avis très personnel) m'amuse un peu, si
un codeur C ne | > sait pas lire "x << n" je lui
conseillerais humblement de commencer à | > s'initier au
langage qu'il pense utiliser ou de passer à autre chose.
| Et s'il faisait du C++ justement ?
Cela change-t-il quelque chose ?
Je pense que oui.
Il me semble qu'en C on a plus le réflexe "assembleur" :
bidouillage de bits et compagnie. Je ne dis pas que c'est une
bonne idée, mais un programmeur C a sans doute déjà vu ça.
On 06 Mar 2006 15:43:15 +0100, Gabriel Dos Reis :| > ce bavardage (ou avis très personnel) m'amuse un peu, si
un codeur C ne | > sait pas lire "x << n" je lui
conseillerais humblement de commencer à | > s'initier au
langage qu'il pense utiliser ou de passer à autre chose.
| Et s'il faisait du C++ justement ?
Cela change-t-il quelque chose ?
Je pense que oui.
Il me semble qu'en C on a plus le réflexe "assembleur" :
bidouillage de bits et compagnie. Je ne dis pas que c'est une
bonne idée, mais un programmeur C a sans doute déjà vu ça.
Fabien LE LEZ writes:On 06 Mar 2006 15:43:15 +0100, Gabriel Dos Reis :ce bavardage (ou avis très personnel) m'amuse un peu,
si un codeur C ne sait pas lire "x << n" je lui
conseillerais humblement de commencer à s'initier au
langage qu'il pense utiliser ou de passer à autre
chose.
Et s'il faisait du C++ justement ?
Cela change-t-il quelque chose ?
Je pense que oui.
Il me semble qu'en C on a plus le réflexe "assembleur" :
bidouillage de bits et compagnie. Je ne dis pas que c'est
une bonne idée, mais un programmeur C a sans doute déjà vu
ça.
Mon analyse est que ce reflexe se retrouve bien des deux côtés
avec une acuité encore plus forte en C++ -- où il est souvent
question de « performance » maximum au détriment de la
justesse et de la robustesse.
En C++, la situation est différente : d'une part, en voyant
un "<<", on pense immédiatement aux iostream ;
pas moi ;
et les programmeurs C++ que je connais (et que respecte
profondément) lisent « << » dans le contexte.
d'autre part, il me semble qu'en C++ on a un réflexe
"généricité" : si je dois multiplier x par 2,
justement si on parle de genéricité, alors « << » veut dire
« << » et pas multiplier par deux.
« x << y » fait ce que « << » est défini de faire dans le
contexte d'utilisation : si « x » est un stream alors c'est
probablement une insertion, si c'est un entier c'est
probablement un shift.
En géneral « x << y » fait ce que « << » est défini dans le
contexte de « x » et « y ».
La généricité, justement d'avoir du code « symbolique », dont
les interprétations dans différents contextes donnent les
algorithmes initiaux et que le tout reste compréhensible dans
le contexte d'utilisation.c'est justement j'écris x*2 sans me préoccuper de savoir de
quel type est x
si on ne doit pas se préoccuper de quel type est x et qu'on
écrit « x << 2 », 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 ».
Je présume que ce que je veux dire, c'est que tout est
question de contexte. Dans les tous les cas, je ne souscris
pas au fanatisme que certains passeraient sous le vocable «
professionnalisme. » (Selon le lemme de McCain il paraît que
ce qui en parle le plus en font le moins).
Fabien LE LEZ <gramster@gramster.com> writes:
On 06 Mar 2006 15:43:15 +0100, Gabriel Dos Reis :
ce bavardage (ou avis très personnel) m'amuse un peu,
si un codeur C ne sait pas lire "x << n" je lui
conseillerais humblement de commencer à s'initier au
langage qu'il pense utiliser ou de passer à autre
chose.
Et s'il faisait du C++ justement ?
Cela change-t-il quelque chose ?
Je pense que oui.
Il me semble qu'en C on a plus le réflexe "assembleur" :
bidouillage de bits et compagnie. Je ne dis pas que c'est
une bonne idée, mais un programmeur C a sans doute déjà vu
ça.
Mon analyse est que ce reflexe se retrouve bien des deux côtés
avec une acuité encore plus forte en C++ -- où il est souvent
question de « performance » maximum au détriment de la
justesse et de la robustesse.
En C++, la situation est différente : d'une part, en voyant
un "<<", on pense immédiatement aux iostream ;
pas moi ;
et les programmeurs C++ que je connais (et que respecte
profondément) lisent « << » dans le contexte.
d'autre part, il me semble qu'en C++ on a un réflexe
"généricité" : si je dois multiplier x par 2,
justement si on parle de genéricité, alors « << » veut dire
« << » et pas multiplier par deux.
« x << y » fait ce que « << » est défini de faire dans le
contexte d'utilisation : si « x » est un stream alors c'est
probablement une insertion, si c'est un entier c'est
probablement un shift.
En géneral « x << y » fait ce que « << » est défini dans le
contexte de « x » et « y ».
La généricité, justement d'avoir du code « symbolique », dont
les interprétations dans différents contextes donnent les
algorithmes initiaux et que le tout reste compréhensible dans
le contexte d'utilisation.
c'est justement j'écris x*2 sans me préoccuper de savoir de
quel type est x
si on ne doit pas se préoccuper de quel type est x et qu'on
écrit « x << 2 », 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 ».
Je présume que ce que je veux dire, c'est que tout est
question de contexte. Dans les tous les cas, je ne souscris
pas au fanatisme que certains passeraient sous le vocable «
professionnalisme. » (Selon le lemme de McCain il paraît que
ce qui en parle le plus en font le moins).
Fabien LE LEZ writes:On 06 Mar 2006 15:43:15 +0100, Gabriel Dos Reis :ce bavardage (ou avis très personnel) m'amuse un peu,
si un codeur C ne sait pas lire "x << n" je lui
conseillerais humblement de commencer à s'initier au
langage qu'il pense utiliser ou de passer à autre
chose.
Et s'il faisait du C++ justement ?
Cela change-t-il quelque chose ?
Je pense que oui.
Il me semble qu'en C on a plus le réflexe "assembleur" :
bidouillage de bits et compagnie. Je ne dis pas que c'est
une bonne idée, mais un programmeur C a sans doute déjà vu
ça.
Mon analyse est que ce reflexe se retrouve bien des deux côtés
avec une acuité encore plus forte en C++ -- où il est souvent
question de « performance » maximum au détriment de la
justesse et de la robustesse.
En C++, la situation est différente : d'une part, en voyant
un "<<", on pense immédiatement aux iostream ;
pas moi ;
et les programmeurs C++ que je connais (et que respecte
profondément) lisent « << » dans le contexte.
d'autre part, il me semble qu'en C++ on a un réflexe
"généricité" : si je dois multiplier x par 2,
justement si on parle de genéricité, alors « << » veut dire
« << » et pas multiplier par deux.
« x << y » fait ce que « << » est défini de faire dans le
contexte d'utilisation : si « x » est un stream alors c'est
probablement une insertion, si c'est un entier c'est
probablement un shift.
En géneral « x << y » fait ce que « << » est défini dans le
contexte de « x » et « y ».
La généricité, justement d'avoir du code « symbolique », dont
les interprétations dans différents contextes donnent les
algorithmes initiaux et que le tout reste compréhensible dans
le contexte d'utilisation.c'est justement j'écris x*2 sans me préoccuper de savoir de
quel type est x
si on ne doit pas se préoccuper de quel type est x et qu'on
écrit « x << 2 », 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 ».
Je présume que ce que je veux dire, c'est que tout est
question de contexte. Dans les tous les cas, je ne souscris
pas au fanatisme que certains passeraient sous le vocable «
professionnalisme. » (Selon le lemme de McCain il paraît que
ce qui en parle le plus en font le moins).