[gull] cours C++

Grossiord Yves yves.grossiord at wanadoo.fr
Sat Feb 25 12:43:13 CET 2006


Bonjour,

On ven, 2006-02-24 at 11:13 +0100, Marc Mongenet wrote:
> Mais sur la fin, ils ont tout de même ajouté pas mal de mots
> clé, comme namespace, using, explicit, mutable, export,
> typeid, typename...

Ils ne sont pas totalement obtus non plus. Quelquefois
Stroustrup (ou un autre) "gagne", quelquefois non. Cela depend
de la qualite du dossier, des arguments pour la nouvelle
fonctionnalite...
Ils peuvent aussi etaler la creation du nouveau mot cle sur plusieurs
versions, en ajoutant des warnings, puis des erreurs,
puis en rajoutant la nouvelle fonctionnalite.
Stroustrup explique dans le livre que cela a toujours
fonctionne ainsi. C++ n'a jamais ete un langage academique. Des
le debut, "C with classes" etait une commande. Il a donc
toujours eu des "clients".
Chaque nouvelle fonctionnalite doit repondre a trois criteres
avant meme d'etre examinee:
- cela ne doit pas etre possible avec le langage (il a du se
  battre pour imposer new/delete contre malloc/free)
- une implementation simple doit etre possible (meme si elle
  n'est pas optimale, pour les developpeurs de compilateurs)
- elle doit etre explicable en moins de 10 minutes a un
  utilisateur du langage (pour les enseignants)
Apres, il y a des discussions sur les mailings lists, dans les
conventions, puis un vote. Quelquefois, certaines choses sont
proposees 4 ou 5 fois avant que la formulation ne rassemble un
consensus. Cela ralentit le developpement du langage, mais cela
a permis plusieurs fois d'eviter des erreurs.

Pour info, l'implementation de new peut ressembler a ca:
    X* p = new X(2);
est equivalent a:
    struct X * p = (struct X *) malloc(sizeof(struct X));
    if (p == 0) error("memory exhausted");
    p->init(2);
Qu'est-ce que vous preferez ?

> Oui, d'où le fait qu'on se retrouve avec "typename" au lieu d'un
> simple "type". Heureusement ils ont tout de même introduit
> "bool" et pas l'hideux "_Bool" de C99 :)

Oui, heureusement.

> J'ai testé avec G++, c'est OK :
> bool gt(int a, int b) { return a < b and not a == b; }
> Et c'est bien surchargeable :
> template <class C> bool operator and(C a, C b) { return true; }

Merci, c'est bon a savoir. J'ai change de travail et je suis
passe du Visual C++ aux outils de developpement Oracle. Le
PL/SQL n'a pas grand chose a voir avec le C++, mais j'aimerai
bien m'y remettre prochainement sur des projets open-source (et
ta presentation n'a rien arrange, bien au contraire :^).

Quelques reponses groupees aux autres mails du meme flux:
(desole, je ne sais que ce n'est pas top, mais je suis presse)
- j'evite autant que possible les macros, pour les memes
  raisons evoquees par d'autres
- je prefere utiliser des () et des {} plutot que d'apprendre
  par coeur l'ordre de priorite des operateurs. J'utilise les
  sauts de lignes et l'indentation pour mettre en evidence les
  regroupements et ameliorer la lisibilite
- les conventions de programmation de mon premier employeur
  demandaient de placer la constante en premier quand on
  comparait une constante et une variable. De cette facon, si
  on oublie un '=', cela provoque une erreur de compilation.
  Ca parait un peu bizarre au debut, et ca ne regle que 50%
  des problemes, mais c'est toujours ca de gagne.
    if(0 == pbuffer) { ... }
  Et ca permettrait de detecter tres facilement des tentatives
  d'exploit dans le kernel, comme recemment, de memoire:
    if(... &&(0 = userid)) {...}  // user ne devient pas root
- Stroustrup n'a rien contre le garbage collecting, il dit
  juste que ca ne peut pas etre obligatoire en C++ (par exemple
  pour les systemes temps reel). Il y aura tres probablement
  une forme optionnelle de garbage collector dans la prochaine
  version du C++.

Cordialement, Yves.






More information about the gull mailing list