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 ****

Répondre à