Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

L'apprentissage et l'enseignement moderne du C++

52 réponses
Avatar
Mathieu STEFANI
Bonjour =E0 tous,

Comme le dit le sujet, j'=E9cris ce post pour parler et d=E9battre autour d=
e l'apprentissage et l'enseignement _moderne_ du C++.

En effet, comme vous le savez sans doute, dans la majorit=E9 des cursus inf=
ormatiques (tout du moins, en France), l'on retrouve toute une partie sur l=
'apprentissage de la programmation, et sur le C++.
De mon point de vue, il s'agit de l'un des langages les plus complexes =E0 =
appr=E9hender, ce qui rend son enseignement tr=E8s d=E9licat. Les cours dis=
pens=E9s dans les diff=E9rentes =E9coles se doivent d'=EAtre rigoureux, en =
r=E9duisant le plus possible les approximations que l'on pourrait y trouver=
.

Cependant, de ma propre constatation, au sein du corps enseignant, rares so=
nt les enseignants =E0 se tenir au gout du jour (l'informatique =E9tant un =
secteur =E9voluant tr=E8s vite), et =E0 imposer une r=E9elle rigueur dans l=
es cours dispens=E9s aux =E9l=E8ves. Au final, on se retrouve donc avec un =
cours plut=F4t approximatif, aux exemples mal choisis et idioms et pratique=
s courantes pas toujours respect=E9es.

C'est pour cela que je souhaite instaurer le d=E9bat, avec des personnes d'=
exp=E9rience, venant de l'industrie m=EAme, et ayant dans la plupart des ca=
s vu =E9voluer le langage, voire son enseignement (dans les diff=E9rents bo=
uquins, cours, ...). En outre, avec l'arriv=E9e r=E9cente du nouveau standa=
rd C++11, cela risque de remettre pas mal de choses et de cours en question=
.

Pensez-vous qu'il est pour l'instant trop pr=E9matur=E9 d'introduire certai=
nes notions et fonctionnalit=E9s de C++11 dans les cours actuels ? Pensez-v=
ous que cela rentre dans le cadre de la =AB renaissance =BB du C++, et doit=
donc faire parti de l'enseignement moderne du C++ ? A l'heure actuelle, ra=
res sont les bouquins ayant =E9t=E9 mis =E0 jour pour C++11 (=E0 part les b=
ouquins faisant =E9tat de TR1). Cela ne risque donc t-il pas de poser un pr=
obl=E8me au niveau des ressources disponibles pour les =E9tudiants ?

D'autre part, certains cours de C++ se basent et supposent, de la part des =
=E9tudiants, qu'ils poss=E8dent d=E9j=E0 des bases en C. Ainsi, ces cours r=
eposent sur des notions acquises en C. Pensez-vous qu'aujourd'hui, en 2011,=
cela a t-il encore r=E9ellement un sens ? Scott Meyers nous disait que l'u=
tilisation de C++ rassemblait 4 entit=E9s :
- le C
- L'orient=E9 objet
- La programmation g=E9n=E9rique avec les templates
- la STL

Est-il donc encore, en 2011, r=E9ellement productif et justifi=E9 de passer=
par la case =AB C =BB avant d'introduire le C++ ?=20

Enfin, si aujourd'hui, on vous demandait d'enseigner le C++, quelles seraie=
nt les lignes directrices de votre cours ? Quel serait le =AB plan =BB de v=
otre cours ? Passeriez-vous du temps pour =AB v=E9rifier =BB les acquis du =
C, ou bien vous concentreriez-vous exclusivement sur le C++, ses pratiques =
et ses idioms en =E9voquant les parties h=E9rit=E9es du C lorsqu'il le faut=
?


Si je pose ces questions, c'est car j'aimerais r=E9colter l'avis de personn=
es ayant pass=E9 de nombreuses ann=E9es dans l'industrie, et non pas seulem=
ent dans le domaine accad=E9mique. Les deux ne sont, selon moi, pas incompa=
tible, et peuvent travailler ensemble.

Cordialement.

10 réponses

