Bonjour,
il est clair que ce thread est un Troll sur la ML (qui a d'ailleurs déjà eu lieu
l'année dernière, à un moment où un débutant a demandé quel était le meilleur
langage pour débuter). Chacun peut y aller de sa joute, et il n'y aura pas de
gagnants :=)
Il y a quelque chose que je ne peux cependant pas laisser passer:
Tanguy a écrit:
- La mémoire est gérée automatiquement. Dès qu'un objet n'est plus
utilisé par tout autre objet utilisé, il est détruit de la mémoire (cf
Garbage Collector). C++ ne sait pas faire ça en natif : Il faut programmer
un tel G.C. pour qu'à chaque point clé du code (retour de fonction, etc.),
le garbage collector analyse les objets utilisés et les élimine de la
mémoire... Tache très lourde. D'ailleurs, le Garbage Collector n'est pas
pour rien dans la différence de perf entre Java et C++ ;o)
Cela me fait bondir... et me rappelle l'introduction de Roberto di Cosmo pour
son livre sur la face cachée de Microsoft. Il expliquait qu'il se trouvait un
jour dans un train en face d'une personne équipée d'un ordinateur portable, et
cette personne montrait ostensiblement sa fierté après avoir passer quelques
heures à "nettoyer" sa machine grâce à "l'excellent défragmentateur de Windows".
Roberto di Cosmo expliquait que si la machine avait correctement fait son ménage
au fur et à mesure de son travail, tout comme une bonne secrétaire classe
briévement et régulièrement les dossiers qui arrivent, il n'aurait jamais eu à
faire le grand nettoyage de printemps, tout comme une mauvaise secrétaire
laisserait le bordel s'accumuler avant de devoir passer plusieurs jours à tout
ranger.
Si je voulais provoquer, je pourrais dire que le Garbage Collector est fait pour
les développeurs bordéliques et indisciplinés, alors qu'une bonne hygiène de
développement impose de "nettoyer" régulièrement sa mémoire. Il s'agit d'hygiène
de développement. Et Java ne permet pas de nettoyer régulièrement sa mémoire: le
développeur n'a presque aucune maitrise sur le nettoyage (il peut tout au plus
l'influencer avec le finalize, mais pas plus).
D'autre part, cela n'empêche pas les fuites mémoires (eh oui!): pour un code
Java "industriel", il vaut donc mieux jeter un oeil avisé sur la gestion de la
mémoire dans le développement de l'application.
Enfin, là où C++ permet d'allouer (statiquement) sur la pile/stack (et
dynamiquement sur le tas/heap), Java n'alloue que dynamiquement sur le tas/heap.
Quand on sait qu'il y a un rapport de 1 à 10 entre ces deux types d'allocation
(statique/dynamique), on obtient une autre raison pour laquelle Java restera
toujours plus lent que C++.
Attention, ne me faites pas dire ce que je n'ai pas dit: je n'ai jamais dit que
C++ était meilleur que Java, ni même qu'un Garbage Collector était mauvais en
soi. Tout dépend de ce que l'on veut faire. J'ai juste voulu faire comprendre
que les choses ne sont jamais soit blanches soit noires, mais toujours quelque
part au milieu.
Les langages évoluent, et c'est tant mieux. Peut-être dans 10 ans, plus personne
ne programmera parce qu'on utilisera des outils graphiques (genre UML) pour
cela, comme c'est déjà plus ou moins le cas pour les applis graphiques.
Pour le choix du langage, beaucoup de facteurs interviennent, le fameux Time To
Market, le niveau moyen de formation (et donc de rémunération) des développeurs,
la disponibilité (ou non) de ces derniers, la motivation des développeurs, le
niveau de standardisation, le support/la documentation, le matériel et
l'environnement utilisés, le prix des éventuelles licenses, etc.
Donc, nous pouvons continuer à nous battre éternellement à ce sujet, rien de
positif et de constructif en sortira. C'est comme si je disais: "vi est meilleur
qu'Emacs", "Gnome est meilleur que KDE", "Hurd est meilleur que Linux", etc., etc.
Just my E.02
Denis
Linux-Azur : http://www.linux-azur.org
Désinscriptions: http://www.linux-azur.org/liste.php3
**** Pas de message au format HTML, SVP ****