Richard Delorme wrote in
news:3f696b48$0$20947$:En java, les objets sont systématiquement passés par référence, et non
par copie, sauf les types natifs (boolean, int, ...).
Pas exactement car _tout_ est passé par valeur en Java ; et il n'y a pas
d'exception. C'est juste que les types "référence" sont en fait des
pointeurs vers des endroits qui contiennent plus que les objets (ie:
nombre des références qui pointent là et probablement une ou deux autres
infos).
Richard Delorme <abulmo@nospam.fr> wrote in
news:3f696b48$0$20947$7a628cd7@news.club-internet.fr:
En java, les objets sont systématiquement passés par référence, et non
par copie, sauf les types natifs (boolean, int, ...).
Pas exactement car _tout_ est passé par valeur en Java ; et il n'y a pas
d'exception. C'est juste que les types "référence" sont en fait des
pointeurs vers des endroits qui contiennent plus que les objets (ie:
nombre des références qui pointent là et probablement une ou deux autres
infos).
Richard Delorme wrote in
news:3f696b48$0$20947$:En java, les objets sont systématiquement passés par référence, et non
par copie, sauf les types natifs (boolean, int, ...).
Pas exactement car _tout_ est passé par valeur en Java ; et il n'y a pas
d'exception. C'est juste que les types "référence" sont en fait des
pointeurs vers des endroits qui contiennent plus que les objets (ie:
nombre des références qui pointent là et probablement une ou deux autres
infos).
wrote in message news:...- En Java, tout le monde hérite d'Object. Il y a du pour et du
contre...
Intéressant. Je n'ai pas encore trouver du pour.
Il me semble que ca simplifie la sérialisation entre autres.
kanze@gabi-soft.fr wrote in message news:<d6652001.0309172350.41e59a2b@posting.google.com>...
- En Java, tout le monde hérite d'Object. Il y a du pour et du
contre...
Intéressant. Je n'ai pas encore trouver du pour.
Il me semble que ca simplifie la sérialisation entre autres.
wrote in message news:...- En Java, tout le monde hérite d'Object. Il y a du pour et du
contre...
Intéressant. Je n'ai pas encore trouver du pour.
Il me semble que ca simplifie la sérialisation entre autres.
Richard Delorme wrote in
news:3f696b48$0$20947$:En java, les objets sont systématiquement passés par référence, et
non par copie, sauf les types natifs (boolean, int, ...).
Pas exactement car _tout_ est passé par valeur en Java ; et il n'y a
pas d'exception. C'est juste que les types "référence" sont en fait
des pointeurs vers des endroits qui contiennent plus que les objets
(ie: nombre des références qui pointent là et probablement une ou
deux autres infos).
Richard Delorme <abulmo@nospam.fr> wrote in
news:3f696b48$0$20947$7a628cd7@news.club-internet.fr:
En java, les objets sont systématiquement passés par référence, et
non par copie, sauf les types natifs (boolean, int, ...).
Pas exactement car _tout_ est passé par valeur en Java ; et il n'y a
pas d'exception. C'est juste que les types "référence" sont en fait
des pointeurs vers des endroits qui contiennent plus que les objets
(ie: nombre des références qui pointent là et probablement une ou
deux autres infos).
Richard Delorme wrote in
news:3f696b48$0$20947$:En java, les objets sont systématiquement passés par référence, et
non par copie, sauf les types natifs (boolean, int, ...).
Pas exactement car _tout_ est passé par valeur en Java ; et il n'y a
pas d'exception. C'est juste que les types "référence" sont en fait
des pointeurs vers des endroits qui contiennent plus que les objets
(ie: nombre des références qui pointent là et probablement une ou
deux autres infos).
Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
le Friday 19 September 2003 00:42, écrivit :Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
extrait :
In Java,
Dog d; // Java
is exactly like C or C++'s
Dog *d; // C++
And using
d.setName("Fifi"); // Java
is exactly like C++'s
d->setName("Fifi"); // C++
Si on fait la version C++, on déréférence un pointeur non-initialisé,
donc comportement indéfini et en pratique plantage probable.
C'est vraiment pareil en Java ? "Dog d;" déclare juste un pointeur,
et il faut appeler new explicitement pour obtenir de la mémoire et y
créer un objet ?
Oui
le Friday 19 September 2003 00:42, hermitte@free.fr.invalid écrivit :
Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
extrait :
In Java,
Dog d; // Java
is exactly like C or C++'s
Dog *d; // C++
And using
d.setName("Fifi"); // Java
is exactly like C++'s
d->setName("Fifi"); // C++
Si on fait la version C++, on déréférence un pointeur non-initialisé,
donc comportement indéfini et en pratique plantage probable.
C'est vraiment pareil en Java ? "Dog d;" déclare juste un pointeur,
et il faut appeler new explicitement pour obtenir de la mémoire et y
créer un objet ?
Oui
le Friday 19 September 2003 00:42, écrivit :Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
extrait :
In Java,
Dog d; // Java
is exactly like C or C++'s
Dog *d; // C++
And using
d.setName("Fifi"); // Java
is exactly like C++'s
d->setName("Fifi"); // C++
Si on fait la version C++, on déréférence un pointeur non-initialisé,
donc comportement indéfini et en pratique plantage probable.
C'est vraiment pareil en Java ? "Dog d;" déclare juste un pointeur,
et il faut appeler new explicitement pour obtenir de la mémoire et y
créer un objet ?
Oui
wrote:Imagines par exemple un objet "o_file_stream" gérant un fichier en
écriture. Cet objet contient en interne un objet "buffer" pour des
raisons de performances. La question est : comment s'assurer que
toutes les données sont bien écrites sur le disque au moment où
l'objet o_file_stream est détruit?
L'exemple est mal choisi, je crois. S'il faut s'assurer que tous les
données soient sur disque, il ne faut attendre ne finalize (en Java),
ne le destructeur en C++ (parce que qui dit écrire dit erreur
potentiel, et comment vas-tu traiter l'erreur dans le destructeur ?).
Oui et non : de toute façon, qu'est ce que tu peux faire en cas d'erreur
d'écriture sur disque, où que ce soit dans ton programme?
kanze@gabi-soft.fr wrote:
Imagines par exemple un objet "o_file_stream" gérant un fichier en
écriture. Cet objet contient en interne un objet "buffer" pour des
raisons de performances. La question est : comment s'assurer que
toutes les données sont bien écrites sur le disque au moment où
l'objet o_file_stream est détruit?
L'exemple est mal choisi, je crois. S'il faut s'assurer que tous les
données soient sur disque, il ne faut attendre ne finalize (en Java),
ne le destructeur en C++ (parce que qui dit écrire dit erreur
potentiel, et comment vas-tu traiter l'erreur dans le destructeur ?).
Oui et non : de toute façon, qu'est ce que tu peux faire en cas d'erreur
d'écriture sur disque, où que ce soit dans ton programme?
wrote:Imagines par exemple un objet "o_file_stream" gérant un fichier en
écriture. Cet objet contient en interne un objet "buffer" pour des
raisons de performances. La question est : comment s'assurer que
toutes les données sont bien écrites sur le disque au moment où
l'objet o_file_stream est détruit?
L'exemple est mal choisi, je crois. S'il faut s'assurer que tous les
données soient sur disque, il ne faut attendre ne finalize (en Java),
ne le destructeur en C++ (parce que qui dit écrire dit erreur
potentiel, et comment vas-tu traiter l'erreur dans le destructeur ?).
Oui et non : de toute façon, qu'est ce que tu peux faire en cas d'erreur
d'écriture sur disque, où que ce soit dans ton programme?
le Friday 19 September 2003 00:42, écrivit :Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
extrait :
In Java,
Dog d; // Java
is exactly like C or C++'s
Dog *d; // C++
And using
d.setName("Fifi"); // Java
is exactly like C++'s
d->setName("Fifi"); // C++
Si on fait la version C++, on déréférence un pointeur non-initialisé,
donc comportement indéfini et en pratique plantage probable.
C'est vraiment pareil en Java ? "Dog d;" déclare juste un pointeur, et
il faut appeler new explicitement pour obtenir de la mémoire et y
créer un objet ?
le Friday 19 September 2003 00:42, hermitte@free.fr.invalid écrivit :
Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
extrait :
In Java,
Dog d; // Java
is exactly like C or C++'s
Dog *d; // C++
And using
d.setName("Fifi"); // Java
is exactly like C++'s
d->setName("Fifi"); // C++
Si on fait la version C++, on déréférence un pointeur non-initialisé,
donc comportement indéfini et en pratique plantage probable.
C'est vraiment pareil en Java ? "Dog d;" déclare juste un pointeur, et
il faut appeler new explicitement pour obtenir de la mémoire et y
créer un objet ?
le Friday 19 September 2003 00:42, écrivit :Au passage, je suis tombé cette page assez sympa grâce à google :
<http://javadude.com/articles/passbyvalue.htm>
extrait :
In Java,
Dog d; // Java
is exactly like C or C++'s
Dog *d; // C++
And using
d.setName("Fifi"); // Java
is exactly like C++'s
d->setName("Fifi"); // C++
Si on fait la version C++, on déréférence un pointeur non-initialisé,
donc comportement indéfini et en pratique plantage probable.
C'est vraiment pareil en Java ? "Dog d;" déclare juste un pointeur, et
il faut appeler new explicitement pour obtenir de la mémoire et y
créer un objet ?
wrote in message
news:...Une ramasse-miettes serait une bonne chose en C++, il n'y a rien à
dire. Mais soyons précis : l'existance d'une ramasse-miettes est
orthogonale à la support pour l'OO (qui semblait intéresser surtout
le posteur initial), et c'est également orthogonale à l'existance
des destructeurs.
Il y a eu une proposition pour une ramasse-miettes en C++ présentée
au comité de normalisation avant la dernière norme. Les auteurs l'en
ont rétiré, parce qu'ils s'éstîmaient à l'époque que c'était trop
tard, et que essayer de l'incorporer au langage aurait rétardé la
norme. Je ne l'exclurais pas d'office dans la prochaine version de
la norme, même si d'autres évolutions semblent en avoir réduit
l'importance.
Quel serait le mode de fonctionnement de ce GC? Quand seraient appelés
les destructeurs des objets gérés par le GC, et avec quelles
contraintes? Si tu as une référence sur le sujet....
Il me semble que le "problème" du GC Java est qu'il gère
obligatoirement tous les objets (c'est lié à l'absence d'objets par
valeur).
L'absence des destructeurs en Java est palié par les blocs finally.
Que l'utilisateur oublie systèmatiquement à mettre:-) -- dans ce
cas-ci, on pourrait dire que Java et C++ offrent les mêmes
possibilités, avec des moyens bien différents, mais que la façon C++
de faire est nettement plus robuste.
Oui : c'est anormal qu'une classe ait à se reposer sur le code client
pour garantir la libération de ses ressources privées.
- En Java, tout le monde hérite d'Object. Il y a du pour et du
contre...
Intéressant. Je n'ai pas encore trouver du pour.
Il me semble que ca simplifie la sérialisation entre autres.
kanze@gabi-soft.fr wrote in message
news:<d6652001.0309172350.41e59a2b@posting.google.com>...
Une ramasse-miettes serait une bonne chose en C++, il n'y a rien à
dire. Mais soyons précis : l'existance d'une ramasse-miettes est
orthogonale à la support pour l'OO (qui semblait intéresser surtout
le posteur initial), et c'est également orthogonale à l'existance
des destructeurs.
Il y a eu une proposition pour une ramasse-miettes en C++ présentée
au comité de normalisation avant la dernière norme. Les auteurs l'en
ont rétiré, parce qu'ils s'éstîmaient à l'époque que c'était trop
tard, et que essayer de l'incorporer au langage aurait rétardé la
norme. Je ne l'exclurais pas d'office dans la prochaine version de
la norme, même si d'autres évolutions semblent en avoir réduit
l'importance.
Quel serait le mode de fonctionnement de ce GC? Quand seraient appelés
les destructeurs des objets gérés par le GC, et avec quelles
contraintes? Si tu as une référence sur le sujet....
Il me semble que le "problème" du GC Java est qu'il gère
obligatoirement tous les objets (c'est lié à l'absence d'objets par
valeur).
L'absence des destructeurs en Java est palié par les blocs finally.
Que l'utilisateur oublie systèmatiquement à mettre:-) -- dans ce
cas-ci, on pourrait dire que Java et C++ offrent les mêmes
possibilités, avec des moyens bien différents, mais que la façon C++
de faire est nettement plus robuste.
Oui : c'est anormal qu'une classe ait à se reposer sur le code client
pour garantir la libération de ses ressources privées.
- En Java, tout le monde hérite d'Object. Il y a du pour et du
contre...
Intéressant. Je n'ai pas encore trouver du pour.
Il me semble que ca simplifie la sérialisation entre autres.
wrote in message
news:...Une ramasse-miettes serait une bonne chose en C++, il n'y a rien à
dire. Mais soyons précis : l'existance d'une ramasse-miettes est
orthogonale à la support pour l'OO (qui semblait intéresser surtout
le posteur initial), et c'est également orthogonale à l'existance
des destructeurs.
Il y a eu une proposition pour une ramasse-miettes en C++ présentée
au comité de normalisation avant la dernière norme. Les auteurs l'en
ont rétiré, parce qu'ils s'éstîmaient à l'époque que c'était trop
tard, et que essayer de l'incorporer au langage aurait rétardé la
norme. Je ne l'exclurais pas d'office dans la prochaine version de
la norme, même si d'autres évolutions semblent en avoir réduit
l'importance.
Quel serait le mode de fonctionnement de ce GC? Quand seraient appelés
les destructeurs des objets gérés par le GC, et avec quelles
contraintes? Si tu as une référence sur le sujet....
Il me semble que le "problème" du GC Java est qu'il gère
obligatoirement tous les objets (c'est lié à l'absence d'objets par
valeur).
L'absence des destructeurs en Java est palié par les blocs finally.
Que l'utilisateur oublie systèmatiquement à mettre:-) -- dans ce
cas-ci, on pourrait dire que Java et C++ offrent les mêmes
possibilités, avec des moyens bien différents, mais que la façon C++
de faire est nettement plus robuste.
Oui : c'est anormal qu'une classe ait à se reposer sur le code client
pour garantir la libération de ses ressources privées.
- En Java, tout le monde hérite d'Object. Il y a du pour et du
contre...
Intéressant. Je n'ai pas encore trouver du pour.
Il me semble que ca simplifie la sérialisation entre autres.
(Arnaud Debaene) wrote in message
news:...wrote in message
news:...Une ramasse-miettes serait une bonne chose en C++, il n'y a rien
à dire. Mais soyons précis : l'existance d'une ramasse-miettes
est orthogonale à la support pour l'OO (qui semblait intéresser
surtout le posteur initial), et c'est également orthogonale à
l'existance des destructeurs.
Il y a eu une proposition pour une ramasse-miettes en C++
présentée au comité de normalisation avant la dernière
norme. Les auteurs l'en ont rétiré, parce qu'ils s'éstîmaient à
l'époque que c'était trop tard, et que essayer de l'incorporer
au langage aurait rétardé la norme. Je ne l'exclurais pas
d'office dans la prochaine version de la norme, même si d'autres
évolutions semblent en avoir réduit l'importance.
Quel serait le mode de fonctionnement de ce GC? Quand seraient
appelés les destructeurs des objets gérés par le GC, et avec
quelles contraintes? Si tu as une référence sur le sujet....
Ça dépend des avis. À mon avis, si un objet est ramassé par le GC,
son destructeur ne doit pas être appelé. (Ou inversement, si un
objet a besoin qu'on appelle son destructeur, il ne faut pas qu'il
soit géré par le GC.) Mais Hans Boehm (le véritable expert) n'est
pas d'accord, ou au moins est plus nuancé.
Voir par exemple la question « What does a garbage collector do
about destructors? », dans la GC FAQ
(http://www.iecc.com/gclist/GC-faq.html) ou « Safe, Efficient
Garbage Collection for C++ », de Ellis et Detlefs
(http://gatekeeper.dec.com/pub/DEC/SRC/research-reports/abstracts/src-rr-102.html).
Ce qui est certain, c'est que des opérations qui doivent se faire à
un moment défini ne doivent pas se trouver dans le destructeur d'un
objet géré par la ramasse-miettes.
adebaene@club-internet.fr (Arnaud Debaene) wrote in message
news:<16a4a8c7.0309180728.7072138c@posting.google.com>...
kanze@gabi-soft.fr wrote in message
news:<d6652001.0309172350.41e59a2b@posting.google.com>...
Une ramasse-miettes serait une bonne chose en C++, il n'y a rien
à dire. Mais soyons précis : l'existance d'une ramasse-miettes
est orthogonale à la support pour l'OO (qui semblait intéresser
surtout le posteur initial), et c'est également orthogonale à
l'existance des destructeurs.
Il y a eu une proposition pour une ramasse-miettes en C++
présentée au comité de normalisation avant la dernière
norme. Les auteurs l'en ont rétiré, parce qu'ils s'éstîmaient à
l'époque que c'était trop tard, et que essayer de l'incorporer
au langage aurait rétardé la norme. Je ne l'exclurais pas
d'office dans la prochaine version de la norme, même si d'autres
évolutions semblent en avoir réduit l'importance.
Quel serait le mode de fonctionnement de ce GC? Quand seraient
appelés les destructeurs des objets gérés par le GC, et avec
quelles contraintes? Si tu as une référence sur le sujet....
Ça dépend des avis. À mon avis, si un objet est ramassé par le GC,
son destructeur ne doit pas être appelé. (Ou inversement, si un
objet a besoin qu'on appelle son destructeur, il ne faut pas qu'il
soit géré par le GC.) Mais Hans Boehm (le véritable expert) n'est
pas d'accord, ou au moins est plus nuancé.
Voir par exemple la question « What does a garbage collector do
about destructors? », dans la GC FAQ
(http://www.iecc.com/gclist/GC-faq.html) ou « Safe, Efficient
Garbage Collection for C++ », de Ellis et Detlefs
(http://gatekeeper.dec.com/pub/DEC/SRC/research-reports/abstracts/src-rr-102.html).
Ce qui est certain, c'est que des opérations qui doivent se faire à
un moment défini ne doivent pas se trouver dans le destructeur d'un
objet géré par la ramasse-miettes.
(Arnaud Debaene) wrote in message
news:...wrote in message
news:...Une ramasse-miettes serait une bonne chose en C++, il n'y a rien
à dire. Mais soyons précis : l'existance d'une ramasse-miettes
est orthogonale à la support pour l'OO (qui semblait intéresser
surtout le posteur initial), et c'est également orthogonale à
l'existance des destructeurs.
Il y a eu une proposition pour une ramasse-miettes en C++
présentée au comité de normalisation avant la dernière
norme. Les auteurs l'en ont rétiré, parce qu'ils s'éstîmaient à
l'époque que c'était trop tard, et que essayer de l'incorporer
au langage aurait rétardé la norme. Je ne l'exclurais pas
d'office dans la prochaine version de la norme, même si d'autres
évolutions semblent en avoir réduit l'importance.
Quel serait le mode de fonctionnement de ce GC? Quand seraient
appelés les destructeurs des objets gérés par le GC, et avec
quelles contraintes? Si tu as une référence sur le sujet....
Ça dépend des avis. À mon avis, si un objet est ramassé par le GC,
son destructeur ne doit pas être appelé. (Ou inversement, si un
objet a besoin qu'on appelle son destructeur, il ne faut pas qu'il
soit géré par le GC.) Mais Hans Boehm (le véritable expert) n'est
pas d'accord, ou au moins est plus nuancé.
Voir par exemple la question « What does a garbage collector do
about destructors? », dans la GC FAQ
(http://www.iecc.com/gclist/GC-faq.html) ou « Safe, Efficient
Garbage Collection for C++ », de Ellis et Detlefs
(http://gatekeeper.dec.com/pub/DEC/SRC/research-reports/abstracts/src-rr-102.html).
Ce qui est certain, c'est que des opérations qui doivent se faire à
un moment défini ne doivent pas se trouver dans le destructeur d'un
objet géré par la ramasse-miettes.