Je répond au message d'anomaly qui à mon humble sens contient des innexatitudes. J'aurais volontier mis un fu2 mais ... phpBB ne connait pas
1- Plus complexe (car plus riche) oui certainement! Mais paradoxalement, il est aussi bien plus simple pour faire les mêmes choses que le C. P.ex. un gars inexpérimenté aura bien plus de facilités de lire des chaines sans risque de buffer overflow en C++ (et pas en C/C++) qu'en C.Envoyé par Anomaly
<troll>Rien que pour cela et parce que l'on peut aussi écrire du code C en C++ (si l'on excepte les VLA et les contraintes faibles sur les non paramètres équivalents à "..."), je me dis de plus en plus que le C en temps que langage indépendant a un intérêt excessivement restreint (aux architectures dépourvues de compilateurs C++).</>
2- Le C a aussi évolué plusieurs fois et continue encore d'évoluer. Mais il est vrai que son côté plus limité (en termes de paradigmes et autres fonctionnalités) font qu'il a moins de marge et que ses changements sont moins visibles. L'arrivé des booléens est encore plus tardive en C... Et les vieux compilateurs C supportent tout aussi mal les VLA que les vieux compilateurs C++ supportent mal les templates.
3- La SL est exception-safe et exception-neutral dans sa grande majorité -- pas à 100% sécurisé dans les flux je crois.
Pour ce qui est du garbage collector. J'ai envie de dire que les problèmes viennent d'une mauvaise connaissance de C++, surtout si on regarde les exceptions. Couplées avec le RAII (Ressource Allocation Is Initialization), les exceptions permettent de gérer très proprement les cas d'erreur (déroutements en cas de situation exceptionnelle...) sans perdre de ressources (mémoire ou autre) -- je vais vous le pondre cet article. Faire la même chose en C est un peu plus pénible -- pour s'en convaincre, il suffit d'écrire une fonction d'allocation de tableau à 2 dimensions qui ne fuira pas même si l'allocation de la 10e ligne (et suivantes) échoue ; bien sûr, les initiés ne feront qu'une seule allocation, mais ce n'est pas grave c'est exactement le même problème que la réservation de façon atomique d'un buffer et de 4 bras robotisés sur une chaine de montage.
AMHA, le problème vient plutôt des gens qui se sentent obligés d'enseigner/utiliser new[] parce que cela fait parti de la syntaxe et qu'ils sont moins perdus parce qu'ils n'ont qu'à transposer malloc() qu'ils connaissent déjà.
Connaitre les bases de la SL (i.e. savoit utiliser les vecteurs et les chaines) nous assure de ne pas perdre de mémoire même en cas d'exceptions.
Tout le problème du C++ est là. Les gens en majorité ne connaissent pas ces bases et croient que le C++ c'est le C avec des mots clés rigolos en plus.
4- GCC n'est pas connu pour être un bon optimisateur. Et quant à parler de GCC 3.x, autant le comparer avec les compilateurs de même cru comme VC++ 7.1 (aussi disponible gratuitement pour sa version en lligne de commande) qui dispose d'un des meilleurs supports de la norme (voir les tests de regression sur le site de boost).
Mais je dois reconnaitre que le code généré peut (car ce n'est pas nécessaire) être beaucoup plus conséquent. Généralement, cela va de pair avec la bibliothèque de flux qui de base dispose de plus de fonctionnalités prêtes à l'emploi que l'on paye assez systématiquement.
Pour les autres partie de la SL, c'est variable vu que l'on ne paye que ce que l'on utilise, et que tous les compilateurs ne savent pas regrouper les vecteurs de pointeurs sous la même bannière.
5- IIRC, il n'existe en effet qu'un seul compilateur à jour : le comeau qui suporte extern pour les templates. Et peut-être aussi les autres dérivés d'EDG, ... mais je m'avance ; information à confirmer.
Pour ce qui est des templates, inutile de sortir spécialisations partielles et autres trucs compliqués comme les template de template pour pouvoir utiliser la SL. C'est comme si tu disais que tu refusais d'utiliser les tableaux en C parce que tous les compilateurs ne supportent pas les VLA.
Vous aurez compris que j'ai voté C++ pour sa richesse, robustesse, relativement bonne portabilité, performances.
Gros coup de coeur toutes fois pour l'Eiffel.
Partager