1 2 3 4 5
Avatar
Fabien LE LEZ
On Tue, 13 Dec 2011 08:12:58 -0800 (PST), Mathieu STEFANI
:

D'autre part, certains cours de C++ se basent et supposent, de la part des étudiants, qu'ils possèdent déjà des bases en C. Ainsi, ces cours reposent sur des notions acquises en C. Pensez-vous qu'aujourd'hui, en 2011, cela a t-il encore réellement un sens ?



Ça n'avait déjà plus aucun sens en 2000.

Certes, connaître les structures for, if, etc., peut faire gagner du
temps lors de l'apprentissage de C++, mais pour ça, Javascript
convient largement aussi bien que C.

Enfin, si aujourd'hui, on vous demandait d'enseigner le C++, quelles seraient les lignes directrices de votre cours ?



Probablement, je reprendrais le contenu de Accelerated C++ (avec
éventuellement quelques modifications pour prendre C++11 en compte).
Ça reste, AMHA, la référence pour l'apprentissage du C++.

Grosso modo : std::string dès le premier chapitre ; char* vers la fin,
s'il reste du temps.
Avatar
Wykaaa
Mathieu STEFANI a écrit :
Bonjour à tous,

Comme le dit le sujet, j'écris ce post pour parler et débattre autour
de l'apprentissage et l'enseignement _moderne_ du C++.

En effet, comme vous le savez sans doute, dans la majorité des cursus
informatiques (tout du moins, en France), l'on retrouve toute une
partie sur l'apprentissage de la programmation, et sur le C++. De mon
point de vue, il s'agit de l'un des langages les plus complexes à
appréhender, ce qui rend son enseignement très délicat. Les cours
dispensés dans les différentes écoles se doivent d'être rigoureux, en
réduisant le plus possible les approximations que l'on pourrait y
trouver.

Cependant, de ma propre constatation, au sein du corps enseignant,
rares sont les enseignants à se tenir au gout du jour (l'informatique
étant un secteur évoluant très vite), et à imposer une réelle rigueur
dans les cours dispensés aux élèves. Au final, on se retrouve donc
avec un cours plutôt approximatif, aux exemples mal choisis et idioms
et pratiques courantes pas toujours respectées.



J'ai pu le constater aussi en tant que consultant et formateur dans
l'industrie.

C'est pour cela que je souhaite instaurer le débat, avec des
personnes d'expérience, venant de l'industrie même, et ayant dans la
plupart des cas vu évoluer le langage, voire son enseignement (dans
les différents bouquins, cours, ...). En outre, avec l'arrivée
récente du nouveau standard C++11, cela risque de remettre pas mal de
choses et de cours en question.



Sans en faire un argument d'autorité et pour situer les choses, je donne
quelques indications sur une partie de mes activités professionnelles
passées (je suis à la retraite depuis 3 ans).

