Marc writes:
| Pierre Maurette wrote:
|
| > Mickaël Wolff, le 14/09/2009 a écrit :
| >> C'est vrai que les types pointeurs sur fonction facilitent la lecture,
| >> sans typedef ;)
|
| Si on arrive à faire comprendre les typedefs pour des fonctions, la
| syntaxe de déclaration des pointeurs doit moins perturber ensuite. Non,
| ce n'est pas une suggestion sur l'ordre dans lequel enseigner ces choses
| :-)
|
| Je me demande si :
| typedef int *int_ptr;
| int_ptr p;
| aiderait à expliquer (séparer l'aspect description du type de la
| déclaration de variable). Peut-être pas.
Que penses-tu de
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
?
Marc <marc.glisse@gmail.com> writes:
| Pierre Maurette wrote:
|
| > Mickaël Wolff, le 14/09/2009 a écrit :
| >> C'est vrai que les types pointeurs sur fonction facilitent la lecture,
| >> sans typedef ;)
|
| Si on arrive à faire comprendre les typedefs pour des fonctions, la
| syntaxe de déclaration des pointeurs doit moins perturber ensuite. Non,
| ce n'est pas une suggestion sur l'ordre dans lequel enseigner ces choses
| :-)
|
| Je me demande si :
| typedef int *int_ptr;
| int_ptr p;
| aiderait à expliquer (séparer l'aspect description du type de la
| déclaration de variable). Peut-être pas.
Que penses-tu de
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
?
Marc writes:
| Pierre Maurette wrote:
|
| > Mickaël Wolff, le 14/09/2009 a écrit :
| >> C'est vrai que les types pointeurs sur fonction facilitent la lecture,
| >> sans typedef ;)
|
| Si on arrive à faire comprendre les typedefs pour des fonctions, la
| syntaxe de déclaration des pointeurs doit moins perturber ensuite. Non,
| ce n'est pas une suggestion sur l'ordre dans lequel enseigner ces choses
| :-)
|
| Je me demande si :
| typedef int *int_ptr;
| int_ptr p;
| aiderait à expliquer (séparer l'aspect description du type de la
| déclaration de variable). Peut-être pas.
Que penses-tu de
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
?
| C'est un idiome de style:
|
| void
| f(T a, T b, FILE *c)
| {
| /* je fais des trucs avec a et b */
| /* g, elle, utilisera c */
| g(a, b, c);
| }
|
| sauf semantique invraisemblable, j'ai generalement le droit de faire ce
| genre de chose, et pas de necessite imperieuse de savoir ce qui se cache
| derriere c...
|
| ... mais je dois inclure<stdio.h> pour que ca fonctionne...
Comment ce code serait-il allégé sans l'inclusion de<stdio.h> ?
| C'est un idiome de style:
|
| void
| f(T a, T b, FILE *c)
| {
| /* je fais des trucs avec a et b */
| /* g, elle, utilisera c */
| g(a, b, c);
| }
|
| sauf semantique invraisemblable, j'ai generalement le droit de faire ce
| genre de chose, et pas de necessite imperieuse de savoir ce qui se cache
| derriere c...
|
| ... mais je dois inclure<stdio.h> pour que ca fonctionne...
Comment ce code serait-il allégé sans l'inclusion de<stdio.h> ?
| C'est un idiome de style:
|
| void
| f(T a, T b, FILE *c)
| {
| /* je fais des trucs avec a et b */
| /* g, elle, utilisera c */
| g(a, b, c);
| }
|
| sauf semantique invraisemblable, j'ai generalement le droit de faire ce
| genre de chose, et pas de necessite imperieuse de savoir ce qui se cache
| derriere c...
|
| ... mais je dois inclure<stdio.h> pour que ca fonctionne...
Comment ce code serait-il allégé sans l'inclusion de<stdio.h> ?
Difference d'usage. Comme je porte souvent du code ecrit ailleurs, les
fichiers d'entete imbriques me causent plus souvent des migraines que ceux
des projets plus simples... les projets gnu etant generalement
particulierement gratines, d'ailleurs, cote horreurs qui ne compilent pas
trop en dehors de linux, qu'on ne sait pas trop pourquoi au depart...
Difference d'usage. Comme je porte souvent du code ecrit ailleurs, les
fichiers d'entete imbriques me causent plus souvent des migraines que ceux
des projets plus simples... les projets gnu etant generalement
particulierement gratines, d'ailleurs, cote horreurs qui ne compilent pas
trop en dehors de linux, qu'on ne sait pas trop pourquoi au depart...
Difference d'usage. Comme je porte souvent du code ecrit ailleurs, les
fichiers d'entete imbriques me causent plus souvent des migraines que ceux
des projets plus simples... les projets gnu etant generalement
particulierement gratines, d'ailleurs, cote horreurs qui ne compilent pas
trop en dehors de linux, qu'on ne sait pas trop pourquoi au depart...
Richard Delorme writes:
| Le 14/09/2009 23:04, Gabriel Dos Reis a écrit :
|
|>
|> | C'est un idiome de style:
|> |
|> | void
|> | f(T a, T b, FILE *c)
|> | {
|> | /* je fais des trucs avec a et b */
|> | /* g, elle, utilisera c */
|> | g(a, b, c);
|> | }
|> |
|> | sauf semantique invraisemblable, j'ai generalement le droit de faire ce
|> | genre de chose, et pas de necessite imperieuse de savoir ce qui se cache
|> | derriere c...
|> |
|> | ... mais je dois inclure<stdio.h> pour que ca fonctionne...
|>
|> Comment ce code serait-il allégé sans l'inclusion de<stdio.h> ?
|
| Ce qui serait allégé est le temps de compilation.
Maintenant, nous ne parlons plus de code allégé, mais de la lenteur d'un
certain compilateur sur un certain système.
| On peut légitimement penser que :
|
| struct file_t;
Pour moi, l'abstraction derrière « FILE* » n'est pas sous le control de
l'utilisateur, et ce dernier n'a aucune raison de vouloir la dupliquer.
Si on a mesuré que l'inclusion de<stdio.h> est *réellement* un
facteur déterminant dans un projet, alors on devrait légitement
demander aux auteurs du dit compilateur de s'occuper de la performance
du compilateur -- car cela m'étonnerait que le goulot d'étranglement
soit pour<stdio.h> et nettement moins pour d'autres combinaisons
d'entêtes, et ceci de manière déterminante pour le projet.
Richard Delorme<abulmo@nospam.fr> writes:
| Le 14/09/2009 23:04, Gabriel Dos Reis a écrit :
|
|>
|> | C'est un idiome de style:
|> |
|> | void
|> | f(T a, T b, FILE *c)
|> | {
|> | /* je fais des trucs avec a et b */
|> | /* g, elle, utilisera c */
|> | g(a, b, c);
|> | }
|> |
|> | sauf semantique invraisemblable, j'ai generalement le droit de faire ce
|> | genre de chose, et pas de necessite imperieuse de savoir ce qui se cache
|> | derriere c...
|> |
|> | ... mais je dois inclure<stdio.h> pour que ca fonctionne...
|>
|> Comment ce code serait-il allégé sans l'inclusion de<stdio.h> ?
|
| Ce qui serait allégé est le temps de compilation.
Maintenant, nous ne parlons plus de code allégé, mais de la lenteur d'un
certain compilateur sur un certain système.
| On peut légitimement penser que :
|
| struct file_t;
Pour moi, l'abstraction derrière « FILE* » n'est pas sous le control de
l'utilisateur, et ce dernier n'a aucune raison de vouloir la dupliquer.
Si on a mesuré que l'inclusion de<stdio.h> est *réellement* un
facteur déterminant dans un projet, alors on devrait légitement
demander aux auteurs du dit compilateur de s'occuper de la performance
du compilateur -- car cela m'étonnerait que le goulot d'étranglement
soit pour<stdio.h> et nettement moins pour d'autres combinaisons
d'entêtes, et ceci de manière déterminante pour le projet.
Richard Delorme writes:
| Le 14/09/2009 23:04, Gabriel Dos Reis a écrit :
|
|>
|> | C'est un idiome de style:
|> |
|> | void
|> | f(T a, T b, FILE *c)
|> | {
|> | /* je fais des trucs avec a et b */
|> | /* g, elle, utilisera c */
|> | g(a, b, c);
|> | }
|> |
|> | sauf semantique invraisemblable, j'ai generalement le droit de faire ce
|> | genre de chose, et pas de necessite imperieuse de savoir ce qui se cache
|> | derriere c...
|> |
|> | ... mais je dois inclure<stdio.h> pour que ca fonctionne...
|>
|> Comment ce code serait-il allégé sans l'inclusion de<stdio.h> ?
|
| Ce qui serait allégé est le temps de compilation.
Maintenant, nous ne parlons plus de code allégé, mais de la lenteur d'un
certain compilateur sur un certain système.
| On peut légitimement penser que :
|
| struct file_t;
Pour moi, l'abstraction derrière « FILE* » n'est pas sous le control de
l'utilisateur, et ce dernier n'a aucune raison de vouloir la dupliquer.
Si on a mesuré que l'inclusion de<stdio.h> est *réellement* un
facteur déterminant dans un projet, alors on devrait légitement
demander aux auteurs du dit compilateur de s'occuper de la performance
du compilateur -- car cela m'étonnerait que le goulot d'étranglement
soit pour<stdio.h> et nettement moins pour d'autres combinaisons
d'entêtes, et ceci de manière déterminante pour le projet.
(Marc Espie) writes:
[...]
| Non, par contre, comprendre ce qu'on peut faire avec, pourquoi c'est
| indispensable, montrer les idiomes vitaux aux etudiants, ca c'est
| complique.
es...@lain.home (Marc Espie) writes:
[...]
| Non, par contre, comprendre ce qu'on peut faire avec, pourquoi c'est
| indispensable, montrer les idiomes vitaux aux etudiants, ca c'est
| complique.
(Marc Espie) writes:
[...]
| Non, par contre, comprendre ce qu'on peut faire avec, pourquoi c'est
| indispensable, montrer les idiomes vitaux aux etudiants, ca c'est
| complique.
"Pierre Maurette" a écrit dans le message de
news:. On va éventuellement édicter la règle de style de ne déclarer qu'un
pointeur par ligne, ou de passer par un typedef.
pour moi le typedef c'est exclusivement
pour cacher struct, sinon c'est de l'obfuscation...
"Pierre Maurette" <maurettepierre@wanadoo.fr> a écrit dans le message de
news: mn.73da7d994f4c3f2b.79899@wanadoo.fr...
. On va éventuellement édicter la règle de style de ne déclarer qu'un
pointeur par ligne, ou de passer par un typedef.
pour moi le typedef c'est exclusivement
pour cacher struct, sinon c'est de l'obfuscation...
"Pierre Maurette" a écrit dans le message de
news:. On va éventuellement édicter la règle de style de ne déclarer qu'un
pointeur par ligne, ou de passer par un typedef.
pour moi le typedef c'est exclusivement
pour cacher struct, sinon c'est de l'obfuscation...
Je trouve que
struct mpz_internal {
// ...
};
typedef struct mpz_internal mpz_t[1];
permet d'écrire des fonctions qui simulent très bien le passage par
réference const, e.e.
mpz_t mpz_negate(const mpz_t);
(et cela marche presque très bien pour des composantes
qui sont à l'intersection de C ou C++).
Je trouve que
struct mpz_internal {
// ...
};
typedef struct mpz_internal mpz_t[1];
permet d'écrire des fonctions qui simulent très bien le passage par
réference const, e.e.
mpz_t mpz_negate(const mpz_t);
(et cela marche presque très bien pour des composantes
qui sont à l'intersection de C ou C++).
Je trouve que
struct mpz_internal {
// ...
};
typedef struct mpz_internal mpz_t[1];
permet d'écrire des fonctions qui simulent très bien le passage par
réference const, e.e.
mpz_t mpz_negate(const mpz_t);
(et cela marche presque très bien pour des composantes
qui sont à l'intersection de C ou C++).
Marc Boyer writes:
[...]
| >| > Les étudiants ont lab work 2 fois 50 min par semaine (j'ai un chargé de
| >| > TD, mais j'insiste à assister à chaque fois que je peux.)
| >|
| >| Mais tu dis demander 10h de travail perso hebdomadaire, non ?
| >
| > Au minimum.
|
| Ce ne sont pas les mêmes conditions. J'avais juste à la
| fin, sur un mois environ, 30h de projet à l'emplois du temps,
| et les étudiants en passaient entre 40h (les bons) et 150h
| (les mauvais) en dehors des heures de cours.
Si tu n'as pas assez d'heures de cours, tu les prends là où ça se
trouve : les étudiants ont en général beaucoup de temps libre.
Tu leurs
donnes des projets à faire ; ce sont des exos, cela fait partie de la
note finale.
Il est presque illusoire de prétendre former quelqu'un à la
programmation si cette personne ne consent passer qu'au plus 30h.
La première chose que je fais le au premier cours est de présenter le
« syllabus »
http://courses.cs.tamu.edu/gdr/2009.fall-315/syllabus.pdf
C'est une sorte de contrat : en fait, ce semestre-ci, le premier cours
n'était que ça. Ils savent ce que j'attends d'eux et ils savent quoi
attendre de moi. S'ils ne sont pas d'accord, ils ne reviennent pas
(ils ont en général quelques jours < 5 pour se désinscrire).
Si je les vois la semaine d'après, c'est qu'ils ont accepté le contrat.
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
[...]
| >| > Les étudiants ont lab work 2 fois 50 min par semaine (j'ai un chargé de
| >| > TD, mais j'insiste à assister à chaque fois que je peux.)
| >|
| >| Mais tu dis demander 10h de travail perso hebdomadaire, non ?
| >
| > Au minimum.
|
| Ce ne sont pas les mêmes conditions. J'avais juste à la
| fin, sur un mois environ, 30h de projet à l'emplois du temps,
| et les étudiants en passaient entre 40h (les bons) et 150h
| (les mauvais) en dehors des heures de cours.
Si tu n'as pas assez d'heures de cours, tu les prends là où ça se
trouve : les étudiants ont en général beaucoup de temps libre.
Tu leurs
donnes des projets à faire ; ce sont des exos, cela fait partie de la
note finale.
Il est presque illusoire de prétendre former quelqu'un à la
programmation si cette personne ne consent passer qu'au plus 30h.
La première chose que je fais le au premier cours est de présenter le
« syllabus »
http://courses.cs.tamu.edu/gdr/2009.fall-315/syllabus.pdf
C'est une sorte de contrat : en fait, ce semestre-ci, le premier cours
n'était que ça. Ils savent ce que j'attends d'eux et ils savent quoi
attendre de moi. S'ils ne sont pas d'accord, ils ne reviennent pas
(ils ont en général quelques jours < 5 pour se désinscrire).
Si je les vois la semaine d'après, c'est qu'ils ont accepté le contrat.
Marc Boyer writes:
[...]
| >| > Les étudiants ont lab work 2 fois 50 min par semaine (j'ai un chargé de
| >| > TD, mais j'insiste à assister à chaque fois que je peux.)
| >|
| >| Mais tu dis demander 10h de travail perso hebdomadaire, non ?
| >
| > Au minimum.
|
| Ce ne sont pas les mêmes conditions. J'avais juste à la
| fin, sur un mois environ, 30h de projet à l'emplois du temps,
| et les étudiants en passaient entre 40h (les bons) et 150h
| (les mauvais) en dehors des heures de cours.
Si tu n'as pas assez d'heures de cours, tu les prends là où ça se
trouve : les étudiants ont en général beaucoup de temps libre.
Tu leurs
donnes des projets à faire ; ce sont des exos, cela fait partie de la
note finale.
Il est presque illusoire de prétendre former quelqu'un à la
programmation si cette personne ne consent passer qu'au plus 30h.
La première chose que je fais le au premier cours est de présenter le
« syllabus »
http://courses.cs.tamu.edu/gdr/2009.fall-315/syllabus.pdf
C'est une sorte de contrat : en fait, ce semestre-ci, le premier cours
n'était que ça. Ils savent ce que j'attends d'eux et ils savent quoi
attendre de moi. S'ils ne sont pas d'accord, ils ne reviennent pas
(ils ont en général quelques jours < 5 pour se désinscrire).
Si je les vois la semaine d'après, c'est qu'ils ont accepté le contrat.