Encore faudrait-il que l'analogie soit pertinente. Ici, on pourrait
échanger "STL" et "allocation dynamique" pour faire une affirmation
tout aussi gratuite et complètement opposée sur le fond. Il faudrait
donc justifier en quoi cette analogie-là est correcte et pas
l'autre. Et comme l'a dit Gaby, c'est au mieux de l'illustration, pas
de l'argumentation.
Et en général, l'analogie sert à éclaircir quelque chose en comparant
à un sujet connu. Ici, le sujet connu c'est le C++, changer le
contexte ne simplifie pas les choses, bien au contraire, on y perd
beaucoup. Ce serait différent s'il s'agissait d'expliquer quelque
chose à un débutant (qui ne connaît donc pas le C++) et pour qui
l'analogie serait plus claire, mais on n'est pas dans ce cadre-là.
Encore faudrait-il que l'analogie soit pertinente. Ici, on pourrait
échanger "STL" et "allocation dynamique" pour faire une affirmation
tout aussi gratuite et complètement opposée sur le fond. Il faudrait
donc justifier en quoi cette analogie-là est correcte et pas
l'autre. Et comme l'a dit Gaby, c'est au mieux de l'illustration, pas
de l'argumentation.
Et en général, l'analogie sert à éclaircir quelque chose en comparant
à un sujet connu. Ici, le sujet connu c'est le C++, changer le
contexte ne simplifie pas les choses, bien au contraire, on y perd
beaucoup. Ce serait différent s'il s'agissait d'expliquer quelque
chose à un débutant (qui ne connaît donc pas le C++) et pour qui
l'analogie serait plus claire, mais on n'est pas dans ce cadre-là.
Encore faudrait-il que l'analogie soit pertinente. Ici, on pourrait
échanger "STL" et "allocation dynamique" pour faire une affirmation
tout aussi gratuite et complètement opposée sur le fond. Il faudrait
donc justifier en quoi cette analogie-là est correcte et pas
l'autre. Et comme l'a dit Gaby, c'est au mieux de l'illustration, pas
de l'argumentation.
Et en général, l'analogie sert à éclaircir quelque chose en comparant
à un sujet connu. Ici, le sujet connu c'est le C++, changer le
contexte ne simplifie pas les choses, bien au contraire, on y perd
beaucoup. Ce serait différent s'il s'agissait d'expliquer quelque
chose à un débutant (qui ne connaît donc pas le C++) et pour qui
l'analogie serait plus claire, mais on n'est pas dans ce cadre-là.
Olivier Azeau writes:
| Gabriel Dos Reis wrote:
| > Olivier Azeau writes:
| > | Programmer en C++ sans se soucier du comment les choses sont
| > | organisées en mémoire, c'est utiliser le C++ comme du Java.
| > Pourquoi ?
|
| Parce qu'on ne s'inquiète alors pas de tout ce qui peut corrompre un
| pointeur et des conséquences que cela entraine.
Cela n'est pas du tout vrai. Je peux utiliser correctement (ainsi que
mes élèves) std::vector<> ou std::list<> sans me soucier de comment
les allocateurs marchent.
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
|
| Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
C'est un axiome ? Parce que des expériences grandeur nature montrent
quotidiennement le contraire.
| Comment expliquer qu'il faut d'abord passer par un resize ou un
| push_back et qu'il vaut mieux utiliser at plutôt que [], tout ça sans
| aborder un minimum de gestion mémoire ?
Un tableau est une suite dynamique, i.e. dont le nombre d'éléments
varie au cours du programme et [] ne travaille que sur les eléments
dans le tableau. Tu peux en ajouter en faisant un push_back() -- qui
mettra l'élément à la fin.
Pourquoi vouloir insister sur la gestion manuelle ici pour expliquer
comment vector<> marche avec des opérations aussi simples ?
Parce que je trouve cette vision des choses inutile. Mais j'ai peut-être
|
| J'ai du mal à cerner comment on peut évaluer la compréhension de la
| gestion mémoire dans un contexte de cursus universitaire.
Cela explique beaucoup de tes messages. Cela n'est pas parce que tu as
du mal à l'imaginer que cela ne se passe pas dans le concret.
Je n'ai pas de mal à l'imaginer, juste du mal à cerner le contenu.
Olivier Azeau <john@doe.com> writes:
| Gabriel Dos Reis wrote:
| > Olivier Azeau <john@doe.com> writes:
| > | Programmer en C++ sans se soucier du comment les choses sont
| > | organisées en mémoire, c'est utiliser le C++ comme du Java.
| > Pourquoi ?
|
| Parce qu'on ne s'inquiète alors pas de tout ce qui peut corrompre un
| pointeur et des conséquences que cela entraine.
Cela n'est pas du tout vrai. Je peux utiliser correctement (ainsi que
mes élèves) std::vector<> ou std::list<> sans me soucier de comment
les allocateurs marchent.
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
|
| Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
C'est un axiome ? Parce que des expériences grandeur nature montrent
quotidiennement le contraire.
| Comment expliquer qu'il faut d'abord passer par un resize ou un
| push_back et qu'il vaut mieux utiliser at plutôt que [], tout ça sans
| aborder un minimum de gestion mémoire ?
Un tableau est une suite dynamique, i.e. dont le nombre d'éléments
varie au cours du programme et [] ne travaille que sur les eléments
dans le tableau. Tu peux en ajouter en faisant un push_back() -- qui
mettra l'élément à la fin.
Pourquoi vouloir insister sur la gestion manuelle ici pour expliquer
comment vector<> marche avec des opérations aussi simples ?
Parce que je trouve cette vision des choses inutile. Mais j'ai peut-être
|
| J'ai du mal à cerner comment on peut évaluer la compréhension de la
| gestion mémoire dans un contexte de cursus universitaire.
Cela explique beaucoup de tes messages. Cela n'est pas parce que tu as
du mal à l'imaginer que cela ne se passe pas dans le concret.
Je n'ai pas de mal à l'imaginer, juste du mal à cerner le contenu.
Olivier Azeau writes:
| Gabriel Dos Reis wrote:
| > Olivier Azeau writes:
| > | Programmer en C++ sans se soucier du comment les choses sont
| > | organisées en mémoire, c'est utiliser le C++ comme du Java.
| > Pourquoi ?
|
| Parce qu'on ne s'inquiète alors pas de tout ce qui peut corrompre un
| pointeur et des conséquences que cela entraine.
Cela n'est pas du tout vrai. Je peux utiliser correctement (ainsi que
mes élèves) std::vector<> ou std::list<> sans me soucier de comment
les allocateurs marchent.
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
|
| Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
C'est un axiome ? Parce que des expériences grandeur nature montrent
quotidiennement le contraire.
| Comment expliquer qu'il faut d'abord passer par un resize ou un
| push_back et qu'il vaut mieux utiliser at plutôt que [], tout ça sans
| aborder un minimum de gestion mémoire ?
Un tableau est une suite dynamique, i.e. dont le nombre d'éléments
varie au cours du programme et [] ne travaille que sur les eléments
dans le tableau. Tu peux en ajouter en faisant un push_back() -- qui
mettra l'élément à la fin.
Pourquoi vouloir insister sur la gestion manuelle ici pour expliquer
comment vector<> marche avec des opérations aussi simples ?
Parce que je trouve cette vision des choses inutile. Mais j'ai peut-être
|
| J'ai du mal à cerner comment on peut évaluer la compréhension de la
| gestion mémoire dans un contexte de cursus universitaire.
Cela explique beaucoup de tes messages. Cela n'est pas parce que tu as
du mal à l'imaginer que cela ne se passe pas dans le concret.
Je n'ai pas de mal à l'imaginer, juste du mal à cerner le contenu.
Gabriel Dos Reis wrote:Olivier Azeau writes:
| Gabriel Dos Reis wrote:
| > Olivier Azeau writes:
| > | Programmer en C++ sans se soucier du comment les choses sont
| > | organisées en mémoire, c'est utiliser le C++ comme du Java.
| > Pourquoi ?
| | Parce qu'on ne s'inquiète alors pas de tout ce qui peut corrompre un
| pointeur et des conséquences que cela entraine.
Cela n'est pas du tout vrai. Je peux utiliser correctement (ainsi que
mes élèves) std::vector<> ou std::list<> sans me soucier de comment
les allocateurs marchent.
En fait mon affirmation n'est pas spécifique à STL : on est quand même
bien obligé d'utiliser directement des pointeurs à un moment ou à un
autre, non ?
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
| | Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
Gabriel Dos Reis wrote:
Olivier Azeau <john@doe.com> writes:
| Gabriel Dos Reis wrote:
| > Olivier Azeau <john@doe.com> writes:
| > | Programmer en C++ sans se soucier du comment les choses sont
| > | organisées en mémoire, c'est utiliser le C++ comme du Java.
| > Pourquoi ?
| | Parce qu'on ne s'inquiète alors pas de tout ce qui peut corrompre un
| pointeur et des conséquences que cela entraine.
Cela n'est pas du tout vrai. Je peux utiliser correctement (ainsi que
mes élèves) std::vector<> ou std::list<> sans me soucier de comment
les allocateurs marchent.
En fait mon affirmation n'est pas spécifique à STL : on est quand même
bien obligé d'utiliser directement des pointeurs à un moment ou à un
autre, non ?
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
| | Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
Gabriel Dos Reis wrote:Olivier Azeau writes:
| Gabriel Dos Reis wrote:
| > Olivier Azeau writes:
| > | Programmer en C++ sans se soucier du comment les choses sont
| > | organisées en mémoire, c'est utiliser le C++ comme du Java.
| > Pourquoi ?
| | Parce qu'on ne s'inquiète alors pas de tout ce qui peut corrompre un
| pointeur et des conséquences que cela entraine.
Cela n'est pas du tout vrai. Je peux utiliser correctement (ainsi que
mes élèves) std::vector<> ou std::list<> sans me soucier de comment
les allocateurs marchent.
En fait mon affirmation n'est pas spécifique à STL : on est quand même
bien obligé d'utiliser directement des pointeurs à un moment ou à un
autre, non ?
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
| | Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
Richard Delorme wrote:Malheureusement, ils le font avec leurs propres critères et sont
souvent desespérés de voir le nombre de développeurs qui se
comportent avec le C++ comme si c'était du Java...
Java et C++ sont si différent que j'ai du mal à voir comment cela est
possible. Puis-je avoir des détails ?
Il suffit de demander à un frais émoulu de l'école, où il a fait pas mal
de Java et un peu de C++, ce qu'affiche ce programme (et pourquoi) :
----------------------------
class A
{
public: virtual void f() { cout << "A::f" << endl; }
};
class B : public A
{
public: virtual void f() { cout << "B::f" << endl; }
};
void g(A a) { a.f(); }
void main()
{
B b;
g(b);
}
----------------------------
Le problème c'est que Java et C++ sont par essence très différents mais
qu'ils sont aussi par ailleurs horriblement proches d'un point de vue
syntaxique. Il est donc aisé d'induire le comportement de l'un par ce
que l'on connait de l'autre.
Un développeur qui connait pas trop mal Java et qui se met au C++ ça
ressemble un peu à un qqun qui a appris à conduire avec une boite
automatique et se met à conduire avec une boite manuelle : il connait le
volant, l'accélérateur et le frein mais s'il reste en 1ère, il n'ira pas
bien loin.
C'est pour cela que je trouve dangereux d'apprendre le C++ avec toute la
STL comme "faisant partie du langage".
La STL est au C++, ce que le régulateur de vitesse automatique est à la
conduite : un fabuleux outil pour celui qui le maîtrise et un bon moyen
de finir dans le décor pour les autres.
Que celui qui n'a jamais eu à désembrouiller des problèmes de corruption
mémoire en C++ me jette la première pierre...
Richard Delorme wrote:
Malheureusement, ils le font avec leurs propres critères et sont
souvent desespérés de voir le nombre de développeurs qui se
comportent avec le C++ comme si c'était du Java...
Java et C++ sont si différent que j'ai du mal à voir comment cela est
possible. Puis-je avoir des détails ?
Il suffit de demander à un frais émoulu de l'école, où il a fait pas mal
de Java et un peu de C++, ce qu'affiche ce programme (et pourquoi) :
----------------------------
class A
{
public: virtual void f() { cout << "A::f" << endl; }
};
class B : public A
{
public: virtual void f() { cout << "B::f" << endl; }
};
void g(A a) { a.f(); }
void main()
{
B b;
g(b);
}
----------------------------
Le problème c'est que Java et C++ sont par essence très différents mais
qu'ils sont aussi par ailleurs horriblement proches d'un point de vue
syntaxique. Il est donc aisé d'induire le comportement de l'un par ce
que l'on connait de l'autre.
Un développeur qui connait pas trop mal Java et qui se met au C++ ça
ressemble un peu à un qqun qui a appris à conduire avec une boite
automatique et se met à conduire avec une boite manuelle : il connait le
volant, l'accélérateur et le frein mais s'il reste en 1ère, il n'ira pas
bien loin.
C'est pour cela que je trouve dangereux d'apprendre le C++ avec toute la
STL comme "faisant partie du langage".
La STL est au C++, ce que le régulateur de vitesse automatique est à la
conduite : un fabuleux outil pour celui qui le maîtrise et un bon moyen
de finir dans le décor pour les autres.
Que celui qui n'a jamais eu à désembrouiller des problèmes de corruption
mémoire en C++ me jette la première pierre...
Richard Delorme wrote:Malheureusement, ils le font avec leurs propres critères et sont
souvent desespérés de voir le nombre de développeurs qui se
comportent avec le C++ comme si c'était du Java...
Java et C++ sont si différent que j'ai du mal à voir comment cela est
possible. Puis-je avoir des détails ?
Il suffit de demander à un frais émoulu de l'école, où il a fait pas mal
de Java et un peu de C++, ce qu'affiche ce programme (et pourquoi) :
----------------------------
class A
{
public: virtual void f() { cout << "A::f" << endl; }
};
class B : public A
{
public: virtual void f() { cout << "B::f" << endl; }
};
void g(A a) { a.f(); }
void main()
{
B b;
g(b);
}
----------------------------
Le problème c'est que Java et C++ sont par essence très différents mais
qu'ils sont aussi par ailleurs horriblement proches d'un point de vue
syntaxique. Il est donc aisé d'induire le comportement de l'un par ce
que l'on connait de l'autre.
Un développeur qui connait pas trop mal Java et qui se met au C++ ça
ressemble un peu à un qqun qui a appris à conduire avec une boite
automatique et se met à conduire avec une boite manuelle : il connait le
volant, l'accélérateur et le frein mais s'il reste en 1ère, il n'ira pas
bien loin.
C'est pour cela que je trouve dangereux d'apprendre le C++ avec toute la
STL comme "faisant partie du langage".
La STL est au C++, ce que le régulateur de vitesse automatique est à la
conduite : un fabuleux outil pour celui qui le maîtrise et un bon moyen
de finir dans le décor pour les autres.
Que celui qui n'a jamais eu à désembrouiller des problèmes de corruption
mémoire en C++ me jette la première pierre...
Il suffit de demander à un frais émoulu de l'école, où il a fait pas mal
de Java et un peu de C++, ce qu'affiche ce programme (et pourquoi) :
----------------------------
class A
{
public: virtual void f() { cout << "A::f" << endl; }
};
class B : public A
{
public: virtual void f() { cout << "B::f" << endl; }
};
void g(A a) { a.f(); }
void main()
{
B b;
g(b);
}
Il suffit de demander à un frais émoulu de l'école, où il a fait pas mal
de Java et un peu de C++, ce qu'affiche ce programme (et pourquoi) :
----------------------------
class A
{
public: virtual void f() { cout << "A::f" << endl; }
};
class B : public A
{
public: virtual void f() { cout << "B::f" << endl; }
};
void g(A a) { a.f(); }
void main()
{
B b;
g(b);
}
Il suffit de demander à un frais émoulu de l'école, où il a fait pas mal
de Java et un peu de C++, ce qu'affiche ce programme (et pourquoi) :
----------------------------
class A
{
public: virtual void f() { cout << "A::f" << endl; }
};
class B : public A
{
public: virtual void f() { cout << "B::f" << endl; }
};
void g(A a) { a.f(); }
void main()
{
B b;
g(b);
}
Olivier Azeau wrote:En fait mon affirmation n'est pas spécifique à STL : on est quand même
bien obligé d'utiliser directement des pointeurs à un moment ou à un
autre, non ?
A un moment ou a un autre. Mais comme un des soucis de l'apprentissage
est de ne pas assomer tout de suite, mais d'introduire une certaine
progressivité, et comme il y a des choses qu'on ne peut pas faire après
la gestion de la mémoire, autant faire ces choses avant (par exemple :
Les fonctions, les notion de durée de vie, les structures de contrôle).
Et comme la STL permet d'illustrer ces notions aisément (plus que
l'allocation mémoire manuelle), autant l'introduire aussi avant cette
dernière.
Note en passant : de mon pt de vue la notion de durée de vie, c'est de
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
| | Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
Faut-il comprendre comment fonctionne cout pour faire un "Hello world!"
? Si oui, j'ai peur qu'un "Hello world!" ne soit pas vraiment un bon
programme pour débutant, puisqu'il met en oeuvre surcharge d'opérateurs,
polymorphisme, templates, surcharge de fonction, traits, espace
référentiel, exceptions...
A-t-on besoin d'un cout pour faire un "Hello world!" ? :-)
Olivier Azeau wrote:
En fait mon affirmation n'est pas spécifique à STL : on est quand même
bien obligé d'utiliser directement des pointeurs à un moment ou à un
autre, non ?
A un moment ou a un autre. Mais comme un des soucis de l'apprentissage
est de ne pas assomer tout de suite, mais d'introduire une certaine
progressivité, et comme il y a des choses qu'on ne peut pas faire après
la gestion de la mémoire, autant faire ces choses avant (par exemple :
Les fonctions, les notion de durée de vie, les structures de contrôle).
Et comme la STL permet d'illustrer ces notions aisément (plus que
l'allocation mémoire manuelle), autant l'introduire aussi avant cette
dernière.
Note en passant : de mon pt de vue la notion de durée de vie, c'est de
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
| | Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
Faut-il comprendre comment fonctionne cout pour faire un "Hello world!"
? Si oui, j'ai peur qu'un "Hello world!" ne soit pas vraiment un bon
programme pour débutant, puisqu'il met en oeuvre surcharge d'opérateurs,
polymorphisme, templates, surcharge de fonction, traits, espace
référentiel, exceptions...
A-t-on besoin d'un cout pour faire un "Hello world!" ? :-)
Olivier Azeau wrote:En fait mon affirmation n'est pas spécifique à STL : on est quand même
bien obligé d'utiliser directement des pointeurs à un moment ou à un
autre, non ?
A un moment ou a un autre. Mais comme un des soucis de l'apprentissage
est de ne pas assomer tout de suite, mais d'introduire une certaine
progressivité, et comme il y a des choses qu'on ne peut pas faire après
la gestion de la mémoire, autant faire ces choses avant (par exemple :
Les fonctions, les notion de durée de vie, les structures de contrôle).
Et comme la STL permet d'illustrer ces notions aisément (plus que
l'allocation mémoire manuelle), autant l'introduire aussi avant cette
dernière.
Note en passant : de mon pt de vue la notion de durée de vie, c'est de
| > | Programmer avec la STL sans maîtriser les templates, c'est la même
| > | chose : on ne maîtrise pas le comportement mémoire de ce que l'on
| > | utilise.
| > Pour quelles raisons ?
| | Parce ce qu'on ne sait pas ce qui se passe sans une lecture
| hyper-attentive des docs et même quelquefois un petit saut dans le
| code source.
Faut-il comprendre comment fonctionne cout pour faire un "Hello world!"
? Si oui, j'ai peur qu'un "Hello world!" ne soit pas vraiment un bon
programme pour débutant, puisqu'il met en oeuvre surcharge d'opérateurs,
polymorphisme, templates, surcharge de fonction, traits, espace
référentiel, exceptions...
A-t-on besoin d'un cout pour faire un "Hello world!" ? :-)
Le problème c'est que Java et C++ sont par essence très différents
mais qu'ils sont aussi par ailleurs horriblement proches d'un point de
vue syntaxique. Il est donc aisé d'induire le comportement de l'un par
ce que l'on connait de l'autre.
Je ne trouve pas. En Java, les objets sont toujours manipulés par des
référence, et dans ton exemple C++ tu utilises des objets créés en
mémoire automatique et en plus tu les passes par valeur plutôt que par
référence. Il s'agit donc d'une situation inexistente en Java, et je
comprends mal comment en déduire le fonctionnement de ton programme à
partir de fonctionnalités inexistentes du langage Java.
Ben moi aussi je comprends mal comment on peut le déduire mais le
C'est pour cela que je trouve dangereux d'apprendre le C++ avec toute
la STL comme "faisant partie du langage".
Depuis quand la bibliothèque standard du C++ ne fait plus partie du
langage ?
La STL est au C++, ce que le régulateur de vitesse automatique est à
la conduite : un fabuleux outil pour celui qui le maîtrise et un bon
moyen de finir dans le décor pour les autres.
Je ne suis pas d'accord avec ton analogie. La bibliothèque standard
fourmille d'outils qui accélèrent et sécurisent la programmation en C++.
Ne pas les utiliser, c'est comme bricoler son propre régulateur de
vitesse soi-même plutôt que d'utiliser celui du constructeur, et le
résultat sera souvent plus catastrophique.Que celui qui n'a jamais eu à désembrouiller des problèmes de
corruption mémoire en C++ me jette la première pierre...
Ben justement, l'utilisation des containers de la bibliothèque standard
limite énormément les problèmes de corruption de mémoire, d'après ma
propre expérience.
Ok. Toujours le même pb : à condition de bien les utiliser.
Le problème c'est que Java et C++ sont par essence très différents
mais qu'ils sont aussi par ailleurs horriblement proches d'un point de
vue syntaxique. Il est donc aisé d'induire le comportement de l'un par
ce que l'on connait de l'autre.
Je ne trouve pas. En Java, les objets sont toujours manipulés par des
référence, et dans ton exemple C++ tu utilises des objets créés en
mémoire automatique et en plus tu les passes par valeur plutôt que par
référence. Il s'agit donc d'une situation inexistente en Java, et je
comprends mal comment en déduire le fonctionnement de ton programme à
partir de fonctionnalités inexistentes du langage Java.
Ben moi aussi je comprends mal comment on peut le déduire mais le
C'est pour cela que je trouve dangereux d'apprendre le C++ avec toute
la STL comme "faisant partie du langage".
Depuis quand la bibliothèque standard du C++ ne fait plus partie du
langage ?
La STL est au C++, ce que le régulateur de vitesse automatique est à
la conduite : un fabuleux outil pour celui qui le maîtrise et un bon
moyen de finir dans le décor pour les autres.
Je ne suis pas d'accord avec ton analogie. La bibliothèque standard
fourmille d'outils qui accélèrent et sécurisent la programmation en C++.
Ne pas les utiliser, c'est comme bricoler son propre régulateur de
vitesse soi-même plutôt que d'utiliser celui du constructeur, et le
résultat sera souvent plus catastrophique.
Que celui qui n'a jamais eu à désembrouiller des problèmes de
corruption mémoire en C++ me jette la première pierre...
Ben justement, l'utilisation des containers de la bibliothèque standard
limite énormément les problèmes de corruption de mémoire, d'après ma
propre expérience.
Ok. Toujours le même pb : à condition de bien les utiliser.
Le problème c'est que Java et C++ sont par essence très différents
mais qu'ils sont aussi par ailleurs horriblement proches d'un point de
vue syntaxique. Il est donc aisé d'induire le comportement de l'un par
ce que l'on connait de l'autre.
Je ne trouve pas. En Java, les objets sont toujours manipulés par des
référence, et dans ton exemple C++ tu utilises des objets créés en
mémoire automatique et en plus tu les passes par valeur plutôt que par
référence. Il s'agit donc d'une situation inexistente en Java, et je
comprends mal comment en déduire le fonctionnement de ton programme à
partir de fonctionnalités inexistentes du langage Java.
Ben moi aussi je comprends mal comment on peut le déduire mais le
C'est pour cela que je trouve dangereux d'apprendre le C++ avec toute
la STL comme "faisant partie du langage".
Depuis quand la bibliothèque standard du C++ ne fait plus partie du
langage ?
La STL est au C++, ce que le régulateur de vitesse automatique est à
la conduite : un fabuleux outil pour celui qui le maîtrise et un bon
moyen de finir dans le décor pour les autres.
Je ne suis pas d'accord avec ton analogie. La bibliothèque standard
fourmille d'outils qui accélèrent et sécurisent la programmation en C++.
Ne pas les utiliser, c'est comme bricoler son propre régulateur de
vitesse soi-même plutôt que d'utiliser celui du constructeur, et le
résultat sera souvent plus catastrophique.Que celui qui n'a jamais eu à désembrouiller des problèmes de
corruption mémoire en C++ me jette la première pierre...
Ben justement, l'utilisation des containers de la bibliothèque standard
limite énormément les problèmes de corruption de mémoire, d'après ma
propre expérience.
Ok. Toujours le même pb : à condition de bien les utiliser.