J'ai appris la compilation, la théorie des automates et des langages,
etc. à l'université au début des années 70.
J'ai eu la chance de pouvoir travailler sur des compilateurs industriels
et d'être responsable du développement d'un compilateur de langage C
depuis la page blanche (ce n'était pas un portage).
J'ai, par ailleurs enseigné à la fois dans un mastère de génie logiciel
et dans l'industrie pour des cours en intra et en inter entreprise. J'ai
commencé à enseigner le C++ en 1991 et cette année, j'ai encore donné un
cours de C++ avancé abordant la métaprogrammation, les traits, les
politiques, CRTP (Curiously Recurring Template Pattern), Substitution
Failure Is Not An Error (SFINAE), etc.

Il me semble qu'il ne faut pas "maximiser" les nouveautés de C++11.
Elles doivent s'inscrire naturellement dans un cours comme
l'uniformisation des syntaxes d'initialisation.
Cependant, il faut faire attention à qui l'on s'adresse car pour des
professionnels, ils ne passeront pas du jour au lendemain à C++11. Il
faut donc continuer à décrire les anciennes syntaxes. Par contre, dans
l'enseignement académique, on peut y aller plus franchement, si je puis
dire.

Il fut une époque où j'ai vu apparaître la STL alors que je donnais, en
entreprise, des cours d'une semaine de C++ environ toutes les 6
semaines. C'était très difficile car il fallait en parler mais pas en
détail. Il fallait dire juste ce qu'il faut pour que les participants
puissent "faire leur chemin" ensuite. C'est ça le plus difficile
pédagogiquement parlant.

Pensez-vous qu'il est pour l'instant trop prématuré d'introduire
certaines notions et fonctionnalités de C++11 dans les cours actuels



Oui pour les cours en entreprise. Il faut juste mentionner ce qui se
prépare sauf s'il est demandé explicitement, par le client, de
développer les nouveautés .
Par contre, il faut en parler dans les cursus universitaires et, dans
l'immédiat, je laisserais plutôt le cours classique et je ferais un
chapitre de survol, à part, sur les nouveautés et, au fur et à mesure,
que les nouveautés se répandent, les intégrer dans le cours. Certaines
se propageront plus vite que d'autres. De toutes façon, les librairies
concernant le multithreading, ne doivent pas être abordées dans un tronc
commun, il me semble.

? Pensez-vous que cela rentre dans le cadre de la « renaissance » du
C++, et doit donc faire parti de l'enseignement moderne du C++ ? A
l'heure actuelle, rares sont les bouquins ayant été mis à jour pour
C++11 (à part les bouquins faisant état de TR1). Cela ne risque donc
t-il pas de poser un problème au niveau des ressources disponibles
pour les étudiants ?



Les bouquins viendront vite, à mon avis, mais il y a tellement de
mauvais livres sur C++ (et la programmation, en général...).

Le mieux c'est d'utiliser Internet. Il y a déjà des choses intéressantes
sur les nouveautés comme, par exemple, sur le multithreading (et ça date
de 2008 !) :
http://www.devx.com/SpecialReports/Article/38883/0/page/1


D'autre part, certains cours de C++ se basent et supposent, de la
part des étudiants, qu'ils possèdent déjà des bases en C. Ainsi, ces
cours reposent sur des notions acquises en C. Pensez-vous
qu'aujourd'hui, en 2011, cela a t-il encore réellement un sens ?



Non cela n'a pas vraiment de sens. C'est même un facteur de confusion
car les étudiants ou même les professionnels (ou leurs managers...)
peuvent croire, de ce fait, que C++ n'est qu'une extension de C (comme
certains clients qui me réclamaient des cours de C++ de 3 jours car
leurs troupes connaissaient déjà le langage C !).

Scott Meyers nous disait que l'utilisation de C++ rassemblait 4
entités : - le C - L'orienté objet - La programmation générique avec
les templates - la STL



Désolé mais je n'ai jamais été d'accord avec Scott Meyers sur C++ et
encore moins avec l'assertion ci-dessus. Je trouve sa réputation
surfaite (je sais, je suis hérétique !).

Est-il donc encore, en 2011, réellement productif et justifié de
passer par la case « C » avant d'introduire le C++ ?



Non mais il faut faire attention quand même. J'ai dû former des
programmeurs Fortan à C++ directement. Dans ce cas, il faut être
conscient que ces programmeurs ne savent pas ce qu'est un type, un
pointeur, l'allocation dynamique, la récursion, etc.
J'ai exigé, en plus des 5 jours de C++, 3 jours préliminaires pour
expliquer tous ces concepts.

Enfin, si aujourd'hui, on vous demandait d'enseigner le C++, quelles
seraient les lignes directrices de votre cours ? Quel serait le «
plan » de votre cours ? Passeriez-vous du temps pour « vérifier » les
acquis du C, ou bien vous concentreriez-vous exclusivement sur le
C++, ses pratiques et ses idioms en évoquant les parties héritées du
C lorsqu'il le faut ?



Je ne ferai aucune allusion au C sauf pour dénoncer certains traits de
C++ qui sont là par pure compatibilité avec C comme par exemple le
passage par valeur des arguments qui est le passage par défaut.
En C++, il est clair que c'est le passage par référence constante qui
devrait être le défaut.

Je trouve d'ailleurs que, sur ce problème de passage des arguments, ADA
est un des langages les plus propres avec les IN, OUT et IN OUT.


Si je pose ces questions, c'est car j'aimerais récolter l'avis de
personnes ayant passé de nombreuses années dans l'industrie, et non
pas seulement dans le domaine accadémique. Les deux ne sont, selon
moi, pas incompatible, et peuvent travailler ensemble.



Bien évidemment. J'ai aussi enseigné au CNAM, et à l'ENSTA.

Cordialement.



De même.
Avatar
Fabien LE LEZ
On Tue, 13 Dec 2011 22:13:24 +0100, Wykaaa :

En C++, il est clair que c'est le passage par référence constante qui
devrait être le défaut.



Pourquoi ?
Comparé au passage par valeur, le passage par référence constante
n'est qu'une optimisation, que le compilo devrait se charger de faire
lui-même.

En C++, quand tu écris
auto a= b;
a est une copie de b, quel que soit le type de a et b. (Le passage
d'arguments n'est qu'un cas particulier de copie.)

Je trouve ça bien plus simple que ce qui se passe chez Java et
Javascript : suivant le type, ça peut être une copie, ou une
référence.
Avatar
Mathieu STEFANI
Merci à vous pour vos premiers retours.

Ça n'avait déjà plus aucun sens en 2000.

Certes, connaître les structures for, if, etc., peut faire gagner du
temps lors de l'apprentissage de C++, mais pour ça, Javascript
convient largement aussi bien que C.

Non cela n'a pas vraiment de sens. C'est même un facteur de confusion
car les étudiants ou même les professionnels (ou leurs managers...)
peuvent croire, de ce fait, que C++ n'est qu'une extension de C (comme
certains clients qui me réclamaient des cours de C++ de 3 jours car
leurs troupes connaissaient déjà le langage C !).



Personnellement, je suis aussi de cet avis.
Aujourd'hui encore, il est courant de faire face à l'idée reçue
« Le C++, c'est du C avec quelques fonctionnalitées en plus, c'est
du C amélioré, il faut donc d'abord apprendre le C si l'on veut
apprendre le C++ ».
C'est, toujours selon moi, non seulement une perte de temps
(parce que le C non plus n'est pas un langage _si_ simple),
mais en plus cela peut devenir totalement contre-productif. Certaines
habitudes venues du C peuvent conduire à de mauvaises habitudes
en C++ (et certainement inversement), comme l'utilisation abusive de
char *, le passage par valeur créant des copies inutiles. Bref, si
l'objectif est d'apprendre le C++, qui, comme il est souvent répété,
est un langage à part entière, et non pas pas une « extension »
du C, pourquoi ne pas directement commencer par du C++ ?
Nous sommes donc d'accord sur ce point là.

J'ai, par ailleurs enseigné à la fois dans un mastère
de génie logiciel et dans l'industrie pour des cours en
intra et en inter entreprise. J'ai commencé à enseigner le C++
en 1991 et cette année, j'ai encore donné un cours de C++
avancé abordant la métaprogrammation, les traits, les
politiques, CRTP (Curiously Recurring Template Pattern),
Substitution Failure Is Not An Error (SFINAE), etc.



Je vois, tu as donc de la bouteille comme on dit :)
Car ce que tu cites effectivement, on ne le trouve pas
dans un cours de C++ mais en général en s'intéressant un
peu plus au langage, sur différentes ressources en ligne
ou dans des bouquins plus avancés.

Il fut une époque où j'ai vu apparaître la STL alors
que je donnais, en entreprise, des cours d'une semaine de
C++ environ toutes les 6 semaines. C'était très difficile
car il fallait en parler mais pas en détail. Il fallait
dire juste ce qu'il faut pour que les participants puissent
"faire leur chemin" ensuite. C'est ça le plus difficile
pédagogiquement parlant.



Désormais, la STL est bel et bien ancrée et implémentée par
les compilateurs. Dans les années 1990, je ne dis pas, mais
le langage a été normalisé pour la première fois en 1998,
il s'en est donc passé du temps depuis. Comme disait Herb Sutter
ou Scott Meyers (je ne m'en rappelle plus), le standard C++
comporte deux éléments :
- Les règles du langage (grammaire, ...)
- La bibliothèque standard (SL, STL)

On comprend donc que la bibliothèque standard fait parti
intégrante du langage et de sa spécification. Aujourd'hui,
en 2011, je ne comprends donc pas comment un cours peut
ne pas comporter une partie complète sur la STL, alors
que c'est un élément aussi important que le langage en
lui-même (tu n'es pas d'accord avec ce que disait Scott,
mais ça je ne pense pas qu'on puisse réellement le nier).
Pourtant, de nombreux cours ne se content uniquement
« d'aborder » la STL, dans un module en fin de cours.
Dans mon école, la STL est considérée comme un « complément ».
De mon avis, aujourd'hui, on ne peut pas se prétendre
développeur C++ sans connaître la STL, ses conteneurs,
ses algorithmes et ses itérateurs au moins un minimum
(je ne dis pas non plus connaitre tous les détails d'implémentation).


Il me semble qu'il ne faut pas "maximiser" les nouveautés
de C++11. Elles doivent s'inscrire naturellement dans un
cours comme l'uniformisation des syntaxes d'initialisation.
Cependant, il faut faire attention à qui l'on s'adresse car
pour des professionnels, ils ne passeront pas du jour au lendemain
à C++11. Il faut donc continuer à décrire les anciennes syntaxes.
Par contre, dans l'enseignement académique, on peut y aller plus
franchement, si je puis dire.

Par contre, il faut en parler dans les cursus universitaires et,
dans l'immédiat, je laisserais plutôt le cours classique et je
ferais un chapitre de survol, à part, sur les nouveautés et, au
fur et à mesure, que les nouveautés se répandent, les intégrer da ns
le cours. Certaines se propageront plus vite que d'autres. De toutes
façon, les librairies concernant le multithreading, ne doivent pas
être abordées dans un tronc commun, il me semble.



Pour ma part, je vais rester dans le domaine académique (j'y fais parti,
en tant qu'étudiant). Donc, si je te comprends bien, tu n'intègrerais
pas le nouveau standard C++11 dans le cours « principal » mais dans
un espèce de module annexe ? Puis au fur et à mesure de l'adoption
de ses nouvelles pratiques, tu transfèrerais petit à petit le tout
dans le cours principal ? Pour tout ce qui concerne la concurrence
et le multithreading, je suis d'accord pour que cela figure dans un
cours à part, et non pas dans un cours de C++ même.

Personnellement, je commencerais dès à présent à intégrer certain es
fonctionnalités présentes dans le nouveau standard, et qui sont
communément implémentées dans la majorité des compilateurs
(auto, lambdas, nullptr, ...). Et je pense que je présenterais
utiles à connaitre, pour le côté « développement de bibliothèqu es »,
comme les rvalues references & move semantics.

Les bouquins viendront vite, à mon avis, mais il y a tellement de
mauvais livres sur C++ (et la programmation, en général...).



Et c'est bien dommage. Mais malgré tout, il y a, en contrepartie,
de très bon ouvrages (j'aime bien la série des Effective C++,
que tu sembles un peu moins apprécier, ou encore la série
des Exceptionnal C++).

Le mieux c'est d'utiliser Internet. Il y a déjà des
choses intéressantes sur les nouveautés comme,
par exemple, sur le multithreading (et ça date de 2008 !) :
http://www.devx.com/SpecialReports/Article/38883/0/page/1



De toute façon, Internet regorge de ressources. Mais là encore,
il faut utiliser les bonnes ressources. On peut aussi y trouver
de nombreux enregistrements de conférences ou tout simplement
de « cours », comme sur channel9.
Pour le multithreading en C++, il y a le bouquin
d'Anthony Williams, ou bien la série de vidéos de Bartosz Milewski
: http://www.corensic.com/Learn.aspx



Probablement, je reprendrais le contenu de Accelerated C++ (avec
éventuellement quelques modifications pour prendre C++11 en compte).
Ça reste, AMHA, la référence pour l'apprentissage du C++.



Effectivement, c'est un bouquin que l'on a tendance à recommander
lorsque l'on souhaite s'initier au C++ avec une approche « moderne »
de la chose. Je ne l'ai pas lu en entier, mais de ce qu'en ai lu
en entier, je pense aussi qu'il constitue une bonne base pour
un cours en lui-même. Saupoudré avec du C++11, je pense que ça
pourrait donner un cours au gout du jour, d'une assez bonne
qualité pour un public de « débutants » (toujours dans le
domaine académique).

Grosso modo : std::string dès le premier chapitre ; char* vers la fin,
s'il reste du temps.



Quant on voit que dans certains cours C++, on se tue encore à
montrer au tout début comment utiliser des char[] et char *,
on comprend vite qu'au final, reprendre les habitudes du C, ce
n'est définitivement pas une bonne chose ..


Encore merci à vous deux. Pour ma part, c'est en récoltant
vos avis que j'arriverai un peu à faire « avancer », voire
« réformer » les choses au sein de mon établissement (et dieu
sait que l'on en a besoin).

Cordialement.
Avatar
Wykaaa
Fabien LE LEZ a écrit :
On Tue, 13 Dec 2011 22:13:24 +0100, Wykaaa :

En C++, il est clair que c'est le passage par référence constante qui
devrait être le défaut.



Pourquoi ?
Comparé au passage par valeur, le passage par référence constante
n'est qu'une optimisation, que le compilo devrait se charger de faire
lui-même.



Oui, le compilo devrait le faire lui-même, je n'ai pas dit autre chose.
Ca devrait être le défaut.
Pourquoi ?
Parce que à chaque passage par valeur d'une instance de classe qui
comporte un constructeur de copie, celui-ci est appelé alors que dans la
majorité des cas ce n'est pas nécessaire.
J'ai vu un programme ou, en transformant tous les passages par valeurs
en références constante, on a gagné presque 30% en temps d'exécution !

En C++, quand tu écris
auto a= b;
a est une copie de b, quel que soit le type de a et b. (Le passage
d'arguments n'est qu'un cas particulier de copie.)

Je trouve ça bien plus simple que ce qui se passe chez Java et
Javascript : suivant le type, ça peut être une copie, ou une
référence.



Ces langages ne sont pas l'idéal non plus ...

En Java, le programmeur "ne voit pas" les pointeurs mais la JVM ne
manipule que cela... bien obligé pour le ramasse-miettes.
Avatar
Fabien LE LEZ
On Wed, 14 Dec 2011 01:04:43 +0100, Wykaaa :

J'ai vu un programme ou, en transformant tous les passages par valeurs
en références constante, on a gagné presque 30% en temps d'exécution !



Ça me paraît beaucoup. Quel compilateur utilisais-tu ?
Par ailleurs, est-ce qu'il était nécessaire de transformer *tous* les
passages par valeur, ou bien, est-ce qu'en transformer une minorité
aurait suffi ?
Avatar
Fabien LE LEZ
On Tue, 13 Dec 2011 15:45:21 -0800 (PST), Mathieu STEFANI
:

Quant on voit que dans certains cours C++, on se tue encore à
montrer au tout début comment utiliser des char[] et char *,



En fait, j'ai l'impression que pas mal de profs enseignent le C++ sans
connaître ce langage. Ils sont persuadés que c'est du C dans lequel
"malloc" s'écrit "new".

Mais malgré tout, il y a, en contrepartie,
de très bon ouvrages (j'aime bien la série des Effective C++,
que tu sembles un peu moins apprécier, ou encore la série
des Exceptionnal C++).



Il y a effectivement de très bons bouquins pour approfondir sa
connaissance du C++. En revanche, pour débuter, il me semble qu'il en
existe, en tout et pour tout, deux : Accelerated C++, et peut-être
"Programming -- Principles and Practice Using C++", par Stroustrup,
dont la taille me fait un peu peur.
Seulement deux bouquins pour débutants dans un langage aussi utilisé
que C++, ça fait peur.
Avatar
JKB
Le Wed, 14 Dec 2011 02:43:57 +0100,
Fabien LE LEZ écrivait :
On Tue, 13 Dec 2011 15:45:21 -0800 (PST), Mathieu STEFANI
:

Quant on voit que dans certains cours C++, on se tue encore à
montrer au tout début comment utiliser des char[] et char *,



En fait, j'ai l'impression que pas mal de profs enseignent le C++ sans
connaître ce langage. Ils sont persuadés que c'est du C dans lequel
"malloc" s'écrit "new".



En fait, je ne vois pas trop comment parler de new sans introduire
un malloc() à un moment ou un autre. Tout new termine par un
malloc() pour les types fondamentaux. Mais il reste vrai que les
cours de C++ sont généralement lamentables.

À l'extrème limite, un cours de C++ devrait être un cours de
programmation objet indépendant de tout langage avec un chapitre à
la fin pour expliquer les pièges du C++ et les travers à éviter.

Mais malgré tout, il y a, en contrepartie,
de très bon ouvrages (j'aime bien la série des Effective C++,
que tu sembles un peu moins apprécier, ou encore la série
des Exceptionnal C++).



Il y a effectivement de très bons bouquins pour approfondir sa
connaissance du C++. En revanche, pour débuter, il me semble qu'il en
existe, en tout et pour tout, deux : Accelerated C++, et peut-être
"Programming -- Principles and Practice Using C++", par Stroustrup,
dont la taille me fait un peu peur.
Seulement deux bouquins pour débutants dans un langage aussi utilisé
que C++, ça fait peur.



C'est un peu pareil dans tous les langages. J'ai cherché récemment
un bouquin de référence sur les nouveautés de Fortran 2003 (même pas
2008) et j'ai eu un peu peur. Je n'en ai trouvé qu'un seul...

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Wykaaa
Fabien LE LEZ a écrit :
On Wed, 14 Dec 2011 01:04:43 +0100, Wykaaa :

J'ai vu un programme ou, en transformant tous les passages par valeurs
en références constante, on a gagné presque 30% en temps d'exécution !



Ça me paraît beaucoup. Quel compilateur utilisais-tu ?



Je crois qu'il s'agissait du compilateur d'IBM sous AIX au milieu des
années 90, mais là n'est pas le problème, il me semble. Peux-tu me citer
UN compilateur qui transforme les passage par valeur en référence
constante ?

Par ailleurs, est-ce qu'il était nécessaire de transformer *tous* les
passages par valeur, ou bien, est-ce qu'en transformer une minorité
aurait suffi ?



Nous les avons transformés tous car nous l'avons fait automatiquement.
Il suffit de changer les prototypes des fonctions membres des classes
qui contiennent le constructeur de copie.
Ceci nous a même permis de détecter des bugs car il y avait certaines
affectations sur des paramètres qui, du coup, déclenchaient une erreur à
la compilation à cause du "const".

Fais l'expérience sur une application que tu connais, tu seras surpris
du résultat.
Avatar
JKB
Le Wed, 14 Dec 2011 09:20:15 +0100,
Wykaaa écrivait :
Fabien LE LEZ a écrit :
On Wed, 14 Dec 2011 01:04:43 +0100, Wykaaa :

J'ai vu un programme ou, en transformant tous les passages par valeurs
en références constante, on a gagné presque 30% en temps d'exécution !



Ça me paraît beaucoup. Quel compilateur utilisais-tu ?



Je crois qu'il s'agissait du compilateur d'IBM sous AIX au milieu des
années 90, mais là n'est pas le problème, il me semble. Peux-tu me citer
UN compilateur qui transforme les passage par valeur en référence
constante ?



DEC C++, au moins sur VMS en version VAX. Qu'est-ce que je gagne ?

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
1 2 3 4 5